You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AWS RHEL实例nginx反向代理Docker容器返回502错误如何解决

排查解决步骤

1. 修正容器启动与Django监听配置

  • docker-compose run命令默认不会加载docker-compose.yml中配置的ports端口映射规则,该命令仅用于一次性任务场景,启动后台服务请使用docker-compose up -d mod;如果坚持用run命令,需添加--service-ports参数:docker-compose run --name mod --service-ports mod
  • 容器内Django监听127.0.0.1:8000无法被宿主机访问,该地址仅允许容器内部进程访问,需修改Django启动命令监听所有地址:python manage.py runserver 0.0.0.0:8000
  • 验证容器状态:执行docker ps确认mod容器处于运行状态,再执行docker exec -it mod curl 127.0.0.1:8000,确认容器内Django服务可正常返回响应

2. 验证宿主机端口连通性

在RHEL实例本地执行curl 127.0.0.1:38000,如果该请求无法正常返回Django响应,说明端口映射或Django配置异常,问题未到nginx处理环节,优先修复上述配置。

3. 修正nginx配置(可选,解决后续404问题)

当前location /mod配置会将完整的/mod/xxx路径传递给Django,若Django路由未配置/mod前缀会返回404,可修改配置自动去除前缀:

location /mod/ {
    proxy_set_header X-Forwarded-Host $host;
    proxy_set_header X-Forwarded-Server $host;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_redirect off;
    proxy_pass http://127.0.0.1:38000/;
}

修改配置后执行nginx -t验证语法合法性,再执行nginx -s reload重载配置生效。

4. 排查RHEL系统安全限制

  • 防火墙验证:可临时关闭防火墙测试systemctl stop firewalld,如果测试恢复正常,再配置防火墙规则开放对应端口即可
  • SELinux验证:RHEL默认开启SELinux会阻止nginx反向代理到本地端口,执行getsebool httpd_can_network_connect,如果返回值为off,执行setsebool -P httpd_can_network_connect 1开启权限,该问题是RHEL环境下nginx反向代理返回502的典型诱因。

5. 日志定位

如果以上步骤均未解决问题,查看nginx错误日志定位根因,默认日志路径为/var/log/nginx/error.log。

内容的提问来源于stack exchange,提问作者G. Morris

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 13:48:01