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

Django搭配Nginx访问域名返回404、gunicorn启动正常问题排查

故障排查结论

首先,大概率不是.env文件直接导致的故障,仅两种特殊场景可能和.env有关,后文会说明。目前从你给出的配置可以明确看到3个核心配置错误,是导致404的主要原因:

  • Nginx server_name配置不匹配域名
    你当前配置的server_name仅绑定了IP65.1.254.234,如果用域名访问,请求无法匹配到该server块,会被Nginx默认的其他server块处理,直接返回404。
    修复:把你的访问域名加到server_name后面,示例:server_name 65.1.254.234 yourdomain.com www.yourdomain.com;

  • location / 块的try_files逻辑错误
    你当前配置的try_files $uri $uri/ =404优先级远高于proxy_pass,Nginx会优先查找本地静态文件,找不到就直接返回404,根本不会把请求转发给后端的Gunicorn服务,所有动态请求都会直接404。
    修复:修改请求转发逻辑,示例:

location / {
    try_files $uri $uri/ @django_proxy;
}
location @django_proxy {
    include proxy_params;
    proxy_pass http://unix:/home/ubuntu/Application_Code/app.sock;
}
  • 静态资源alias配置错误
    你Django配置的STATIC_ROOT = '/var/www/html/static',意味着执行collectstatic后所有静态文件都会存在这个目录下,但你Nginx中location /static的alias配置为/var/www/html,会导致请求/static/xxx.css时,Nginx去/var/www/html/xxx.css找文件,路径不匹配自然返回404。
    修复:修改static块配置
location /static {
    autoindex off; # 生产环境建议关闭自动索引
    alias /var/www/html/static/;
}

可能和.env相关的边缘场景

只有以下两种情况故障会和.env有关:

  • .env中配置的ALLOWED_HOSTS没有添加你访问用的域名,Django会拦截非法域名请求,部分场景下会返回404(通常返回400错误)
  • .env中DEBUG=False,且你未执行python manage.py collectstatic同步静态文件到STATIC_ROOT目录,会导致静态资源404(但你说直接启动Gunicorn时静态文件正常,说明你大概率开了DEBUG模式,Django临时处理了静态资源请求,该场景概率较低)

配置修改完成后,执行nginx -t检查配置语法是否正确,确认无误后执行systemctl reload nginx重载配置即可。

内容的提问来源于stack exchange,提问作者Tech- ARM

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 04:27:01