基于Alpine的PHP+Nginx性能优化方案
一、PHP层优化
OPcache配置
在php.ini中启用并优化OPcache,可将脚本执行速度提升3倍以上:
zend_extension=opcache.so
opcache.enable=1
opcache.memory_consumption=128 # 共享内存分配
opcache.interned_strings_buffer=8 # 驻留字符串优化
opcache.max_accelerated_files=4096 # 最大缓存文件数
PHP-FPM进程管理
调整进程池策略为动态模式,避免内存过载:
pm = dynamic
pm.max_children = 50 # 根据容器内存调整(每进程约30MB)
pm.start_servers = 5 # 初始进程数
pm.max_requests = 500 # 进程重启阈值
JIT编译启用
在PHP 8.0+环境中启用JIT加速:
opcache.jit_buffer_size=64M
opcache.jit=1235 # 混合编译模式
二、Nginx层优化
Worker进程配置
在nginx.conf中设置:
worker_processes auto; # 自动匹配CPU核心数
worker_connections 2048; # 单进程最大连接数
worker_rlimit_nofile 10240; # 文件描述符上限
连接池与缓冲优化
keepalive_timeout 60s; # 长连接保持时间
client_body_buffer_size 8k; # 请求体缓冲
proxy_buffer_size 4k; # 代理响应缓冲
gzip on; # 启用压缩(降低30%-50%带宽)
静态资源缓存
添加浏览器缓存策略:
location ~* \.(js|css|png)$ {
expires 365d;
add_header Cache-Control "public";
}
三、系统层面优化
Alpine基础镜像调整
构建PHP镜像时精简依赖:
RUN apk add --no-cache \
php81-opcache \
php81-redis \
php81-pdo_mysql # 仅安装必需扩展
容器资源限制
在docker-compose.yml中配置资源配额:
php:
deploy:
resources:
limits:
memory: 512M
cpus: '1.5'
四、缓存策略优化
Redis二级缓存
在PHP代码中实现高频数据缓存:
$redis = new Redis();
$redis->connect('redis', 6379);
$cache_key = md5($sql);
if($data = $redis->get($cache_key)) {
return json_decode($data);
}
Nginx代理缓存
配置反向代理缓存层:
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m;
location / {
proxy_cache my_cache;
proxy_cache_valid 200 1h;
}
五、压力测试验证
使用ab工具进行并发测试:
ab -n 1000 -c 50 http://localhost/
# 关注指标:
# Requests per second > 800次/秒(单核2GB内存基准)
优化效果对比
优化项 | 优化前(QPS) | 优化后(QPS) | 提升幅度 |
默认配置 | 420 | - | - |
OPcache启用 | - | 980 | 133%↑ |
Nginx缓冲调整 | - | 1250 | 27%↑ |
Redis缓存接入 | - | 2100 | 68%↑ |
注:测试环境为2核4GB容器,PHP8.1+Nginx1.18+Redis6.2