Azure容器应用中Nginx反向代理FastAPI返回404问题求助
Azure容器应用Nginx反向代理404问题解决建议
问题背景
在Azure容器应用中搭建Nginx反向代理,环境包含Nginx(外部入口)和FastAPI(内部入口)容器,配置了手动虚拟网络、子网及私有DNS区域。访问Nginx公网URL的根路径/时出现Azure蓝色404页面,但/nginx路径可正常访问;Nginx容器内通过curl http://chat-api:80能正常调用API,且本地Docker Compose环境运行正常。
排查与解决步骤
检查容器应用Ingress配置
确认Nginx容器的Ingress设置:- 确保Ingress的目标端口与Nginx监听的80端口一致;
- 确认Ingress未设置额外的路径前缀,避免Azure路由规则拦截根路径
/的请求; - 检查是否有其他容器应用的Ingress规则冲突,导致根路径请求被错误路由。
调整Nginx的Host头转发配置
当前配置中proxy_set_header Host $host;会将Azure公网域名作为Host头转发给API容器,若FastAPI服务有Host头校验,可能导致请求被拒绝。可尝试修改为:proxy_set_header Host $proxy_host; # 或直接指定API容器名称 # proxy_set_header Host chat-api;验证私有DNS解析稳定性
虽然容器内curl正常,但Nginx转发时可能存在DNS解析异常:- 在Nginx容器内执行
nslookup chat-api,确认解析结果稳定指向API容器; - 尝试将upstream中的容器名称替换为API容器的私有IP,测试是否能正常转发:
upstream chat_api_group { server 10.0.0.x:80; # 替换为API容器的私有IP }
- 在Nginx容器内执行
查看Nginx debug日志
已开启debug级日志,进入Nginx容器查看/var/log/nginx/error.log,重点关注根路径转发时的错误信息(如连接超时、拒绝、状态码异常等),精准定位问题。调整proxy_pass路径配置
尝试去掉proxy_pass末尾的斜杠,避免路径匹配冲突:proxy_pass http://chat_api_group;同时可添加
proxy_set_header X-Forwarded-Host $host;,确保转发请求携带正确的主机信息。
附用户提供的Nginx配置
error_log /var/log/nginx/error.log debug; worker_processes auto; events { worker_connections 1024; } http { upstream chat_api_group { server chat-api:80; # Container name } server { listen 80; # Forward all requests to the chat api webserver location / { proxy_pass http://chat_api_group/; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Real-IP $remote_addr; proxy_http_version 1.1; proxy_ssl_server_name on; # For some people these lines helped, for me they don't proxy_pass_request_headers on; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_redirect off; proxy_buffering off; } # To verify that the nginx server is running regardless of its proxy forwarding location /nginx { alias /usr/share/nginx/html/; index index.html; } } }
内容的提问来源于stack exchange,提问作者AIJoris
相关产品推荐
相关产品推荐

