这是一份PHP运维手册纲要,它涵盖了从基础环境配置、性能调优、安全加固到日常故障排查的全流程,这份手册旨在帮助运维人员(而非开发者)管理PHP生产环境。

PHP 运维手册 v1.0
环境部署与版本管理
1 版本选择
- 生产推荐:PHP 8.1 / 8.2 / 8.3 (根据项目兼容性选择),PHP 7.4 已于2022年11月停止安全支持(EOL)。
- 禁止使用:PHP 5.x (绝对禁止)、PHP 7.0/7.1/7.2/7.3 (均已EOL)。
- 策略:使用
phpbrew、remi源(CentOS)或ondrej/phpPPA(Ubuntu)实现多版本共存。
2 编译安装关键参数
# 生产环境建议开启
./configure --enable-fpm --with-fpm-user=www --with-fpm-group=www \
--enable-mbstring --enable-bcmath --enable-pcntl \
--with-openssl --with-curl --with-mysqli --with-pdo-mysql \
--enable-opcache --with-zlib --with-zip
注意:禁用不安全的函数:
disable_functions = exec,system,passthru,shell_exec,popen,proc_open,eval,assert,pcntl_exec
3 Web 服务器整合
- Nginx (首选): 通过
FastCGI代理到 PHP-FPM。 - Apache: 使用
mod_php(旧) 或mod_proxy_fcgi。 - 配置示例 (Nginx):
location ~ \.php$ { fastcgi_pass 127.0.0.1:9000; # 或 unix:/run/php/php8.1-fpm.sock fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; }
PHP-FPM 核心调优
PHP-FPM 是PHP进程管理器,是性能调优的核心。
1 进程管理策略
修改 /etc/php/8.1/fpm/pool.d/www.conf:
| 参数 | 推荐值 | 说明 |
|---|---|---|
pm |
dynamic 或 ondemand |
ondemand 适合高内存低并发,dynamic 适合稳定负载 |
pm.max_children |
50-200 |
最大子进程数,由内存决定:总内存 / 单个进程平均内存 |
pm.start_servers |
10-20 |
启动时创建的进程数 |
pm.min_spare_servers |
5-10 |
空闲最少进程数 |
pm.max_spare_servers |
10-30 |
空闲最多进程数 |
pm.max_requests |
1000-5000 |
每个进程处理多少请求后重启(防内存泄漏) |
2 内存计算公式
# 单进程内存估算(查看当前平均值)
ps -ylC php-fpm | awk '{x+=$8;y+=1} END {print "Average RSS (MB):",x/y/1024}'
# 最大进程数 = 服务器总内存 * 0.8 / 单进程平均内存
示例:8GB 内存,单进程 50MB => max_children = 8000 * 0.8 / 50 = 128
3 开启慢日志
用于定位慢代码:
slowlog = /var/log/php-fpm/slow.log request_slowlog_timeout = 2s # 超过2秒记录 request_terminate_timeout = 30s # 超时强制终止
OpCache 配置
OpCache 是 PHP 的字节码缓存,必须开启。
[opcache] opcache.enable=1 opcache.memory_consumption=128 # 缓存内存大小(128-256MB) opcache.max_accelerated_files=8000 # 缓存文件数量上限 opcache.revalidate_freq=60 # 检查文件更新的时间间隔(秒) opcache.fast_shutdown=1 # 快速关闭 opcache.validate_timestamps=0 # 生产环境设为0,禁止每次请求检查文件修改;部署时手动清除或重启
重要:validate_timestamps=0 后,代码变更需通过 opcache_reset() 函数或重启 PHP-FPM 生效。
安全加固清单
| 类别 | 操作 |
|---|---|
| 文件权限 | PHP 文件属主非www,但 FPM 运行用户为 www (644/755) |
| 函数禁用 | disable_functions = exec,system,passthru,shell_exec,... |
| 危险配置 | expose_php = Off (隐藏HTTP头中的PHP版本) |
| 文件上传 | file_uploads = On 但设置 upload_max_filesize = 10M post_max_size = 12M |
| 会话安全 | session.cookie_httponly = 1 session.cookie_secure = 1 (HTTPS) |
| 错误暴露 | display_errors = Off log_errors = On error_log = /var/log/php_errors.log |
| 开放路径 | open_basedir = /home/wwwroot:/tmp (限制PHP可访问的目录) |
日常运维命令
# 启动/重启/停止(Systemd) systemctl restart php8.1-fpm systemctl status php8.1-fpm # 平滑重载(不中断已有请求) systemctl reload php8.1-fpm # 检查配置语法 php-fpm8.1 -t # 查看进程状态(需开启 pm.status_path) curl http://127.0.0.1/php-fpm-status?full # 实时查看慢查询 tail -f /var/log/php-fpm/slow.log # 清理 OpCache(代码部署后) # 方法1:重启PHP-FPM systemctl restart php8.1-fpm # 方法2:触发自定义脚本(更优雅) curl http://your-site/opcache-reset.php # 内容:<?php opcache_reset();
性能监控与故障排查
1 监控指标
- 进程数:
pm.max_children是否触顶(listen.xxx queue增大)。 - CPU:
top+htop,关注php-fpm进程组。 - 内存:
free -m/proc/meminfo检查Swap使用(Swap高说明内存不足)。 - 慢查询:数量趋势明显增加说明数据库或代码瓶颈。
2 常见故障
| 故障现象 | 可能原因 | 解决方案 |
|---|---|---|
| 502 Bad Gateway | PHP-FPM 崩溃或没启动 | systemctl restart php8.1-fpm |
| 504 Gateway Timeout | 脚本执行超时 + request_terminate_timeout 触发 |
调大时间或优化代码 |
| 内存耗尽/进程数爆满 | pm.max_children 过大 |
降低 max_children,启用 ondemand |
| 慢请求变多 | 代码性能问题、数据库慢查询 | 使用 Xdebug 或 Blackfire 做性能分析 |
/tmp 目录写满 |
Session 文件积累或临时文件 | 清理 session.gc_probability 或者使用 Redis 存储 Session |
部署流程(代码上线)
- 下代码:git pull / rsync 到发布目录。
- 清缓存:执行
opcache_reset()(可自动触发)。 - 重载配置:如果修改了 php.ini 或 FPM 配置 →
systemctl reload php8.1-fpm。 - 验证:检查
php -m是否有新扩展,网站首页是否返回 200。
扩展管理
# 安装扩展(以 APCu 为例) pecl install apcu # 编辑 php.ini 添加: extension=apcu.so # 查看已安装扩展 php -m | grep -i apcu # 禁用扩展(临时) # 在 php.ini 中注释掉 extension 行或使用 PHP 的 -d 参数
PHP运维的核心在于:
- 进程管理(FPM):根据内存动态调整
max_children。 - 缓存策略(OpCache):开缓存、定大小、调频率。
- 安全基线:禁函数、限开放目录、隐藏版本。
- 日志监控:看慢日志、看FPM status、关注error log。 整理成企业内部 Wiki,并结合实际服务器配置定期更新数字值(如内存、并发量)。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播