>  기사  >  백엔드 개발  >  PHP7의 php.ini, php-fpm 및 www.conf 구성

PHP7의 php.ini, php-fpm 및 www.conf 구성

藏色散人
藏色散人앞으로
2019-08-23 14:07:195021검색

PHP7php.ini, php-fpm 및 www.conf 구성

php.ini는 PHP 실행을 위한 핵심 구성 파일입니다. 다음은 몇 가지 일반적인 구성입니다

extension_dir=""extension_dir=""

● 设置PHP的扩展库路径

expose_php = Off

● 避免PHP信息暴露在http头中

display_errors = Off

● 避免暴露php调用mysql的错误信息

log_errors = On

● 在关闭display_errors后开启PHP错误日志(路径在php-fpm.conf中配置)

zend_extension=opcache.so extension=mysqli.so extension=pdo_mysql.so

● 设置PHP的opcache和mysql动态库

date.timezone = PRC

● 设置PHP的时区

opcache.enable=1

● 开启opcache

open_basedir = /usr/share/nginx/html;

● 设置PHP脚本允许访问的目录(需要根据实际情况配置)

php-fpm.conf是php-fpm进程服务的配置文件,下面是一些常用配置

error_log = /usr/local/php/logs/php-fpm.log

● 设置错误日志的路径

include=/usr/local/php7/etc/php-fpm.d/*.conf

● 引入www.conf文件中的配置(默认已设置)

php-fpm.conf 以及 www.conf的主要配置信息

pid = run/php-fpm.pid

● pid设置,默认在安装目录中的var/run/php-fpm.pid,建议开启

error_log = log/php-fpm.log

● 错误日志,默认在安装目录中的var/log/php-fpm.log

log_level = notice

● 错误级别. 可用级别为: alert(必须立即处理), error(错误情况), warning(警告情况), notice(一般重要信息), debug(调试信息). 默认: notice.

emergency_restart_threshold = 60

emergency_restart_interval = 60s

● 表示在emergency_restart_interval所设值内出现SIGSEGV或者SIGBUS错误的php-cgi进程数如果超过 emergency_restart_threshold个,php-fpm就会优雅重启。这两个选项一般保持默认值。

process_control_timeout = 0

● 设置子进程接受主进程复用信号的超时时间. 可用单位: s(秒), m(分), h(小时), 或者 d(天) 默认单位: s(秒). 默认值: 0.

daemonize = yes

● 后台执行fpm,默认值为yes,如果为了调试可以改为no。在FPM中,可以使用不同的设置来运行多个进程池。 这些设置可以针对每个进程池单独设置。

listen = 127.0.0.1:9000

● 监听端口,即nginx中php处理的地址,一般默认值即可。可用格式为: 'ip:port', 'port', '/path/to/unix/socket'. 每个进程池都需要设置.

listen.backlog = -1

● backlog数,-1表示无限制,由操作系统决定,此行注释掉就行。

listen.allowed_clients = 127.0.0.1

● 允许访问FastCGI进程的IP,设置any为不限制IP,如果要设置其他主机的nginx也能访问这台FPM进程,listen处要设置成本地可被访问的IP。默认值是any。每个地址是用逗号分隔. 如果没有设置或者为空,则允许任何服务器请求连接

listen.owner = www listen.group = www listen.mode = 0666

● unix socket设置选项,如果使用tcp方式访问,这里注释即可。

user = www group = www

● 启动进程的帐户和组

php-fpm 进程池优化方法

pm = dynamic

● 对于专用服务器,pm可以设置为static。

如何控制子进程,选项有static和dynamic。如果选择static,则由pm.max_children指定固定的子进程数。如果选择dynamic,则由下开参数决定:

pm.max_children

● 静态方式下开启的php-fpm进程数量,在动态方式下他限定php-fpm的最大进程数(这里要注意pm.max_spare_servers的值只能小于等于pm.max_children)

pm.start_servers

● 动态方式下的起始php-fpm进程数量。

pm.min_spare_servers

● 保证空闲进程数最小值,如果空闲进程小于此值,则创建新的子进程

pm.max_spare_servers# 🎜🎜# ● PHP 확장 라이브러리 경로 설정

expose_php = Off

#🎜🎜#● http 헤더에 PHP 정보가 노출되지 않도록 방지#🎜🎜# #🎜🎜# display_errors = Off#🎜🎜##🎜🎜#● PHP가 mysql을 호출할 때 오류 메시지 노출 방지하기#🎜🎜##🎜🎜#log_errors = On# 🎜🎜## 🎜🎜#● display_errors를 닫은 후 PHP 오류 로그 활성화(경로는 php-fpm.conf에서 구성됨) #🎜🎜##🎜🎜#zend_extension=opcache.so 확장=mysqli.so 확장= pdo_mysql.so#🎜🎜##🎜🎜#● PHP의 opcache 및 mysql 동적 라이브러리 설정 #🎜🎜##🎜🎜#<code>date.timezone = PRC#🎜🎜##🎜 🎜#● PHP 시간대 설정#🎜🎜##🎜🎜#opcache.enable=1#🎜🎜##🎜🎜#● opcache 켜기#🎜🎜##🎜🎜# open_basedir = /usr/ share/nginx/html;#🎜🎜##🎜🎜#● PHP 스크립트가 접근할 수 있는 디렉터리를 설정합니다. (실제 상황에 맞게 구성해야 합니다.) #🎜🎜## 🎜🎜##🎜🎜#php-fpm.conf php-fpm 프로세스 서비스의 구성 파일입니다. 다음은 몇 가지 일반적인 구성입니다. #🎜🎜##🎜🎜##🎜🎜#error_log = /usr/ local/php/logs/php-fpm.log #🎜🎜##🎜🎜#● 오류 로그 경로 설정 #🎜🎜##🎜🎜#include=/usr/local/php7 /etc/php-fpm.d/*.conf# 🎜🎜##🎜🎜#●www.conf 파일에 구성을 도입합니다(기본적으로 설정됨)#🎜🎜##🎜🎜##🎜🎜 #php-fpm.conf 및 www.conf#🎜🎜#의 주요 구성 정보 #🎜🎜##🎜🎜#pid = run/php-fpm.pid#🎜🎜##🎜🎜 #● pid 설정, 기본값은 설치 디렉터리의 var/run/php-fpm입니다. #🎜🎜##🎜🎜#error_log = log/php-fpm.log를 활성화하는 것이 좋습니다. >#🎜🎜##🎜🎜#● 오류 로그는 기본적으로 설치 디렉터리에 var/log/입니다. 🎜🎜##🎜🎜#● 사용 가능한 오류 수준은 경고(즉시 처리해야 함), 오류(오류 상황), 경고(경고 상황), 알림(일반적인 중요 정보), 디버그(디버깅 정보)입니다. : 공지.#🎜🎜##🎜🎜#emergency_restart_threshold = 60#🎜🎜##🎜🎜 #emergency_restart_interval = 60초#🎜🎜##🎜🎜#●는 다음을 의미합니다. Emergency_restart_interval에 설정된 값 내에서 SIGSEGV 또는 SIGBUS 오류가 있는 php-cgi 프로세스 수가 Emergency_restart_threshold를 초과하면 php-fpm이 정상적으로 다시 시작됩니다. 이 두 가지 옵션은 일반적으로 기본값으로 유지됩니다. #🎜🎜##🎜🎜#process_control_timeout = 0#🎜🎜##🎜🎜#● 기본 프로세스 재사용 신호를 수락하기 위한 하위 프로세스의 시간 제한을 설정합니다. 사용 가능한 단위: s(초), m(분), h(시간) 또는 d(일) 기본 단위: s(초). 기본값: 0.#🎜🎜##🎜🎜#daemonize = yes#🎜🎜# #🎜 🎜#● 백그라운드에서 fpm을 실행합니다. 기본값은 yes로 변경하여 디버깅할 수 있습니다. FPM에서는 서로 다른 설정으로 여러 프로세스 풀을 실행할 수 있습니다. 이러한 설정은 각 프로세스 풀에 대해 개별적으로 설정할 수 있습니다. #🎜🎜##🎜🎜#listen = 127.0.0.1:9000#🎜🎜##🎜🎜#● 수신 포트는 nginx에서 PHP가 처리하는 주소입니다. 일반적으로 기본값이면 충분합니다. . 사용 가능한 형식은 'ip:port', 'port', '/path/to/unix/socket'입니다. 각 프로세스 풀을 설정해야 합니다. #🎜🎜##🎜🎜#listen.backlog = -1 #🎜🎜##🎜🎜#● 백로그 번호 -1은 무제한을 의미하며 운영 체제에 따라 결정됩니다. 이 줄을 주석 처리하면 됩니다. #🎜🎜##🎜🎜#listen.allowed_clients = 127.0.0.1#🎜🎜##🎜🎜#● FastCGI 프로세스의 IP에 대한 액세스를 허용하려면 무제한 IP로 설정하세요. 다른 호스트를 설정하려면 nginx도 이 FPM 프로세스에 액세스할 수 있으며 수신 위치는 로컬 액세스 가능 IP로 설정되어야 합니다. 기본값은 임의입니다. 각 주소는 쉼표로 구분됩니다. 설정하지 않거나 비어 있으면 모든 서버에서 연결을 요청할 수 있습니다 #🎜🎜##🎜🎜#listen.owner = www listening.group = www listening.mode = 0666 code >#🎜🎜##🎜🎜#● Unix 소켓 설정 옵션, tcp를 사용하여 액세스하는 경우 여기에 댓글을 달아주세요. #🎜🎜##🎜🎜#<code>user = www group = www#🎜🎜##🎜🎜#● 프로세스를 시작한 계정 및 그룹 #🎜🎜##🎜🎜##🎜🎜# php- fpm 프로세스 풀 최적화 방법#🎜🎜##🎜🎜##🎜🎜#pm = 동적#🎜🎜##🎜🎜#● 전용 서버의 경우 pm을 정적으로 설정할 수 있습니다. #🎜🎜##🎜🎜#하위 프로세스를 제어하는 ​​방법, 옵션은 정적 및 동적입니다. static을 선택한 경우 pm.max_children에 의해 고정된 개수의 하위 프로세스가 지정됩니다. 동적을 선택한 경우 다음 매개변수에 의해 결정됩니다: #🎜🎜##🎜🎜#pm.max_children#🎜🎜##🎜🎜#● 정적에서 시작된 php-fpm 프로세스 수 모드, 동적 모드에서는 php-fpm의 최대 프로세스 수를 제한합니다(여기서 pm.max_spare_servers의 값은 pm.max_children보다 작거나 같을 수 있다는 점에 유의해야 합니다) #🎜🎜##🎜🎜 #pm.start_servers#🎜🎜 ##🎜🎜#● 동적 모드의 초기 php-fpm 프로세스 수. #🎜🎜##🎜🎜#pm.min_spare_servers#🎜🎜##🎜🎜#● 유휴 프로세스가 이 값보다 작으면 새 하위 프로세스를 생성합니다. #🎜🎜 ##🎜🎜#pm.max_spare_servers#🎜🎜##🎜🎜#● 유휴 프로세스의 최대 수가 이 값보다 크면 정리됩니다. #🎜🎜#

● dm이 static으로 설정되면 pm.max_children 매개변수만 적용됩니다. 시스템은 매개변수에 의해 설정된 수의 php-fpm 프로세스를 엽니다. php-fpm 프로세스는 아마도 20m-40m의 메모리를 차지하므로 숫자 크기 설정은 실제 메모리 크기에 따라 설정되어야 합니다. 또한 데이터베이스, 시스템 프로세스 등과 같은 다른 메모리 점유에도 주의를 기울여야 합니다. , 위의 4개 매개변수의 설정 값을 결정합니다!

● dm이 동적으로 설정되면 4개 매개변수가 모두 적용됩니다. php-fpm이 실행되기 시작하면 시스템은 pm.start_servers php-fpm 프로세스를 시작한 다음 시스템 필요에 따라 pm.min_spare_servers와 pm.max_spare_servers 사이의 php-fpm 프로세스 수를 동적으로 조정합니다. 매개변수에서는 pm.start_servers 값이 pm.min_spare_servers와 pm.max_spare_servers 사이에 있어야 합니다.

pm.max_requests = 1000pm.max_requests = 1000

● 设置每个子进程重生之前服务的请求数.

● 最大处理请求数是指一个php-fpm的worker进程在处理多少个请求后就终止掉,master进程会重新respawn一个新的。

● 这个配置的主要目的是避免php解释器或程序引用的第三方库造成的内存泄露。

对于可能存在内存泄漏的第三方模块来说是非常有用的. 如果设置为 '0' 则一直接受请求. 等同于 PHP_FCGI_MAX_REQUESTS 环境变量. 默认值: 0.

pm.status_path = /status

● FPM状态页面的网址. 如果没有设置, 则无法访问状态页面. 默认值: none. munin监控会使用到

ping.path = /ping

● FPM监控页面的ping网址. 如果没有设置, 则无法访问ping页面. 该页面用于外部检测FPM是否存活并且可以响应请求. 请注意必须以斜线开头 (/)。

ping.response = pong

● 用于定义ping请求的返回相应. 返回为 HTTP 200 的 text/plain 格式文本. 默认值: pong.

request_terminate_timeout = 0

● 设置单个请求的超时中止时间. 该选项可能会对php.ini设置中的'max_execution_time'因为某些特殊原因没有中止运行的脚本有用. 设置为 '0' 表示 'Off'.当经常出现502错误时可以尝试更改此选项。

request_slowlog_timeout = 10s

● 当一个请求该设置的超时时间后,就会将对应的PHP调用堆栈信息完整写入到慢日志中. 设置为 '0' 表示 'Off'

slowlog = log/$pool.log.slow

● 慢请求的记录日志,配合request_slowlog_timeout使用

rlimit_files = 1024

● 设置文件打开描述符的rlimit限制. 默认值: 系统定义值默认可打开句柄是1024,可使用 ulimit -n查看,ulimit -n 2048修改。

rlimit_core = 0

● 设置核心rlimit最大限制值. 可用值: 'unlimited' 、0或者正整数. 默认值: 系统定义值.

chroot =

● 启动时的Chroot目录. 所定义的目录需要是绝对路径. 如果没有设置, 则chroot不被使用.

chdir =

● 设置启动目录,启动时会自动Chdir到该目录. 所定义的目录需要是绝对路径. 默认值: 当前目录,或者/目录(chroot时)

catch_workers_output = yes

● 重定向运行过程中的stdout和stderr到主要的错误日志文件中. 如果没有设置, stdout 和 stderr 将会根据FastCGI的规则被重定向到 /dev/null . 默认值: 空.`

clear_env = no          

● 清理环境

variables_order

variables_order参数详解在另一篇文章https://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

● 각 하위 프로세스가 다시 태어나기 전에 제공되는 요청 수를 설정합니다. #🎜🎜##🎜🎜# ● 최대 처리된 요청 수는 php-fpm 작업자 프로세스가 종료되기 전에 처리하는 요청 수를 나타내며, 마스터 프로세스는 새 요청을 다시 생성합니다. #🎜🎜##🎜🎜#● 이 구성의 주요 목적은 프로그램에서 참조하는 PHP 인터프리터 또는 타사 라이브러리로 인해 발생하는 메모리 누수를 방지하는 것입니다. #🎜🎜##🎜🎜#은 메모리 누수가 있을 수 있는 타사 모듈에 매우 유용합니다. '0'으로 설정하면 요청이 항상 PHP_FCGI_MAX_REQUESTS 환경 변수와 동일합니다. # #🎜🎜#pm.status_path = /status#🎜🎜##🎜🎜#● FPM 상태 페이지의 URL이 설정되지 않으면 상태 페이지에 액세스할 수 없습니다. .munin 모니터링은 #🎜🎜##🎜🎜#ping.path = /ping#🎜🎜##🎜🎜#● FPM 모니터링 페이지의 ping URL을 사용합니다. ping 페이지에 접근할 수 없습니다. 이 페이지는 FPM이 살아 있고 요청에 응답할 수 있는지 여부를 외부적으로 확인하는 데 사용됩니다. 주의할 점은 슬래시(/)로 시작해야 한다는 점입니다. #🎜🎜##🎜🎜#ping.response = pong#🎜🎜##🎜🎜#● ping 요청의 반환 응답을 정의하는 데 사용됩니다. 반환은 HTTP 200 텍스트/일반 형식 텍스트입니다. 기본값: pong.#🎜🎜##🎜🎜#request_terminate_timeout = 0#🎜🎜##🎜🎜#● 단일 요청에 대한 시간 초과 중단 시간을 설정합니다. 이 옵션은 PHP에 영향을 미칠 수 있습니다. ini 설정 'max_execution_time'은 특별한 이유로 중단되지 않는 스크립트에는 유용하지 않습니다. '0'으로 설정하면 502 오류가 자주 발생하는 경우 이 옵션을 변경해 볼 수 있습니다. #🎜🎜##🎜🎜#request_slowlog_timeout = 10s#🎜🎜##🎜🎜#● 요청에 제한 시간이 설정되면 해당 PHP 호출 스택 정보가 완전히 기록됩니다. 느린 로그를 '0'으로 설정하면 '해제'를 의미합니다. #🎜🎜##🎜🎜#slowlog = log/$pool.log.slow#🎜🎜##🎜🎜#● 느린 요청 기록 로그를 작성하고 request_slowlog_timeout #🎜🎜##🎜🎜#rlimit_files = 1024#🎜🎜##🎜🎜#● 파일 열기 설명자의 rlimit 제한을 설정합니다. 기본값: 시스템 정의 값은 다음과 같습니다. 기본적으로 사용됩니다. 열린 핸들은 1024이며 ulimit -n을 사용하여 볼 수 있고 ulimit -n 2048로 수정할 수 있습니다. #🎜🎜##🎜🎜#rlimit_core = 0#🎜🎜##🎜🎜#● 최대 코어 제한 값을 설정합니다. 사용 가능한 값: '무제한', 0 또는 양의 정수. system 값을 정의합니다.#🎜🎜##🎜🎜#chroot =#🎜🎜##🎜🎜#● 시작 시 Chroot 디렉터리가 설정되지 않은 경우 절대 경로여야 합니다. 사용되지 않습니다. #🎜🎜##🎜🎜#chdir =#🎜🎜##🎜🎜#● 시작 시 해당 디렉터리에 자동으로 Chdir이 지정되도록 설정합니다. 절대 경로입니다. 기본값: 현재 디렉터리 또는 / 디렉터리(chrooting 시) #🎜🎜##🎜🎜#catch_workers_output = yes#🎜🎜##🎜🎜#● stdout 및 stderr을 기본 오류 로그 파일을 설정하지 않으면 FastCGI 규칙에 따라 stdout 및 stderr이 /dev/null로 리디렉션됩니다. 기본값: 비어 있음.`#🎜🎜##🎜🎜#clear_env = no         # 🎜🎜##🎜🎜#● 환경 정리 #🎜🎜##🎜🎜#variables_order#🎜🎜##🎜🎜#variables_order 매개변수는 다른 문서 https://www.php .cn/php- weizijiaocheng-429277.html#🎜🎜##🎜🎜#일반적인 오류 및 해결 방법#🎜🎜##🎜🎜#요청 시간 초과 중단 시간이 설정되지 않았습니다 #🎜🎜##🎜🎜#● request_terminate_timeout 값을 0으로 설정하거나 너무 길게 설정하면 PHP 스크립트가 계속 실행될 수 있습니다. 이러한 방식으로 모든 php-cgi 프로세스가 file_get_contents() 함수에 정체되면 이 Nginx+PHP 웹서버는 더 이상 새로운 PHP 요청을 처리할 수 없으며 Nginx는 사용자에게 "502 잘못된 게이트웨이"를 반환합니다. #🎜🎜##🎜🎜#PHP 스크립트의 최대 실행 시간 설정이 필요하지만 근본 원인이 아닌 증상만 치료합니다. 예를 들어 30s로 변경하면 file_get_contents()가 웹 페이지 콘텐츠를 얻는 속도가 느리다면 이는 150개의 php-cgi 프로세스가 초당 5개의 요청만 처리할 수 있다는 의미이며 WebServer에서도 "502 Bad"를 피하기가 어렵습니다. 게이트웨이". 해결책은 request_terminate_timeout을 10초 또는 합리적인 값으로 설정하거나 file_get_contents에 시간 초과 매개변수를 추가하는 것입니다! #🎜🎜##🎜🎜#max_requests 매개변수의 부적절한 구성#🎜🎜##🎜🎜#● max_requests 매개변수의 부적절한 구성으로 인해 간헐적으로 502 오류가 발생할 수 있습니다. #🎜🎜##🎜🎜# pm.max_requests = 1000#🎜🎜#

● 각 하위 프로세스가 다시 태어나기 전에 제공되는 요청 수를 설정합니다. 이는 메모리 누수가 있을 수 있는 타사 모듈에 매우 유용합니다. '0'으로 설정하면 요청이 항상 PHP_FCGI_MAX_REQUESTS 환경 변수와 동일합니다. 기본값: 0 .

이 구성은 PHP-CGI 프로세스에서 처리한 요청 수가 500개에 도달하면 프로세스가 자동으로 다시 시작됨을 의미합니다.

● 그런데 왜 프로세스를 다시 시작해야 합니까?

● 일반적으로 프로젝트에서는 일부 타사 라이브러리를 어느 정도 사용하게 됩니다. 이러한 타사 라이브러리에는 종종 메모리 누수 문제가 발생합니다. PHP-CGI 프로세스를 정기적으로 다시 시작하지 않으면 메모리 사용량이 필연적으로 증가합니다. 따라서 PHP-FPM은 PHP-CGI의 관리자로서 메모리 사용량이 증가하지 않도록 일정 횟수 요청한 PHP-CGI 프로세스를 다시 시작하는 모니터링 기능을 제공합니다.

php-fpm의 느린 로그, 디버그 및 예외 문제 해결 도구

● request_slowlog_timeout은 시간 제한 매개변수를 설정하고, Slowlog는 느린 로그의 저장 위치를 ​​설정하며, tail -f /var/log/www.slow.log를 볼 수 있습니다. 너무 느리게 실행되는 PHP 프로세스.

과도한 네트워크 읽기와 느린 Mysql 쿼리의 일반적인 문제를 확인할 수 있습니다. 프롬프트 정보에 따라 문제를 해결하면 명확한 방향을 찾을 수 있습니다.

위 내용은 PHP7의 php.ini, php-fpm 및 www.conf 구성의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 juejin.im에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제