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

Nginx+UWSGI部署Django:加载自定义错误页但无日志(附521错误更新)

排查步骤与方向

一、先定位Cloudflare与源服务器的连接问题

  • 绕过Cloudflare直接访问:修改本地hosts将域名指向服务器公网IP,或直接用curl http://<服务器IP>访问,判断:
    • 若直接访问也出现自定义错误页且无日志,问题在服务器内部;
    • 若直接访问正常,问题出在Cloudflare配置(SSL模式、防火墙规则、IP白名单)。
  • 检查服务器防火墙/安全组:确保Cloudflare IP段能访问Nginx监听的80/443端口,Debian Bullseye默认用ufw,对比原Stretch的规则,确认未遗漏Cloudflare IP。
  • 验证Nginx监听地址:确认Nginx配置中listen指令为0.0.0.0:80/[::]:443,而非仅127.0.0.1,否则Cloudflare无法连接。

二、解决日志无输出的核心问题

Nginx日志排查

  • 检查日志路径权限:确保access_log/error_log的目录/文件属于www-data用户,权限至少为640;
  • 验证配置语法:执行nginx -t,排查是否因配置错误导致日志无法写入;
  • 本地触发测试:用curl http://localhost访问Nginx,若本地能生成日志,说明Cloudflare的请求未到达Nginx。

uWSGI日志排查

  • 确认日志路径权限:检查uWSGI配置中logto或logger指定的路径,运行用户(通常为部署用户或www-data)需有写入权限;
  • 验证进程状态:执行ps aux | grep uwsgi,确认进程使用的是virtualenv内的Python版本,且加载了正确的配置文件;
  • 直接测试uWSGI:用uwsgi --socket :8000 --module <你的项目>.wsgi启动,再用curl http://127.0.0.1:8000访问,查看是否有日志输出。

Django日志排查

  • 检查settings.py的LOGGING配置:确认日志路径权限足够,DEBUG=False时是否设置了合适的日志级别(如INFO或DEBUG);
  • 直接运行Django测试:在virtualenv内执行python manage.py runserver 0.0.0.0:8001,访问该端口,验证是否生成日志,排除Django自身配置问题。

三、Debian Bullseye环境差异排查

  • Python与uWSGI兼容性:
    • 若uWSGI是系统包安装,可能不兼容自定义Python版本,建议在virtualenv内重新安装:pip install uwsgi;
    • 确认系统依赖:如libpythonX.X、libpcre3等uWSGI依赖库已安装,对比Stretch的系统包列表。
  • Systemd服务配置(若用systemd管理进程):
    • 检查服务文件的User/Group设置,是否因Bullseye用户组变化导致权限问题;
    • 查看服务状态:systemctl status nginx、systemctl status uwsgi,即使进程运行,也可能存在隐性启动警告。

四、521错误针对性排查

  • Cloudflare SSL模式:若使用“严格SSL”,需确保源服务器SSL证书有效且匹配域名,Bullseye的Nginx版本更高,检查是否禁用了Cloudflare支持的SSL协议;
  • Cloudflare健康检查:查看Cloudflare控制台“流量>健康检查”,确认检查的端口、路径是否正确,源服务器是否被标记为不可达;
  • 端口监听验证:执行ss -tulpn | grep nginx,确认Nginx确实监听公网端口,而非仅本地回环。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 19:13:22