CentOS 上保障 PHP 应用稳定运行的可落地方案
一 基础运行环境与进程治理
- 使用受支持的 CentOS Stream 8/9 或 Rocky Linux 8+,通过 EPEL 与 Remi 仓库安装 PHP 8.1+ 及常用扩展(如:php-fpm、php-mysqlnd、php-curl、php-gd、php-mbstring、php-xml、php-zip、php-bcmath、php-opcache),避免过旧版本带来的安全与兼容风险。
- 采用 Nginx + PHP-FPM 架构,按站点隔离进程池(pool),统一以 Unix Socket 通信并正确设置属主属组与权限,减少端口开销与权限风险。
- 进程管理建议:使用 pm=dynamic,按内存与负载设置 pm.max_children / pm.start_servers / pm.min_spare_servers / pm.max_spare_servers,并开启 request_terminate_timeout 与 slowlog 以抑制“长请求”和定位慢点。
- 示例(/etc/php-fpm.d/www.conf 片段):
listen = /run/php/php-fpm.sock
listen.owner = nginx; listen.group = nginx; user = nginx; group = nginx
pm = dynamic; pm.max_children = 50; pm.start_servers = 5; pm.min_spare_servers = 1; pm.max_spare_servers = 3
request_terminate_timeout = 30s; slowlog = /var/log/php-fpm/slow.log; request_slowlog_timeout = 10s
- 设置开机自启并守护进程:systemctl enable --now nginx php-fpm;结合监控与告警,异常时自动恢复服务。
二 PHP 运行时与 OPcache 关键配置
- 启用并优化 OPcache(建议生产环境开启):
opcache.enable=1
opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=10000
opcache.revalidate_freq=60
opcache.fast_shutdown=1
- 基础运行时参数(按应用调优):
memory_limit=256M(依据业务峰值与容器/实例内存设定)
max_execution_time=30
max_input_time=60
post_max_size=50M;upload_max_filesize=50M(与业务上传需求匹配)
- 错误与信息泄露防护:
display_errors=Off;log_errors=On;error_log=/var/log/php_errors.log
expose_php=Off
date.timezone=Asia/Shanghai
- 会话与缓存:将 session.save_handler 改为 memcached/redis,提升并发与可靠性。
三 高可用与自愈机制
- 进程与服务的“自恢复”:配置 systemd 的 Restart=on-failure,确保 php-fpm / nginx 异常退出后自动拉起;对关键第三方服务(如数据库)可设置定时健康检查与自动启动脚本,降低单点故障影响时长。
- 资源与稳定性护栏:
- 通过 request_terminate_timeout 限制单次请求最长执行时间,避免雪崩。
- 开启 slowlog,持续发现并优化慢请求与异常 SQL/外部调用。
- 合理设置 pm.max_requests(如 500–1000),定期回收进程,缓解内存泄漏与长生命周期带来的副作用。
- 运行期观测:持续关注 PHP-FPM 进程数、队列、响应时延、5xx 比例 与慢日志,作为扩缩容与参数调优的依据。
四 安全加固与网络防护
- 最小权限与隔离:
- Web 与 FPM 以 非 root 运行(如 nginx/php-fpm),目录权限最小化,禁止上传目录执行。
- 禁用危险函数:disable_functions=system,exec,shell_exec,passthru,popen,eval,assert(按需保留)。
- 网络与加密:
- 仅开放 80/443,使用 firewalld 管理规则;为域名启用 Let’s Encrypt 免费证书并自动续期。
- 反向代理与静态资源由 Nginx 直接处理,减少 FPM 压力并提升安全边界。
- 系统加固:保持系统与组件及时更新,遵循最小暴露面原则。
五 监控 日志 备份与容量规划
- 监控与告警:
- 系统层使用 top/htop/vmstat 观察 CPU/内存/IO;应用层关注 PHP-FPM 进程/队列/慢日志 与 Nginx 状态码。
- 可引入 Prometheus + Grafana 做可视化与阈值告警,提前识别容量瓶颈与异常趋势。
- 日志管理:集中采集 Nginx access/error 与 PHP-FPM error/slow 日志,保留足够回溯周期,配合关键字告警。
- 备份与恢复:定期备份 代码与数据库 到远程存储,验证恢复流程;结合监控指标进行容量规划与扩缩容决策。