Azure容器应用Nginx反向代理外部请求报连接失败排查
Azure容器应用中Nginx反向代理外部请求503错误排查
环境与配置
Nginx反向代理与后端服务均以Docker镜像部署在Azure容器应用,核心反向代理规则如下:
location /api/my-service/ { access_log /var/log/nginx/my-service_api.log main; proxy_http_version 1.1; proxy_set_header "Connection" ""; proxy_pass http://my-service/; }
问题现象
- 容器内部执行
curl -ik -X GET 'https://localhost/api/my-service/some-endpoint',或通过容器应用公网URL在内部发起请求,均可获得预期响应 - 本地电脑发起外部请求时,返回503错误,错误详情:
upstream connect error or disconnect/reset before headers. retried and the latest reset reason: connection failure, transport failure reason: delayed connect error: 111
此前容器内部也曾出现相同错误,添加proxy_http_version 1.1;配置后解决,因此怀疑外部请求到Nginx容器间存在HTTP版本相关问题,但未找到直接配置或日志佐证。
核心疑问
既然容器内部反向代理运行正常,是否可认定问题与容器应用配置相关?可能的原因是什么?
补充信息
- 已启用Ingress,允许任意来源流量,Ingress类型为HTTP,传输方式设为
auto - 使用Cloudflare证书加密Cloudflare与容器应用间流量,跳过Cloudflare直接访问容器应用URL仍出现相同错误
分析与可能原因
可以初步认定问题与Azure容器应用的外部流量配置或网络层设置相关——容器内部请求正常,说明Nginx代理逻辑、后端服务连通性本身无问题,故障点出在外部流量进入容器应用后的处理环节。
可能的原因包括:
- Ingress HTTP版本适配异常:虽然Ingress传输方式设为
auto,但Azure容器应用的Ingress可能对外部请求的HTTP版本有默认限制(比如默认兼容HTTP/1.0),导致流量转发到Nginx后出现连接异常。可尝试强制Ingress使用HTTP/1.1,或在Nginx配置中添加针对外部请求的HTTP版本强制转换逻辑。 - 容器端口/协议配置不匹配:检查Nginx容器的端口绑定配置,确认Ingress指向的端口与容器暴露端口一致,且协议设置为HTTP/1.1。若端口映射协议为HTTP/2,可能与Nginx的代理配置不兼容。
- 外部流量下的DNS解析问题:内部请求时Nginx可正常解析
my-service,但外部流量经过Ingress后,容器应用的内部DNS解析策略可能变化,导致Nginx无法正确找到后端服务。可在Nginx配置中添加DNS解析日志,验证外部请求时my-service的解析状态。 - 连接超时配置差异:Azure容器应用Ingress的默认连接超时时间可能远短于内部请求的超时设置,导致Nginx与后端服务的连接被提前回收。可在Nginx配置中增加
proxy_connect_timeout、proxy_send_timeout、proxy_read_timeout等参数,延长超时阈值。 - Ingress路由规则冲突:检查是否存在优先级更高的Ingress规则,干扰了
/api/my-service/路径的流量转发,导致请求被导向错误后端。
内容的提问来源于stack exchange,提问作者FercoCQ
相关产品推荐
相关产品推荐

