在 CentOS 上(通常叫 httpd,而不是 apache2,apache2 是 Debian/Ubuntu 的叫法),优化 Apache 主要从 配置参数、模块、系统层面、缓存、安全 几个方面入手。下面按实用程度给你一份优化清单。
httpd -v
httpd -M | grep mpm
CentOS 常见 MPM:
vim /etc/httpd/conf.modules.d/00-mpm.conf
启用:
LoadModule mpm_event_module modules/mod_mpm_event.so
注释掉 prefork / worker
KeepAlive On
MaxKeepAliveRequests 100
KeepAliveTimeout 5
<IfModule mpm_event_module>
StartServers 4
MinSpareThreads 25
MaxSpareThreads 75
ThreadLimit 64
ThreadsPerChild 25
MaxRequestWorkers 150
MaxConnectionsPerChild 1000
</IfModule>
根据内存调整:
- 2G 内存:MaxRequestWorkers 150
- 4G+:可到 300–500
httpd -M
常见可关闭:
# LoadModule autoindex_module
# LoadModule userdir_module
# LoadModule status_module(生产可关)
vim /etc/httpd/conf.d/deflate.conf
<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>
yum install mod_cache
CacheEnable disk /
CacheRoot /var/cache/httpd
yum install php-fpm
ProxyPassMatch ^/(.*\.php)$ unix:/run/php-fpm/www.sock|fcgi://localhost/var/www/html/$1
ulimit -n 65535
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
sysctl -p
CustomLog logs/access_log combined env=!dontlog
或关闭无用日志:
# CustomLog logs/access_log combined
ServerTokens Prod
ServerSignature Off
Options -Indexes
apachectl configtest
systemctl restart httpd
systemctl status httpd
如果你愿意,可以告诉我:
我可以直接给你一套 可直接用的配置模板。