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

Digital Ocean上Django服务器反复出现Connection reset by peer错误求助

Django服务器反复出现ConnectionResetError的原因及解决建议

问题场景还原

你在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,且这些请求并非你主动发起。

原因分析

  1. 恶意扫描/爬虫的异常连接
    这个175.100.8.37是陌生IP,大概率是互联网上的爬虫或者端口扫描工具在探测你的80端口。这类工具通常会快速建立连接然后主动断开,导致服务器端触发ConnectionResetError——这是TCP协议里的正常现象,当客户端主动重置连接时,服务器就会收到这个错误。

  2. Django开发服务器的局限性
    你用的runserver是Django自带的开发服务器,它仅用于本地开发调试,完全不适合生产环境。它的底层实现很简单,面对这类异常连接时会直接抛出完整的错误堆栈,而生产级服务器(比如Nginx+Gunicorn)会自动静默处理这类异常,不会输出干扰日志。

  3. 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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:37:55