下面从性能、安全、模块、配置、日志、缓存、PHP、HTTPS等方面,系统性地介绍如何优化 Ubuntu 上的 Apache2。你可以按需求逐步实施。
sudo apt update && sudo apt upgrade -y
编辑:
sudo nano /etc/security/limits.conf
增加:
* soft nofile 65535
* hard nofile 65535
检查:
ulimit -n
查看当前 MPM:
apache2ctl -M | grep mpm
| 场景 | MPM |
|---|---|
| 静态内容 / 高并发 | event |
| PHP(非 FPM) | prefork |
| PHP-FPM | event(推荐) |
切换 MPM(以 event 为例):
sudo a2dismod mpm_prefork
sudo a2enmod mpm_event
sudo systemctl restart apache2
编辑:
sudo nano /etc/apache2/mods-available/mpm_event.conf
示例(2~4 核服务器):
<IfModule mpm_event_module>
StartServers 2
MinSpareThreads 25
MaxSpareThreads 75
ThreadLimit 64
ThreadsPerChild 25
MaxRequestWorkers 150
MaxConnectionsPerChild 1000
</IfModule>
原则:
MaxRequestWorkers = ThreadsPerChild × ServerLimit
编辑:
sudo nano /etc/apache2/apache2.conf
推荐配置:
KeepAlive On
MaxKeepAliveRequests 100
KeepAliveTimeout 5
查看已加载模块:
apache2ctl -M
禁用无用模块(示例):
sudo a2dismod autoindex cgi status
sudo systemctl restart apache2
sudo a2enmod cache cache_disk expires headers
sudo systemctl restart apache2
sudo nano /etc/apache2/sites-available/000-default.conf
示例:
<IfModule mod_expires.c>
ExpiresActive On
ExpiresByType text/css "access plus 7 days"
ExpiresByType image/jpeg "access plus 30 days"
ExpiresByType application/javascript "access plus 7 days"
</IfModule>
sudo a2enmod http2
Protocols h2 http/1.1
⚠️ HTTP/2 需要 HTTPS
sudo apt install certbot python3-certbot-apache -y
sudo certbot --apache
sudo apt install php-fpm
sudo a2enmod proxy_fcgi setenvif
sudo a2enconf php8.x-fpm
sudo systemctl restart apache2
sudo nano /etc/php/8.x/fpm/pool.d/www.conf
建议:
pm = dynamic
pm.max_children = 50
pm.start_servers = 10
pm.min_spare_servers = 5
pm.max_spare_servers = 20
CustomLog /var/log/apache2/access.log combined env=!dontlog
sudo a2dismod status
sudo a2enmod deflate
<IfModule mod_deflate.c>
AddOutputFilterByType DEFLATE text/html text/css application/javascript
</IfModule>
sudo apt install brotli
sudo a2enmod brotli
sudo a2enmod headers
ServerTokens Prod
ServerSignature Off
<IfModule mod_headers.c>
Header always set X-Frame-Options "SAMEORIGIN"
Header always set X-Content-Type-Options "nosniff"
</IfModule>
sudo apt install apache2-utils
ab -n 1000 -c 50 http://your-domain.com/
apache2ctl -S
apache2ctl configtest
✅ 必做
event MPM + PHP-FPM⚡ 进阶
如果你愿意,可以告诉我:
我可以给你一套完全定制的 Apache2 优化方案。