优化 Ubuntu 上的 Apache 配置,通常可以从性能、安全、日志与模块化几个方面入手。下面给你一份比较系统、可操作的优化指南(以 Ubuntu 20.04/22.04 + Apache 2.4 为例)。
apache2 -v
ubuntu-server 22.04
确保使用 Apache 2.4(MPM event 是默认且推荐)
查看当前 MPM:
apache2ctl -M | grep mpm
推荐配置(动态站点):
sudo a2dismod mpm_prefork
sudo a2enmod mpm_event
/etc/apache2/mods-available/mpm_event.conf 示例:
<IfModule mpm_event_module>
StartServers 2
MinSpareThreads 25
MaxSpareThreads 75
ThreadLimit 64
ThreadsPerChild 25
MaxRequestWorkers 150
MaxConnectionsPerChild 0
</IfModule>
若是 PHP 老项目(非 PHP-FPM),只能用
mpm_prefork
避免 Apache 直接跑 PHP:
sudo apt install php-fpm
sudo a2enmod proxy_fcgi setenvif
sudo a2enconf php8.1-fp
mpm_event + php-fpm 是性能最佳组合。
sudo a2enmod expires headers deflate rewrite
<IfModule mod_deflate.c>
AddOutputFilterByType DEFLATE text/html text/plain text/xml
AddOutputFilterByType DEFLATE text/css application/javascript
</IfModule>
<IfModule mod_expires.c>
ExpiresActive On
ExpiresByType image/jpg "access plus 1 month"
ExpiresByType text/css "access plus 1 week"
ExpiresByType application/javascript "access plus 1 week"
</IfModule>
启用:
sudo a2enconf optimize
查看:
apache2ctl -M
常见可禁用:
sudo a2dismod status autoindex cgi
/etc/apache2/apache2.conf:
KeepAlive On
MaxKeepAliveRequests 100
KeepAliveTimeout 5
ServerTokens Prod
ServerSignature Off
LimitRequestBody 10485760
避免磁盘 IO 成为瓶颈:
CustomLog ${APACHE_LOG_DIR}/access.log combined env=!dontlog
或轮换:
sudo apt install logrotate
sudo a2enmod http2
虚拟主机中:
Protocols h2 http/1.1
opcache(PHP)sudo apache2ctl configtest
sudo systemctl restart apache2
压力测试:
ab -n 1000 -c 100 http://localhost/
如果你愿意,可以告诉我:
我可以给你一套精准配置模板。