apache本身不直接处理tcp连接,优化高并发代理性能需协同event mpm、内核tcp参数(如somaxconn、tcp_rmem/wmem)及系统资源限制(如nofile、file-max),并精简代理配置。

Apache 本身不直接处理 TCP 连接的建立与释放,它作为反向代理时,实际的 TCP 行为由 Linux 内核控制。优化大并发下的代理性能,关键不是改 Apache 的“TCP 参数”,而是让 Apache 的代理行为与内核 TCP 栈、连接管理策略协同工作。
选对 MPM 并启用事件驱动模型
Apache 必须使用 event MPM(而非 prefork 或 worker),这是高并发代理场景的底线要求。event MPM 支持异步 I/O 和 KeepAlive 连接复用,能以极低资源维持数万空闲连接。
- 确认已启用:
a2enmod mpm_event(Debian/Ubuntu)或检查httpd -V | grep MPM - 在
mpm_event.conf中设置合理规模:StartServers 4MinSpareThreads 75MaxSpareThreads 250ThreadsPerChild 25MaxRequestWorkers 4000(按内存预留:每个线程约 2–3MB) - 禁用
prefork模块,避免进程级阻塞干扰代理吞吐
代理配置要轻量、无协议解析
Apache 的 mod_proxy 在 TCP 代理中应保持“透传”角色,避免引入 HTTP 解析开销或缓冲干扰。
PHP中文网提供Apache 2.4.62 官方 tar.gz 源码包下载,通过源码编译安装,开发者能够灵活定制模块、优化性能并精准控制安装路径,满足多样化的业务需求。
- 用
ProxyPass直连后端,不加路径重写(如ProxyPass / http://10.0.1.10:8080/改为ProxyPass tcp://10.0.1.10:8080) - 关闭冗余模块:
a2dismod proxy_http proxy_ftp proxy_html,只留proxy、proxy_connect、proxy_balancer - 禁用
ProxyRequests Off(防正向代理滥用),并设ProxyBadHeader Ignore避免非 HTTP 流量被拦截
系统级 TCP 参数必须同步调优
Apache 代理的连接瓶颈几乎全在内核——建连队列溢出、缓冲区过小、TIME_WAIT 堆积都会直接拖垮代理吞吐。
-
建连阶段:
net.core.somaxconn = 65535net.ipv4.tcp_max_syn_backlog = 65535net.ipv4.tcp_syncookies = 1(应急兜底,不可替代队列扩容) -
传输阶段:
net.ipv4.tcp_rmem = "4096 524288 16777216"net.ipv4.tcp_wmem = "4096 524288 16777216"net.core.rmem_max = 16777216与net.core.wmem_max = 16777216(否则上限无效) -
释放阶段:
net.ipv4.tcp_tw_reuse = 1(需tcp_timestamps = 1)net.ipv4.tcp_fin_timeout = 30net.ipv4.ip_local_port_range = "1024 65535"
连接与资源限制必须放开
默认的系统限制会迅速成为万级并发的天花板。
- 进程文件描述符:
/etc/security/limits.conf加:* soft nofile 1048576* hard nofile 1048576 - 全局限制:
fs.file-max = 2097152(写入/etc/sysctl.conf) - Apache 自身监听配置追加
backlog=65535:Listen 8080 backlog=65535(确保不被内核静默截断)










