Django 3.2.3-3.2.6版本开发服务器出现Broken pipe错误问题咨询
Django跨平台部署请求时Broken pipe报错解决方案
你遇到的报错日志如下:
[05/Oct/2021 12:26:24,844] - Broken pipe from ('94.72.62.225', 53959)
你执行的标准化部署步骤如下:
python3 -m venv env . env/bin/activate pip install -r requirements.txt python3 manage.py makemigrations python3 manage.py migrate set ALLOWED_HOSTS=['*'] in settings.py ( ALLOWED_HOSTS=['server_id'] also checked ) python3 manage.py rusnerver 0.0.0.0:8000
问题本质
该报错是TCP连接异常中断的典型表现:服务端准备向客户端返回数据时,客户端已经提前关闭了连接,Django自带开发服务器没有完善的异常捕获机制,就会直接抛出该日志。你在两个不同平台、不同项目都能复现,排除单一项目代码和平台环境问题,按以下优先级排查即可解决:
解决方案
- 修正启动命令拼写错误:你给出的启动命令中
rusnerver为拼写错误,正确命令为python3 manage.py runserver 0.0.0.0:8000,如果实际部署时也存在该拼写错误,会导致服务启动异常、连接直接被重置。 - 放行端口访问权限:首先确认云平台安全组、服务器内部防火墙(ufw/iptables)都已经开放8000端口的入站规则,未放行端口会导致客户端请求被直接拦截、提前断开连接。
- 替换开发服务器为生产级WSGI服务:Django自带的
runserver仅用于本地开发调试,单线程设计、没有异常连接兼容逻辑,公网访问时网络波动、请求延迟都会触发Broken pipe报错。生产部署统一使用gunicorn:- 安装依赖:
pip install gunicorn - 项目根目录执行启动命令,替换原有runserver命令:
gunicorn --bind 0.0.0.0:8000 你的项目名.wsgi:application
高并发场景下建议额外搭配Nginx做反向代理,处理静态资源、连接池管理,稳定性会更高。
- 安装依赖:
- 排查链路连通性:在服务器本地执行
curl 127.0.0.1:8000测试服务是否正常返回,如果本地请求无报错,说明问题出在本地PC到服务器的公网链路上,可以尝试关闭本地代理、切换手机热点等网络环境测试。 - 补充Django兼容配置:在settings.py中添加如下配置,适配公网部署的请求转发逻辑:
USE_X_FORWARDED_HOST = True SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https')
内容的提问来源于stack exchange,提问作者Vasily
相关产品推荐
相关产品推荐

