Digital Ocean上Django服务器反复出现Connection reset by peer错误求助
问题场景还原
你在DigitalOcean的Ubuntu 16.04 Droplet上部署Django 2.0.4,以root身份SSH登录后执行python manage.py runserver 0.0.0.0:80启动服务,启动正常但闲置时反复收到以下错误日志:
---------------------------------------- ---------------------------------------- Exception happened during processing of request from ('175.100.8.37', 12774) Traceback (most recent call last): File "/usr/lib/python3.5/socketserver.py", line 625, in process_request_thread self.finish_request(request, client_address) File "/usr/lib/python3.5/socketserver.py", line 354, in finish_request self.RequestHandlerClass(request, client_address, self) File "/usr/lib/python3.5/socketserver.py", line 681, in __init__ self.handle() File "/root/website/back-end/env/lib/python3.5/site-packages/django/core/servers/basehttp.py", line 139, in handle self.raw_requestline = self.rfile.readline(65537) File "/usr/lib/python3.5/socket.py", line 575, in readinto return self._sock.recv_into(b) ConnectionResetError: [Errno 104] Connection reset by peer ----------------------------------------
你的配置情况:
ALLOWED_HOSTS设置:
ALLOWED_HOSTS = [ "tedxuwa.com", "www.tedxuwa.com", "localhost:8000" ]
DEBUG = False,且这些请求并非你主动发起。
原因分析
恶意扫描/爬虫的异常连接
这个175.100.8.37是陌生IP,大概率是互联网上的爬虫或者端口扫描工具在探测你的80端口。这类工具通常会快速建立连接然后主动断开,导致服务器端触发ConnectionResetError——这是TCP协议里的正常现象,当客户端主动重置连接时,服务器就会收到这个错误。Django开发服务器的局限性
你用的runserver是Django自带的开发服务器,它仅用于本地开发调试,完全不适合生产环境。它的底层实现很简单,面对这类异常连接时会直接抛出完整的错误堆栈,而生产级服务器(比如Nginx+Gunicorn)会自动静默处理这类异常,不会输出干扰日志。ALLOWED_HOSTS的潜在隐患
虽然当前错误不是DisallowedHost,但你的ALLOWED_HOSTS里没有包含服务器的公网IP,如果扫描请求用IP直接访问你的服务,后续可能会出现DisallowedHost错误,这点需要注意。
解决方案建议
立刻替换为生产环境部署方案
停止使用runserver,改用Gunicorn或uWSGI作为应用服务器,搭配Nginx做反向代理。这是Django生产部署的标准架构,不仅能处理这类异常连接,还能提升服务的性能、稳定性和安全性。配置防火墙限制访问
在DigitalOcean的控制面板里配置防火墙,只开放必要的端口(比如80、443)。另外可以用fail2ban工具自动封禁频繁扫描的恶意IP,减少这类无效请求。修正ALLOWED_HOSTS配置
把服务器的公网IP添加到ALLOWED_HOSTS里,避免后续出现主机不允许的错误:
ALLOWED_HOSTS = ["tedxuwa.com", "www.tedxuwa.com", "你的服务器公网IP"]
- 开启HTTPS加密访问
用Let's Encrypt申请免费SSL证书,配置Nginx强制HTTPS访问,这能过滤掉一部分只扫描HTTP端口的恶意请求,同时提升服务安全性。
内容的提问来源于stack exchange,提问作者Haiz

