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

NGINX上游连接失败及301重定向过多问题求助

问题解决指南:Nginx连接上游被拒绝+301重定向循环

一、解决connect() failed (111: Connection refused)错误

这个错误说明Nginx无法连接到后端Django服务,按以下步骤排查:

  • 确认Django服务状态与监听端口
    执行命令检查127.0.0.1:8000是否处于监听状态:

    ss -tulpn | grep 8000
    

    若无输出,说明Django未启动,根据部署方式执行对应启动命令:

    • 开发环境:python manage.py runserver 127.0.0.1:8000
    • 生产环境(Gunicorn示例):gunicorn --bind 127.0.0.1:8000 your_project.wsgi:application
  • 验证本地端口连通性
    用curl测试本地访问Django:

    curl http://127.0.0.1:8000
    

    若同样返回连接拒绝,检查防火墙规则(如ufw/iptables)是否拦截了本地8000端口,临时关闭防火墙或添加允许规则测试。

  • 确认Django绑定IP
    确保Django启动时绑定的是127.0.0.1或0.0.0.0,若仅绑定外网IP,Nginx通过127.0.0.1将无法连接。

二、解决301重定向循环问题

大量301重定向通常是Django与Nginx的HTTPS配置不匹配导致,按以下步骤修复:

  • 配置Django识别HTTPS请求

    1. 在Django的settings.py中添加:
      SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https')
      ALLOWED_HOSTS = ['backend.globeofarticles.com', 'globeofarticles.com', 'www.globeofarticles.com']
      
      确保ALLOWED_HOSTS包含所有相关域名,避免Django因域名不匹配触发重定向。
    2. 在Nginx的location /块中补充请求头:
      proxy_set_header        X-Forwarded-Proto $scheme;
      proxy_set_header        X-Forwarded-For $remote_addr;
      
  • 检查Django SSL重定向设置
    若settings.py中SECURE_SSL_REDIRECT = True,必须配合上述SECURE_PROXY_SSL_HEADER配置,否则Django会将Nginx转发的HTTP请求重定向到HTTPS,形成循环。生产环境建议保留True并配置代理头,测试阶段可临时设为False。

  • 补充HTTP转HTTPS配置(可选)
    若用户可能通过HTTP访问子域名,添加80端口的server块统一重定向:

    server {
      server_name  backend.globeofarticles.com;
      listen       80;
      return       301 https://$server_name$request_uri;
    }
    

最后验证

修改配置后重启服务:

sudo systemctl restart nginx
# 根据部署方式重启Django服务,如Gunicorn:sudo systemctl restart gunicorn

再次访问子域名确认问题是否解决。

内容的提问来源于stack exchange,提问作者Ghazi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 13:40:54