"connection reset by peer"是Nginx日志中常见的错误,表示客户端在连接过程中突然断开了连接。以下是分析和解决方法:
http {
# 增加连接超时时间
keepalive_timeout 60;
# 客户端请求体读取超时
client_body_timeout 30;
# 客户端请求头读取超时
client_header_timeout 30;
# 发送响应超时
send_timeout 30;
# 代理连接超时
proxy_connect_timeout 60;
proxy_send_timeout 60;
proxy_read_timeout 60;
}
http {
# 启用TCP_NODELAY
tcp_nodelay on;
# 启用TCP_NOPUSH
tcp_nopush on;
# 调整发送缓冲区大小
sendfile on;
sendfile_max_chunk 512k;
}
# 增加TCP最大连接数
echo "net.ipv4.tcp_max_syn_backlog = 8192" >> /etc/sysctl.conf
# 增加等待连接队列大小
echo "net.core.somaxconn = 8192" >> /etc/sysctl.conf
# 启用TCP快速回收
echo "net.ipv4.tcp_tw_recycle = 1" >> /etc/sysctl.conf
# 启用TCP快速重用
echo "net.ipv4.tcp_tw_reuse = 1" >> /etc/sysctl.conf
# 应用修改
sysctl -p
使用grep
分析日志频率:
grep "connection reset by peer" /var/log/nginx/error.log | awk '{print $1}' | sort | uniq -c | sort -nr
检查是否来自特定IP:
grep "connection reset by peer" /var/log/nginx/error.log | awk '{print $NF}' | cut -d':' -f1 | sort | uniq -c | sort -nr
启用keepalive:
upstream backend {
keepalive 32;
}
调整worker连接数:
events {
worker_connections 4096;
}
检查防火墙设置,确保没有主动断开长连接
如果问题持续存在,可能需要: 1. 检查客户端应用代码 2. 进行网络链路质量测试 3. 考虑使用CDN或负载均衡分散流量
大多数情况下,这些错误是正常的客户端行为,无需过度优化,除非它们影响了用户体验或服务器性能。