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

Django+Gunicorn+Nginx部署后mydomain.ru无法访问,Nginx报111连接拒绝错误求助

Django+Gunicorn+Nginx部署后mydomain.ru无法访问,Nginx报111连接拒绝错误求助

兄弟,我看了你遇到的问题——裸域mydomain.ru访问不了,只能用IP和www.mydomain.ru,还触发Nginx的111连接拒绝错误,这种情况我之前部署Django时也碰到过,咱们一步步来排查解决:

第一步:先确认DNS解析是否正确

首先得确保mydomain.ru的A记录确实指向你的服务器公网IP,别是域名解析出问题了。你可以在本地终端执行:

ping mydomain.ru
# 或者用dig更准确
dig mydomain.ru

如果返回的IP不是你的服务器IP,先去域名服务商那里修正A记录,这是最基础的前提。

第二步:简化并修正Nginx配置

你现在写了两个几乎一样的server块,其实可以合并成一个,而且里面的proxy_set_header Host参数可能是问题所在。把你的Nginx配置改成下面这样:

server {
    listen 80;
    # 同时匹配裸域和www域名
    server_name mydomain.ru www.mydomain.ru;
    access_log  /var/log/nginx/example.log;

    location /static/ {
        root /home/alex/myproject;
        expires 30d;
    }

    location /media/ {
        root /home/alex/myproject;
        expires 30d;
    }

    location / {
        proxy_pass http://127.0.0.1:8000;
        # 把$server_name改成$host,确保传递正确的请求Host头
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

为什么改$host?因为$host会自动获取用户请求里的真实Host头部值,而$server_name只是你配置里写的固定值。Django的ALLOWED_HOSTS是校验请求Host头的,传递正确的Host头才能让Gunicorn正常接收请求。

第三步:验证Nginx配置并重启

修改完配置后,先检查语法是否正确:

sudo nginx -t

如果输出nginx: configuration file /etc/nginx/nginx.conf test is successful,就重启Nginx生效:

sudo systemctl restart nginx

第四步:检查Gunicorn日志找线索

你之前只看了Nginx的日志,Gunicorn的日志可能藏着关键信息——比如有没有接收到mydomain.ru的请求,是不是因为Host头不对被拒绝了。如果用supervisor管理Gunicorn,日志一般在/var/log/supervisor/目录下,比如:

cat /var/log/supervisor/gunicorn.log

看看里面有没有和mydomain.ru相关的错误提示。

第五步:本地测试Nginx转发是否正常

在服务器本地用curl模拟外部请求,测试Nginx能不能正确把mydomain.ru的请求转发给Gunicorn:

curl -H "Host: mydomain.ru" http://127.0.0.1

如果能返回Django的页面内容,说明Nginx到Gunicorn的转发没问题,问题可能在外部网络或者DNS;如果还是报错,那就是Nginx配置或者Gunicorn的问题,再回头检查。

第六步:确认Django的配置

再核对一下settings.py里的配置,确保裸域和www域名都在允许列表里:

ALLOWED_HOSTS = ['mydomain.ru', 'www.mydomain.ru', '你的服务器公网IP']
CSRF_TRUSTED_ORIGINS = ['http://mydomain.ru', 'http://www.mydomain.ru']

注意你现在用的是HTTP(80端口),所以不要加https,后续如果配置SSL再改。

第七步:检查防火墙规则

虽然服务器IP能访问,但还是确认一下防火墙有没有允许80端口的所有请求:

sudo ufw status

如果看到80/tcp不在允许列表里,就添加规则:

sudo ufw allow 80/tcp

按照上面的步骤走一遍,应该能解决你的问题。如果还是不行,把Gunicorn的日志内容贴出来,咱们再接着排查!

备注:内容来源于stack exchange,提问作者Artem P

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.21 16:03:02