系统相关
首页 > 系统相关> > amazon-web-services – Nginx proxy_pass到aws Api Gateway

amazon-web-services – Nginx proxy_pass到aws Api Gateway

作者:互联网

我想配置Nginx反向代理服务器,它将把HTTP获得的所有请求重定向到我的AWS Api网关端点,即HTTPS(它是一个GET方法). (如果你想知道原因,原因是我有一个AWS Lambda函数,我希望第三方供应商通过Api Gateway调用,但他目前有一个与AWS的ssl_handshake的错误,可能是因为SNI.所以我会给他这个HTTP代理服务器).

我尝试过这样的事情:

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配置中遗漏了一些东西,但我不确定是什么.

解决方法:

您的问题是您将要发送到AWS API Gateway的HTTP Host标头设置为错误的值.

API网关需要将HTTP主机头设置为其自己的主机,例如到SOMETHING.execute-api.REGION.amazonaws.com

所以你应该:

proxy_set_header Host $proxy_host;

代替:

proxy_set_header Host $host;

实际上,您不必显式设置代理主机头,因为如果没有设置,Nginx会将其默认为$proxy_host

见Nginx docs on this

标签:nginx,proxy,amazon-web-services,ssl,aws-api-gateway
来源: https://codeday.me/bug/20190523/1155163.html