优化 CentOS 上的 Apache(通常是 httpd)可以从系统层面、Apache 配置、模块、缓存、安全与监控几个方面来做。下面按实用优先级给你一套可落地的优化方案(适用于 CentOS 7/8 及 Rocky/Alma 等衍生系统)。
Apache 高并发时容易受限于文件数。
# 查看当前限制
ulimit -n
# 修改系统限制
vim /etc/security/limits.conf
* soft nofile 65535
* hard nofile 65535
# 内核参数优化
vim /etc/sysctl.conf
net.core.somaxconn = 65535
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_fin_timeout = 30
vm.swappiness = 10
sysctl -p
CentOS 默认可能是 prefork,但对性能不友好。
查看当前 MPM:
httpd -V | grep -i mpm
eventpreforkevent切换 MPM(CentOS 8 / Rocky):
vim /etc/httpd/conf.modules.d/00-mpm.conf
注释掉其他,启用:
LoadModule mpm_event_module modules/mod_mpm_event.so
重启:
systemctl restart httpd
<IfModule mpm_event_module>
ServerLimit 16
StartServers 4
MinSpareThreads 64
MaxSpareThreads 128
ThreadsPerChild 64
MaxRequestWorkers 1024
MaxConnectionsPerChild 10000
</IfModule>
说明:
MaxRequestWorkers控制最大并发MaxConnectionsPerChild防止内存泄漏
减少内存和攻击面:
httpd -M
常见可禁用:
mod_status(不对外暴露)mod_userdirmod_autoindexKeepAlive On
MaxKeepAliveRequests 100
KeepAliveTimeout 5
太高会占用连接,太低会增加握手
LoadModule deflate_module modules/mod_deflate.so
<IfModule mod_deflate.c>
AddOutputFilterByType DEFLATE text/html text/css application/javascript
</IfModule>
<IfModule mod_expires.c>
ExpiresActive On
ExpiresByType image/jpg "access plus 30 days"
ExpiresByType text/css "access plus 7 days"
ExpiresByType application/javascript "access plus 7 days"
</IfModule>
避免 PHP 解析:
<FilesMatch "\.(jpg|png|css|js)$">
AllowOverride None
Require all granted
</FilesMatch>
yum install php-fpm
systemctl enable --now php-fpm
Apache 配置:
<FilesMatch \.php$>
SetHandler "proxy:fcgi://127.0.0.1:9000"
</FilesMatch>
ServerTokens Prod
ServerSignature Off
LimitRequestBody 10485760
Timeout 60
Options -Indexes
<Location /server-status>
SetHandler server-status
Require ip 127.0.0.1
</Location>
ab -n 10000 -c 200 http://localhost/
或:
wrk -t4 -c200 -d30s http://localhost/
top / htop → CPU or 内存ss -ant | wc -l → 连接数httpd -M → 模块是否过多prefork + mod_php如果你愿意,可以告诉我:
我可以给你一套针对性的优化配置。