温馨提示×

Linux中PHP配置有哪些最佳实践

小樊
36
2025-12-28 00:51:53
栏目: 编程语言

Linux下PHP配置最佳实践

一 基础安装与版本选择

  • 选择LTS发行版(如Ubuntu 22.04/20.04Rocky Linux 8+),保持系统与软件及时更新
  • 优先使用**PHP 8.1+**稳定版本,获得性能与安全改进。
  • 通过包管理器安装所需扩展(按需精简):php-fpm、pdo_mysql/php-mysqlnd、curl、gd、mbstring、xml、zip、bcmath、opcache
  • 示例(按需选择版本号):
    • Ubuntu/Debian:sudo apt install php8.2 php8.2-fpm php8.2-mysql php8.2-curl php8.2-gd php8.2-mbstring php8.2-xml php8.2-zip php8.2-bcmath php8.2-opcache
    • CentOS/RHEL/Rocky:dnf module enable php:8.2 && dnf install php php-fpm php-mysqlnd php-curl php-gd php-mbstring php-xml php-zip php-bcmath php-opcache
  • 变更配置后,重启Web服务或PHP-FPM使其生效。

二 核心 php.ini 安全与稳健配置

  • 隐藏版本与信息泄露:
    • expose_php = Off
  • 生产错误策略:
    • display_errors = Off,log_errors = On,error_log = /var/log/php_errors.log(确保目录与权限正确)
  • 资源与执行控制:
    • memory_limit = 128M–512M(按应用调优)
    • max_execution_time = 30–300(常规页面30s,导入导出在脚本内动态放宽)
    • upload_max_filesize 与 post_max_size(如:16M/18M20M/20M,post需略大于upload)
  • 远程包含风险:
    • allow_url_fopen = Off,allow_url_include = Off
  • 目录访问限制:
    • open_basedir = /var/www/html:/tmp(Linux用冒号分隔多个路径)
  • 禁用危险函数(按应用白名单化保留):
    • disable_functions = exec,system,passthru,shell_exec,proc_open,popen,eval,assert,symlink,link,escapeshellarg,escapeshellcmd
  • 会话安全:
    • session.cookie_httponly = 1,session.cookie_secure = 1(启用HTTPS时),session.use_strict_mode = 1,合理设置 session.gc_maxlifetime

三 PHP-FPM 进程池与运行优化

  • 进程管理策略:优先使用pm = dynamic,避免static浪费内存或ondemand带来高延迟。
  • 进程数估算与设置(示例公式,按实际测量修正):
    • 估算单进程内存占用(RSS)≈ 20–30MB;可用内存为1GB时,pm.max_children 可先设为约50,再结合压测微调。
    • pm.start_servers ≈ max_children 的1/4–1/2;pm.min_spare_servers ≈ 1/4;pm.max_spare_servers ≈ 1/2
    • 预防内存泄漏累积:pm.max_requests = 500(按应用稳定性调整)。
  • 超时与慢查询:
    • request_terminate_timeout = 30s(或按业务设置);开启 slowlog 定位慢请求。
  • 状态与监控:
    • 在池配置中开启 pm.status_path = /status,配合 Nginx/Apache 访问,实时查看进程与排队情况。

四 性能优化关键项

  • 启用并调优 OPcache(CLI 建议也开启用于开发/CLI任务):
    • opcache.enable = 1,opcache.enable_cli = 1(按需)
    • opcache.memory_consumption = 128–256M;opcache.max_accelerated_files = 4000+(按文件数调大)
    • opcache.revalidate_freq = 60(平衡变更感知与性能)
    • PHP 8+ 可启用 JIT:opcache.jit = 1206/1254,opcache.jit_buffer_size ≥ 64–100M(计算密集型收益更明显)
  • 输出压缩:
    • 优先使用Nginx/Apache 压缩(如 gzip);如用 PHP 层压缩,启用 zlib.output_compression = On,压缩级别3–6,避免与 Web 服务器重复压缩。
  • 会话与缓存:
    • 高并发/分布式场景建议将会话存储改为Redis/Memcached:session.save_handler = redis/memcached;session.save_path = “tcp://127.0.0.1:6379”
  • 扩展与模块:
    • 仅启用必需扩展,减少内存与攻击面(php -m 检查,禁用无用模块)。

五 部署运维与监控

  • 服务与集成:
    • Web 服务与 PHP-FPM 使用systemd管理,设置开机自启;变更后执行 configtest 并滚动重启以减少抖动。
    • Nginx 典型 PHP 处理:
      • location ~ .php$ { include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_pass unix:/run/php/php8.2-fpm.sock; }
  • 日志与审计:
    • 统一错误日志路径(如**/var/log/php_errors.log**),并设置轮转(logrotate);开启 PHP-FPM slowlogstatus 便于定位瓶颈。
  • 监控与容量:
    • 使用 top/htop、vmstat、iostat 观察CPU/内存/IO;结合应用指标与 APM(如 New Relic、Blackfire)定位性能热点。
  • 安全基线与网络:
    • 仅开放必要端口,启用HTTPS/WAF/防火墙;定期更新系统与 PHP,回滚策略与变更记录完备。

0