在 CentOS 下优化 Apache HTTP Server(httpd),通常围绕性能、并发、内存占用、安全等方面进行。下面按实用维度给你一套可落地的优化方案(适用于 Apache 2.4,CentOS 7/8/Stream)。
httpd -V | grep MPM
常见 MPM:
| 场景 | 推荐 |
|---|---|
| PHP + Apache | event + php-fpm |
| 纯静态 | event |
| 老业务 | prefork |
yum install php-fpm -y
systemctl enable php-fpm
systemctl start php-fpm
禁用 prefork:
vi /etc/httpd/conf.modules.d/00-mpm.conf
只保留:
LoadModule mpm_event_module modules/mod_mpm_event.so
编辑:
vi /etc/httpd/conf.modules.d/00-mpm.conf
<IfModule mpm_event_module>
ServerLimit 16
StartServers 2
MinSpareThreads 25
MaxSpareThreads 75
ThreadLimit 64
ThreadsPerChild 25
MaxRequestWorkers 400
MaxConnectionsPerChild 1000
</IfModule>
| 参数 | 含义 |
|---|---|
| MaxRequestWorkers | 最大并发 |
| ThreadsPerChild | 每个进程线程数 |
| MaxConnectionsPerChild | 防止内存泄漏 |
✅ 经验值:
MaxRequestWorkers ≈ 可用内存 / 每个进程内存
查看已加载模块:
httpd -M
禁用不常用模块(示例):
vi /etc/httpd/conf.modules.d/*
注释掉:
# mod_ldap
# mod_authnz_ldap
# mod_dav
# mod_cgi
vi /etc/httpd/conf/httpd.conf
KeepAlive On
KeepAliveTimeout 3
MaxKeepAliveRequests 100
✅ 生产环境建议 2~5 秒
<IfModule mod_expires.c>
ExpiresActive On
ExpiresByType image/jpg "access plus 30 days"
ExpiresByType image/png "access plus 30 days"
ExpiresByType text/css "access plus 7 days"
ExpiresByType application/javascript "access plus 7 days"
</IfModule>
<IfModule mod_deflate.c>
AddOutputFilterByType DEFLATE text/html text/plain text/xml
AddOutputFilterByType DEFLATE text/css application/javascript
</IfModule>
ulimit -n 65535
永久生效:
vi /etc/security/limits.conf
* soft nofile 65535
* hard nofile 65535
vi /etc/sysctl.conf
net.core.somaxconn = 65535
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_fin_timeout = 30
sysctl -p
vi /etc/php-fpm.d/www.conf
pm = dynamic
pm.max_children = 50
pm.start_servers = 10
pm.min_spare_servers = 5
pm.max_spare_servers = 20
CustomLog logs/access_log combined env=!dontlog
或关闭不需要的日志:
# CustomLog logs/access_log combined
yum install httpd-tools -y
ab -n 10000 -c 500 http://localhost/
✅ CentOS + Apache 2.4 + event MPM + php-fpm
✅ 关闭无用模块
✅ 开启缓存 + gzip
✅ 系统级参数调优
如果你愿意,可以告诉我:
我可以给你一套完全定制的配置。