Nginx显示默认页面而非Django应用问题排查求助
Django部署后Nginx显示默认页面的排查与解决
核心排查方向
你的Gunicorn直接绑定8000端口能正常访问,说明Django和Gunicorn本身没问题,问题出在Nginx的配置加载、站点匹配或Hestia CP的配置覆盖上,按以下步骤逐一排查:
1. 验证Nginx站点配置的有效性与启用状态
首先确认自定义的Nginx站点配置是否被正确加载:
- 检查配置文件语法是否合法:
若报错,根据提示修正配置文件中的语法错误(比如括号不闭合、路径写错等)。sudo nginx -t - 检查站点配置是否已启用:
标准Nginx路径下,需确保sites-available中的配置文件在sites-enabled中有软链接:
如果你用Hestia CP管理站点,配置文件通常在ls -l /etc/nginx/sites-enabled//home/[你的用户名]/web/[myexample.com]/conf/nginx目录下,需确认Hestia生成的配置中包含了指向Gunicorn的反向代理规则。
2. 检查Nginx Server块的匹配优先级
Nginx会优先匹配最精确的server_name,如果你的配置中server_name写错,或者默认的default_server优先级更高,就会显示默认页面:
- 打开你的Nginx站点配置文件,确认
server_name字段完全匹配你的域名:server { listen 80; server_name myexample.com www.myexample.com; # 确保域名拼写正确 # 其他代理配置... } - 检查是否存在默认的
default_server配置:
如果/etc/nginx/sites-enabled/default软链接存在,或者其他配置文件中有listen 80 default_server的规则,会优先匹配该规则。执行以下命令删除默认配置链接:
然后重载Nginx:sudo rm /etc/nginx/sites-enabled/defaultsudo nginx -s reload
3. 确认Hestia CP未覆盖自定义配置
Hestia CP会自动生成Nginx配置,如果你手动修改了配置,可能被Hestia的自动更新覆盖:
- 登录Hestia CP面板,进入对应站点的
Web设置页面,查看是否启用了反向代理功能:- 若启用,需确保反向代理目标指向
127.0.0.1:8000(或你Gunicorn监听的端口) - 若未启用,需手动添加反向代理规则,或在Hestia的自定义Nginx配置区域添加代理代码:
location / { proxy_pass http://127.0.0.1:8000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; }
- 若启用,需确保反向代理目标指向
- 修改Hestia配置后,记得点击
Save让Hestia重新生成Nginx配置,并重载Nginx。
4. 查看Nginx访问日志定位请求流向
通过访问日志确认请求是否落到了你的自定义Server块:
- 标准Nginx访问日志路径:
tail -f /var/log/nginx/access.log - Hestia CP的站点日志路径:
访问你的域名,查看日志中的tail -f /home/[你的用户名]/web/[myexample.com]/logs/nginx.access.logserver_name字段,如果显示的是_(默认服务器),说明你的自定义Server块未匹配到请求,回到步骤2检查server_name配置。
5. 验证Gunicorn服务的运行状态(若使用systemd管理)
如果你配置了Gunicorn的systemd服务,需确保服务正常运行:
- 查看服务状态:
若服务未启动,执行以下命令启动并设置开机自启:sudo systemctl status gunicornsudo systemctl start gunicorn sudo systemctl enable gunicorn
内容的提问来源于stack exchange,提问作者AhmedRaza
相关产品推荐
相关产品推荐

