使用 AWS 签名的 NGINX 反向代理配置

使用 AWS 签名的 NGINX 反向代理配置

我正在使用 nginx 作为网关的反向代理。它与普通 API 配合使用。但是,它无法与 AWS Signature 配合使用。提示签名不匹配。我添加了代理主机,但仍然不起作用。请帮忙。已验证 nginx 日志,所有标头都已传递。计算签名时出现问题。已尝试通过邮递员和使用 AWSSign sdk 的有效代码

location / {                                
                proxy_pass_request_headers on;
                proxy_pass_request_body on;                     
                proxy_pass_header x-api-key;
                proxy_pass_header Authorization;
                proxy_pass_header x-amz-content-sha256;
                proxy_pass_header x-amz-date;
                #proxy_pass_header Host;
                proxy_set_header Host $proxy_host;
                proxy_pass https://<gatewayid>.execute-api.<region-name>.amazonaws.com/<stage>/;
                proxy_http_version  1.1;                        
            }

观察 nginx 的日志,我可以看到签名值和 sha256 值与我在 postman 中看到的完全不同。

答案1

只是一点小改动。它期望从阶段开始到 api 路径结束的路径。所以我从 proxy_pass 中删除了阶段名称并将其添加到实际 url 中,这样签名就计算正确了。在 postman 中使用 (gatewayid).execute-api.(region-name).amazonaws.com 明确覆盖主机

location / {                                
                proxy_pass_request_headers on;
                proxy_pass_request_body on;                                     
                proxy_set_header Host $proxy_host;
                proxy_pass https://(gatewayid).execute-api.(region-name).amazonaws.com/;
                proxy_http_version  1.1;                        
            }

相关内容