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的系统包列表。
- 若uWSGI是系统包安装,可能不兼容自定义Python版本,建议在virtualenv内重新安装:
- 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
相关产品推荐
相关产品推荐

