2016-09-20 123 views
1

我想配置Nginx反向代理服務器,它將通過HTTP將所有請求重定向到我的AWS Api Gateway端點(它是一種GET方法)。 (如果你想知道爲什麼,原因是我有一個AWS Lambda函數,我希望第三方供應商通過Api網關進行調用,但是他目前有一個ssl_handshake與AWS的錯誤,可能是因爲SNI。我會給他這個HTTP代理服務器)。Nginx proxy_pass to aws Api網關

我已經試過這樣的事情:

server { 
     listen  80 default_server; 
     listen  [::]:80 default_server; 
     server_name MY_SERVER_NAME; 
     root   /usr/share/nginx/html; 

     # Load configuration files for the default server block. 
     include /etc/nginx/default.d/*.conf; 

     location/{ 
       proxy_set_header Host $host; 
       proxy_set_header X-Real-IP $remote_addr; 
       proxy_pass https://SOMETHING.execute-api.REGION.amazonaws.com/dev/RESOURCE/METHOD;    
       proxy_ssl_server_name on; 
       proxy_ssl_protocols TLSv1 TLSv1.1 TLSv1.2; 
       proxy_buffering off; 
     } 
} 

但我目前從CloudFront的獲取403,當我嘗試打電話

http://MY_SERVER_NAME 

我覺得我缺少的東西我在Nginx的SSL配置,但我不知道是什麼。

+1

其他客戶選擇在他們的API網關API前放置CloudFront分配以解決API網關的SNI需求。 –

+0

這工作!謝謝。有沒有任何指導去做到這一點?這並不容易。此外,它使用CDN服務成爲不帶緩存的代理服務器非常醜陋,正如我剛剛所做的那樣 - 它可以與其他服務一起使用,可能是AWS LoadBalancer? – yishaiz

+0

Elastic Load Balancer只能將流量發送到EC2實例。 –

回答

1

作爲@Bob Kinney在評論中提出的建議,我通過使用AWS CloudFront而不是此Nginx自定義代理服務器來實現代理。

這些步驟如下:

  1. 轉到分佈,創造新的分配。
  2. 將Origin設置爲Lambda函數的S3存儲桶。
  3. 在這個分佈創建新的原點,並留下領域爲默認 除外:
    • 設置它的原產地域名,以拉姆達 功能的ApiGateway終點。例如。 t7mcsqqzcl.execute-api.us-west-1.amazonaws.com
    • 設定的原點協議政策爲HTTPS只有
  4. 新原產地創建新的行爲,並設置如下:
    • 路徑模式:*
    • 瀏覽器協議政策:HTTP和HTTPS
    • 允許的HTTP方法:GET,HEAD,OPTIONS,PUT,POST,PATCH,DELETE
    • 正向頭:無
    • 正向餅乾:無
    • 查詢字符串轉發和緩存:全部轉發,緩存基於所有
  5. 檢查新行爲與優先級0,這是之前的S3起源的 其他默認行爲。

現在我們有我們發行的域名,例如, d12q4segwfrwl5.cloudfront.net,我們可以激活我們的API,例如請致電http://d12q4segwfrwl5.cloudfront.net/dev/person/name

CloudFront配置的json配置示例可以在here找到。

+0

爲什麼需要點2.將Origin設置爲Lambda函數的S3存儲桶? –

+0

對不起,但我不記得現在的原因。這就是我在互聯網上發現的小文檔中所做的。也許是爲了提供Lambda代碼?歡迎您嘗試一下,如果有效,請發佈更新。 – yishaiz