用于AWS API网关的Nginx反向代理

时间:2019-10-18 08:50:49

标签: nginx aws-api-gateway nginx-reverse-proxy nginx-config

我的用例是我要路由以下请求 http://localhost/STAGE/RESOURCE/123https://MyGatewayID.execute-api.us-west-2.amazonaws.com/STAGE/RESOURCE/123

其中123是路径参数

我正在尝试使用Nginx为我的AWS API Gateway设置反向代理,但是在通过邮递员进行测试时遇到以下错误

  

我们计算出的请求签名与您提供的签名不匹配。检查您的AWS Secret Access密钥和签名方法。有关详细信息,请查阅服务文档。\ n \ n此请求的规范字符串应为\ n'GET \ n / alpha / data / ...

我已经配置了带有访问密钥和密钥的AWS授权标头,以便在使用API​​ Gateway URL时通过邮递员成功命中API Gateway,但是在将其替换为localhost时,会出现上述错误

这是邮递员的工作 https://MyGatewayID.execute-api.us-west-2.amazonaws.com/STAGE/RESOURCE/123

这在邮递员中不起作用 https://localhost/STAGE/RESOURCE/123

这是我的nginx配置

   server {

    listen       80 default_server;
    listen       [::]:80 default_server;
    server_name  localhost;
    root         /usr/share/nginx/html;

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

    location / {
            proxy_set_header Host $proxy_host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_pass https://MyGatewayID.execute-api.us-west-2.amazonaws.com;
            proxy_ssl_server_name on;
            proxy_ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
            proxy_buffering off;
    }

1 个答案:

答案 0 :(得分:0)

签名不匹配,因为主机名用于生成签名。邮递员使用“本地主机”生成签名,API网关期望使用“ MyGatewayID.execute-api.us-west-2.amazonaws.com”。

有关签名组件的完整详细信息,请参见Authenticating Requests (AWS Signature Version 4)

作为解决方法,将网关主机名作为主机标头添加到您的请求中。邮递员将在生成签名时使用它。

我遇到了同样的问题。除了我不希望我的用户必须知道我的专用网关的主机名。