CloudFront搭配EC2 Nginx反向代理时仅HTTPS POST请求失败的排查求助
CloudFront搭配EC2 Nginx反向代理时仅HTTPS POST请求失败的排查求助
各位大佬好,我遇到一个特别诡异的问题,想请大家帮忙排查下:
我在EC2上跑了个Node.js服务,监听3000端口,同时用Nginx做反向代理,把80端口的请求转到3000。直接访问EC2的域名http://ec2-xxx.compute.amazonaws.com时,GET和POST请求都完全正常。
现在我想把api.mydomain.com指向这个服务,于是配置了ACM证书和CloudFront,现在的请求链路是:(https) -> Route53 -> CloudFront -> (http) -> Nginx -> Node.js
但测试下来出现了奇怪的现象:
http://ec2-xxx.compute.amazonaws.com:GET/POST都正常http://dyyyyy.cloudfront.net:GET/POST都正常https://dyyyyy.cloudfront.net:GET正常,POST返回502错误https://api.mydomain.com:GET正常,POST返回502错误
收到的错误页面内容是:
return (<TITLE>ERROR: The request could not be satisfied</TITLE> )502 ERRORThe request could not be satisfied.
我的Nginx配置如下:
server { listen 80; server_name ec2-3-109-166-206.ap-south-1.compute.amazonaws.com; location / { proxy_pass http://127.0.0.1:3000/; proxy_redirect http://127.0.0.1:3000/ /; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Connection $http_connection; proxy_ssl_server_name on; proxy_ssl_session_reuse off; } }
CloudFront配置详情
Settings
- 价格类:Use all edge locations (best performance)
- 备用域名(CNAME):api.mydomain.com
- 自定义SSL证书:domain.com(ACM生成的ID)
- 旧版客户端支持:未启用
- 安全策略:TLSv1
- 支持的HTTP版本:HTTP1、HTTP2、HTTP3
- 标准日志:关闭
- IPv6:开启
Origin
- 域名:ec2-xxx.compute.amazonaws.com
- 协议:match-viewer
- HTTP端口:80
- HTTPS端口:443
- 最小Origin SSL协议:TLSv1.2
- Origin路径:空
- 启用Shield:否
Behavior
- 路径模式:默认(*)
- Origin:ec2-xxx.compute.amazonaws.com
- 自动压缩对象:是
- 查看器协议策略:Http and Https
- 允许的HTTP方法:GET, HEAD, OPTIONS, PUT, POST, PATCH, DELETE
- 限制查看器访问:否
- 缓存键和源请求:缓存策略和源请求策略(推荐)
- 缓存策略:CachingOptimized
- 源请求策略:None
- 响应头策略:CorsAndSecurityHeadersPolicy
- SmoothStream:否
- 字段加密:否
- 函数关联:无关联(所有请求和响应)
我现在完全搞不懂为什么只有HTTPS的POST请求会失败,有没有大佬能指点下排查方向?或者有没有可能是我哪里配置漏了?
备注:内容来源于stack exchange,提问作者AlwaysHungrie
相关产品推荐
相关产品推荐

