在开始优化前,必须明确当前线路的具体瓶颈。盲目操作无法解决问题。
使用以下命令从你的服务器发起测试,目标IP为你的客户端公网IP或一个国内电信网络测试点(如:119.29.29.29)。
执行持续MTR测试,生成网络路径质量报告:
``` mtr -r -c 100 119.29.29.29 > /tmp/mtr_report.txt ```分析报告,重点关注:
使用iperf3进行TCP吞吐量与重传测试。在服务器端启动服务:
``` iperf3 -s ```在客户端执行测试:
``` iperf3 -c <你的服务器IP> -t 60 -P 8 ```查看输出中的Retr字段,它表示TCP重传次数。重传次数过高(例如超过百次)直接证明线路不稳定导致传输效率低下。
调整服务器TCP协议栈参数,以更好地适应高延迟、有丢包的网络环境。
编辑文件/etc/sysctl.conf,在文件末尾添加以下配置:
``` 增大TCP缓冲区范围,提升高延迟下的吞吐量 net.ipv4.tcp_rmem = 4096 87380 16777216 net.ipv4.tcp_wmem = 4096 65536 16777216 net.core.rmem_max = 16777216 net.core.wmem_max = 16777216 启用TCP窗口缩放,允许大窗口 net.ipv4.tcp_window_scaling = 1 启用更积极的拥塞控制算法(如BBR) net.ipv4.tcp_congestion_control = bbr 允许重用TIME-WAIT状态的socket,应对短连接高并发 net.ipv4.tcp_tw_reuse = 1 net.ipv4.tcp_timestamps = 1 增加最大连接跟踪数,防止满载 net.netfilter.nf_conntrack_max = 262144 ```保存后,执行以下命令使配置立即生效:
``` sysctl -p ```执行以下命令,确认BBR已作为拥塞控制算法运行:
``` sysctl net.ipv4.tcp_congestion_control ```输出应为net.ipv4.tcp_congestion_control = bbr。
查看队列规则:
``` lsmod | grep bbr ```应有tcp_bbr模块显示。
针对常见的HTTP/HTTPS和TCP应用进行优化。

编辑Nginx配置文件(通常在/etc/nginx/nginx.conf的http块中),调整以下参数:
``` http { 保持长连接,减少TCP握手开销 keepalive_timeout 30; keepalive_requests 100; 增大缓冲区,应对高延迟 client_body_buffer_size 128k; client_header_buffer_size 4k; large_client_header_buffers 4 16k; 启用Gzip压缩,减少传输数据量 gzip on; gzip_min_length 1k; gzip_comp_level 2; gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript; 启用静态文件缓存,减少重复请求 open_file_cache max=1000 inactive=20s; open_file_cache_valid 30s; open_file_cache_min_uses 2; open_file_cache_errors on; } ```修改后,测试配置并重载:
``` nginx -t && nginx -s reload ```TFO可以减少TCP三次握手带来的往返延迟(RTT)。在/etc/sysctl.conf中追加:
``` net.ipv4.tcp_fastopen = 3 ```生效后,在Nginx的listen指令后添加fastopen=256参数:
``` listen 443 ssl http2 fastopen=256; ```如果服务器拥有多个IP(如电信、联通双线),可通过策略路由实现智能选路。
创建两个新的路由表,编辑/etc/iproute2/rt_tables:
``` 100 telecom 101 unicom ```为每个网卡添加路由规则。假设eth0为电信IP(10.0.0.2),eth1为联通IP(10.0.1.2):
``` 清空现有规则 ip rule flush ip route flush table telecom ip route flush table unicom 为电信路由表添加默认网关(假设电信网关为10.0.0.1) ip route add default via 10.0.0.1 dev eth0 table telecom ip rule add from 10.0.0.2 table telecom 为联通路由表添加默认网关(假设联通网关为10.0.1.1) ip route add default via 10.0.1.1 dev eth1 table unicom ip rule add from 10.0.1.2 table unicom 设置主路由表(默认走电信) ip route add default via 10.0.0.1 dev eth0 ```此配置使来自电信IP的流量从电信线路出站,来自联通IP的流量从联通线路出站。
当直连线路质量极差且无法通过以上方法解决时,考虑通过优质线路的中间服务器进行流量中转。
在中转服务器上安装Haproxy:
``` apt-get update && apt-get install -y haproxy Debian/Ubuntu yum install -y haproxy CentOS/RHEL ```编辑配置文件/etc/haproxy/haproxy.cfg,添加一个TCP代理前端和后端:
``` frontend tcp-in bind :<你的中转端口> mode tcp option tcplog default_backend servers backend servers mode tcp option tcp-check balance roundrobin server origin-server <你的源站服务器IP>:<源站端口> check maxconn 2000 ```启动并设置开机自启:
``` systemctl start haproxy systemctl enable haproxy ```现在,客户端连接中转服务器IP:中转端口,流量将被透明转发至你的源站服务器。
优化后,重复第一部分的测试命令,对比数据:
``` 再次进行MTR和iperf3测试,与优化前报告对比 mtr -r -c 100 119.29.29.29 iperf3 -c <你的服务器IP> -t 30 ```监控系统TCP连接状态,确认无大量异常状态:
``` ss -ant | awk 'NR>1 {++S[$1]} END {for(a in S) print a, S[a]}' ```主要观察ESTAB(正常连接)数量,TIME-WAIT应在合理范围,CLOSE-WAIT和LAST-ACK应极少。
下一篇: 搞定服务器掉线自动重连,从此告别半夜修仙
易频IT社区是综合性互联网IT技术门户网站,专注分享网络技术、服务器运维、网络安全、编程开发、系统架构、云计算、大数据等行业干货,实时更新IT行业资讯、零基础教程、实战案例,为IT从业者、技术爱好者提供专业的学习交流平台。
Copyright © 2021-2026 易频IT社区. All Rights Reserved. 备案号:闽ICP备2023013482号 网站地图