优化 CentOS 上的 Apache(httpd) 通常需要从 系统层面、Apache 配置、模块、缓存、安全、日志 等多方面入手。下面给你一套实用、可落地的优化方案,适用于 CentOS 7 / 8 / Stream,无论是个人站点还是生产环境都适用。
编辑:
vi /etc/security/limits.conf
添加:
* soft nofile 65535
* hard nofile 65535
查看:
ulimit -n
编辑:
vi /etc/sysctl.conf
添加:
net.core.somaxconn = 65535
net.ipv4.tcp_max_syn_backlog = 65535
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_fin_timeout = 30
生效:
sysctl -p
配置文件位置:
/etc/httpd/conf/httpd.conf
查看当前 MPM:
httpd -V | grep MPM
推荐:
preforkpreforkevent编辑:
vi /etc/httpd/conf.modules.d/00-mpm.conf
<IfModule mpm_event_module>
StartServers 4
MinSpareThreads 25
MaxSpareThreads 75
ThreadLimit 64
ThreadsPerChild 25
MaxRequestWorkers 400
MaxConnectionsPerChild 1000
</IfModule>
⚠️
MaxRequestWorkers决定并发上限
httpd -M
常见可关闭模块:
# 注释掉
# LoadModule autoindex_module
# LoadModule userdir_module
# LoadModule status_module
KeepAlive On
KeepAliveTimeout 5
MaxKeepAliveRequests 100
HostnameLookups Off
Timeout 30
vi /etc/httpd/conf.d/deflate.conf
<IfModule mod_deflate.c>
AddOutputFilterByType DEFLATE text/html text/css text/js application/javascript
</IfModule>
vi /etc/httpd/conf.d/cache.conf
<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>
适合静态站点:
CacheFile /var/www/html/index.html
yum install php-fpm
Apache 配置:
<FilesMatch \.php$>
SetHandler "proxy:fcgi://127.0.0.1:9000"
</FilesMatch>
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 combined 改为
CustomLog /var/log/httpd/access_log combined
vi /etc/logrotate.d/httpd
ServerTokens Prod
ServerSignature Off
LimitRequestBody 10485760
httpd -t
systemctl restart httpd
yum install httpd-tools
ab -n 1000 -c 100 http://yourdomain.com/
| 场景 | 推荐 |
|---|---|
| 高并发 | Apache + PHP-FPM + event MPM |
| 静态站 | Apache + cache + gzip |
| 反向代理 | Apache + mod_proxy + event |
| 极限性能 | Apache → Nginx → PHP |
如果你愿意,可以告诉我:
我可以 直接给你一套定制化的 Apache 配置模板 ✅