如何配置PHP7的php.ini、php-fpm和www.conf以优化网站性能?
- 内容介绍
- 文章标签
- 相关推荐
本文共计668个文字,预计阅读时间需要3分钟。
PHP7中,配置`php.ini`、`php-fpm`和`www.conf`是PHP运行的核心配置文件。以下是一些常用设置:
- `extension_dir=/path/to/extensions`:设置PHP扩展库的路径。- `expose_php=Off`:关闭PHP信息暴露,防止敏感信息泄露。- `display_errors=Off`:关闭错误显示,防止错误信息直接暴露在HTTP头部。
PHP7中php.ini、php-fpm和www.conf 配置
php.ini是php运行核心配置文件,下面是一些常用配置
extension_dir=""
● 设置PHP的扩展库路径
expose_php = Off
● 避免PHP信息暴露在www.php.cn/php-weizijiaocheng-429277.html
常见错误及解决办法整理
请求的超时中止时间未设置
● request_terminate_timeout的值如果设置为0或者过长的时间,可能会引起PHP 脚本会一直执行下去。这样,当所有的 php-cgi 进程都卡在 file_get_contents() 函数时,这台 Nginx+PHP 的 WebServer 已经无法再处理新的 PHP 请求了,Nginx 将给用户返回“502 Bad Gateway”。设置一个
PHP脚本最大执行时间是必要的,但是,治标不治本。例如改成 30s,如果发生 file_get_contents() 获取网页内容较慢的情况,这就意味着 150 个 php-cgi 进程,每秒钟只能处理 5 个请求,WebServer 同样很难避免"502 Bad Gateway"。解决办法是request_terminate_timeout设置为10s或者一个合理的值,或者给file_get_contents加一个超时参数!
max_requests参数配置不当
● max_requests参数配置不当,可能会引起间歇性502错误:
pm.max_requests = 1000
● 设置每个子进程重生之前服务的请求数. 对于可能存在内存泄漏的第三方模块来说是非常有用的. 如果设置为 '0' 则一直接受请求. 等同于 PHP_FCGI_MAX_REQUESTS 环境变量. 默认值: 0.
这段配置的意思是,当一个 PHP-CGI 进程处理的请求数累积到 500 个后,自动重启该进程。
● 但是为什么要重启进程呢?
● 一般在项目中,我们多多少少都会用到一些 PHP 的第三方库,这些第三方库经常存在内存泄漏问题,如果不定期重启 PHP-CGI 进程,势必造成内存使用量不断增长。因此 PHP-FPM 作为 PHP-CGI 的管理器,提供了这么一项监控功能,对请求达到指定次数的 PHP-CGI 进程进行重启,保证内存使用量不增长。
php-fpm的慢日志,debug及异常排查神器
● request_slowlog_timeout设置一个超时的参数,slowlog设置慢日志的存放位置,tail -f /var/log/www.slow.log即可看到执行过慢的php过程。
大家可以看到经常出现的网络读取超过、Mysql查询过慢的问题,根据提示信息再排查问题就有很明确的方向了。
本文共计668个文字,预计阅读时间需要3分钟。
PHP7中,配置`php.ini`、`php-fpm`和`www.conf`是PHP运行的核心配置文件。以下是一些常用设置:
- `extension_dir=/path/to/extensions`:设置PHP扩展库的路径。- `expose_php=Off`:关闭PHP信息暴露,防止敏感信息泄露。- `display_errors=Off`:关闭错误显示,防止错误信息直接暴露在HTTP头部。
PHP7中php.ini、php-fpm和www.conf 配置
php.ini是php运行核心配置文件,下面是一些常用配置
extension_dir=""
● 设置PHP的扩展库路径
expose_php = Off
● 避免PHP信息暴露在www.php.cn/php-weizijiaocheng-429277.html
常见错误及解决办法整理
请求的超时中止时间未设置
● request_terminate_timeout的值如果设置为0或者过长的时间,可能会引起PHP 脚本会一直执行下去。这样,当所有的 php-cgi 进程都卡在 file_get_contents() 函数时,这台 Nginx+PHP 的 WebServer 已经无法再处理新的 PHP 请求了,Nginx 将给用户返回“502 Bad Gateway”。设置一个
PHP脚本最大执行时间是必要的,但是,治标不治本。例如改成 30s,如果发生 file_get_contents() 获取网页内容较慢的情况,这就意味着 150 个 php-cgi 进程,每秒钟只能处理 5 个请求,WebServer 同样很难避免"502 Bad Gateway"。解决办法是request_terminate_timeout设置为10s或者一个合理的值,或者给file_get_contents加一个超时参数!
max_requests参数配置不当
● max_requests参数配置不当,可能会引起间歇性502错误:
pm.max_requests = 1000
● 设置每个子进程重生之前服务的请求数. 对于可能存在内存泄漏的第三方模块来说是非常有用的. 如果设置为 '0' 则一直接受请求. 等同于 PHP_FCGI_MAX_REQUESTS 环境变量. 默认值: 0.
这段配置的意思是,当一个 PHP-CGI 进程处理的请求数累积到 500 个后,自动重启该进程。
● 但是为什么要重启进程呢?
● 一般在项目中,我们多多少少都会用到一些 PHP 的第三方库,这些第三方库经常存在内存泄漏问题,如果不定期重启 PHP-CGI 进程,势必造成内存使用量不断增长。因此 PHP-FPM 作为 PHP-CGI 的管理器,提供了这么一项监控功能,对请求达到指定次数的 PHP-CGI 进程进行重启,保证内存使用量不增长。
php-fpm的慢日志,debug及异常排查神器
● request_slowlog_timeout设置一个超时的参数,slowlog设置慢日志的存放位置,tail -f /var/log/www.slow.log即可看到执行过慢的php过程。
大家可以看到经常出现的网络读取超过、Mysql查询过慢的问题,根据提示信息再排查问题就有很明确的方向了。

