1. 启用并优化OPcache字节码缓存
OPcache是PHP内置的加速工具,通过缓存预编译的脚本字节码,避免每次请求都重新编译,显著提升PHP执行速度。
php-opcache扩展(根据PHP版本调整,如php8.1-opcache),编辑/etc/php/{version}/apache2/php.ini,添加或修改以下配置:[opcache]
zend_extension=opcache.so
opcache.enable=1
opcache.memory_consumption=128 # 内存缓存大小(MB),根据服务器内存调整
opcache.interned_strings_buffer=8 # 内部字符串缓存大小
opcache.max_accelerated_files=4000 # 最大加速文件数(需覆盖项目文件数量)
opcache.revalidate_freq=60 # 文件修改检查频率(秒)
opcache.fast_shutdown=1 # 快速关闭,减少内存释放时间
phpinfo.php文件,检查“OPcache”部分是否显示“Enabled”。2. 调整Apache MPM(多处理模块)配置
Apache的MPM模式直接影响并发处理能力,需根据服务器资源选择合适的模式(Debian默认使用prefork,但线程安全的PHP版本推荐event)。
sudo a2dismod mpm_prefork
sudo a2enmod mpm_event
sudo systemctl restart apache2
event为例,编辑/etc/apache2/mods-enabled/mpm_event.conf):<IfModule mpm_event_module>
StartServers 2 # 启动时的子进程数
MinSpareThreads 25 # 最小空闲线程数
MaxSpareThreads 75 # 最大空闲线程数
ThreadLimit 64 # 单个子进程的最大线程数
ThreadsPerChild 25 # 每个子进程创建的线程数
MaxRequestWorkers 150 # 最大并发请求数(根据内存调整,每进程约消耗10-20MB)
MaxConnectionsPerChild 0 # 每个子进程处理的请求数(0表示无限制,避免内存泄漏可设为1000)
</IfModule>
/etc/apache2/apache2.conf:KeepAlive On
MaxKeepAliveRequests 100 # 单个连接的最大请求数
KeepAliveTimeout 5 # 连接保持时间(秒)
3. 配置PHP-FPM替代mod_php
mod_php是Apache模块,每个请求都会启动PHP进程,内存消耗大;PHP-FPM(FastCGI Process Manager)通过进程池管理PHP进程,更高效。
sudo apt install php{version}-fpm # 如php8.1-fpm
sudo a2dismod php{version} # 如php8.1
sudo a2enmod proxy_fcgi setenvif
sudo a2enconf php{version}-fpm # 启用PHP-FPM配置
/etc/php/{version}/fpm/pool.d/www.conf):[www]
user = www-data
group = www-data
listen = /run/php/php{version}-fpm.sock # 使用Unix socket(比TCP更快)
listen.owner = www-data
listen.group = www-data
pm = dynamic # 动态进程管理(适合大多数场景)
pm.max_children = 50 # 最大子进程数(根据内存计算:总内存/单个进程消耗)
pm.start_servers = 5 # 启动时的子进程数
pm.min_spare_servers = 5 # 最小空闲子进程数
pm.max_spare_servers = 10 # 最大空闲子进程数
pm.max_requests = 500 # 每个子进程处理的最大请求数(避免内存泄漏)
/etc/apache2/sites-available/000-default.conf),将PHP请求转发至PHP-FPM:<FilesMatch \.php$>
SetHandler "proxy:unix:/run/php/php{version}-fpm.sock|fcgi://localhost"
</FilesMatch>
sudo systemctl restart apache2 php{version}-fpm
4. 优化PHP配置参数
调整php.ini中的关键参数,平衡性能与资源消耗:
memory_limit = 256M # 根据应用需求调整(如WordPress建议128-256M)
max_execution_time = 30 # 脚本最大执行时间(秒,长任务可调整为300)
max_input_vars = 3000 # 最大输入变量数(避免POST/GET数据过大导致超时)
upload_max_filesize = 64M # 单个文件最大上传大小
post_max_size = 64M # POST请求最大数据量(需大于upload_max_filesize)
display_errors = Off
log_errors = On
error_log = /var/log/php_errors.log
5. 启用压缩优化传输
使用mod_deflate模块压缩HTML、CSS、JavaScript等文本资源,减少网络传输时间:
sudo a2enmod deflate
/etc/apache2/apache2.conf或虚拟主机配置):<IfModule mod_deflate.c>
AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css application/javascript application/json
# 排除IE6(不支持gzip)
BrowserMatch ^MSIE !no-gzip !gzip-only-text/html
</IfModule>
sudo systemctl restart apache2
6. 使用缓存技术减少数据库负载
对于动态网站(如WordPress、Drupal),使用缓存系统存储频繁访问的数据,减少数据库查询次数:
sudo apt install redis-server php{version}-redis # Redis
# 或
sudo apt install memcached php{version}-memcached # Memcached
php.ini):extension=redis.so # 或memcached.so
7. 监控与持续优化
定期监控服务器性能,识别瓶颈并调整配置:
top、htop查看CPU、内存使用情况;vmstat 1查看系统整体性能(如上下文切换、IO等待)。mod_status(编辑/etc/apache2/mods-enabled/status.conf),通过http://server-ip/server-status查看请求队列、处理时间等。php-fpm status(需在www.conf中启用pm.status_path = /status)查看进程数、内存使用情况。/var/log/apache2/error.log和/var/log/php_errors.log,排查错误和慢请求。