>  기사  >  백엔드 개발  >  PHP7의 php.ini, php-fpm 및 www.conf 구성에 대한 자세한 설명

PHP7의 php.ini, php-fpm 및 www.conf 구성에 대한 자세한 설명

coldplay.xixi
coldplay.xixi앞으로
2020-06-18 17:00:294237검색

PHP7의 php.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

    PHP 확장 라이브러리 경로 설정
expose_php = Off

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

http 헤더에 PHP 정보 노출 방지🎜🎜🎜display_errors = Off🎜🎜🎜PHP가 mysql을 호출할 때 오류 정보 노출 방지🎜🎜🎜log_errors = On code>🎜🎜🎜display_errors를 끈 후 PHP 오류 로그 활성화(경로는 php-fpm.conf에서 구성됨)🎜🎜🎜zend_extension=opcache.so 확장=mysqli.so 확장=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🎜🎜🎜(기본적으로 설정됨) 🎜🎜

php-fpm.conf에 www.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 = 통지🎜🎜🎜오류 수준은 다음과 같습니다. 경고(즉시 처리해야 함), 오류(오류 상황), 경고(경고 상황), 통지(일반적인 중요 정보), 디버그(디버깅 정보) ). 기본값: 통지.🎜🎜🎜emergency_restart_threshold = 60🎜🎜emergency_restart_interval = 60s🎜🎜🎜는 SIGSEGV 또는 SIGBUS 오류가 있는 php-cgi 프로세스의 수가 Emergency_restart_interval 값이 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에 대한 액세스를 허용합니다. 다른 호스트에서도 액세스할 수 있도록 nginx를 설정하려면 IP를 제한하지 않도록 설정하세요. 이 FPM 프로세스에서는 수신 위치가 접속 가능한 로컬 IP로 설정되어야 합니다. 기본값은 임의입니다. 각 주소는 쉼표로 구분됩니다. 설정하지 않거나 비어 있으면 모든 서버에서 연결을 요청할 수 있습니다🎜🎜🎜listen.owner = www listening.group = www listening.mode = 0666🎜🎜🎜 unix 소켓 설정 옵션, tcp를 사용하여 액세스하는 경우 여기에 주석을 달아주세요. 🎜🎜🎜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를 생성하세요. 코드>🎜<ul> <li>유휴 프로세스의 최대 수를 보장합니다. 유휴 프로세스가 이 값보다 크면 정리됩니다. </li> <li>dm이 정적으로 설정된 경우 pm.max_children 매개변수만 적용됩니다. 시스템은 매개변수에 의해 설정된 수의 php-fpm 프로세스를 엽니다. php-fpm 프로세스는 아마도 20m-40m의 메모리를 차지하므로 숫자 크기 설정은 실제 메모리 크기에 따라 설정되어야 합니다. 또한 데이터베이스, 시스템 프로세스 등과 같은 다른 메모리 점유에도 주의를 기울여야 합니다. , 위의 4개 매개변수의 설정 값을 결정합니다! </li> <li>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 사이에 있어야 합니다. </li> </ul> <p><code>pm.max_requests = 1000

  • 각 하위 프로세스가 다시 태어나기 전에 제공되는 요청 수를 설정하세요.
  • 처리되는 최대 요청 수는 처리 후 php-fpm 작업자 프로세스가 종료되고 마스터 프로세스가 다시 생성되는 요청 수를 나타냅니다. 중 새로운 것. 이 구성의 주요 목적은 프로그램에서 참조하는 PHP 인터프리터 또는 타사 라이브러리로 인해 발생하는 메모리 누수를 방지하는 것입니다.
  • 메모리 누수가 있을 수 있는 타사 모듈에 매우 유용합니다. '0'으로 설정하면 요청이 항상 허용됩니다. 기본값: 0.

pm.status_path /statuspm.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

    FPM 상태 페이지의 URL을 설정하지 않으면 상태 페이지에 액세스할 수 없습니다. 기본값: 없음 Munin 모니터링에서는
ping.path = /ping<h3 class="heading" data-id="heading-3"></h3> <p>FPM 모니터링 페이지의 핑 URL이 설정되어 있지 않으면 핑 페이지에 접근할 수 없습니다. 이 페이지는 FPM이 살아 있는지 여부와 요청에 응답할 수 있는지 확인하는 데 사용됩니다. 슬래시(/)로 시작해야 합니다. </p> <h3 class="heading" data-id="heading-4"></h3> <code>ping.response = pong

    은 ping 요청의 반환 응답을 정의하는 데 사용됩니다. 반환된 텍스트/일반 형식 텍스트는 HTTP 200입니다. 기본값: pong.
request_terminate_timeout = 0

    단일 요청에 대한 시간 초과 중단 시간을 설정합니다. 이 옵션은 php.ini 설정의 'max_execution_time'이 특별한 이유로 실행 중인 스크립트를 중단하지 않는 경우 유용할 수 있습니다. '0'으로 설정하면 '해제'를 의미하며 502 오류가 자주 발생하는 경우 이 옵션을 변경해 볼 수 있습니다.
  • pm.max_requests = 1000request_slowlog_timeout = 10s

    🎜🎜요청이 설정된 시간 초과에 도달하면 해당 PHP 호출 스택 정보가 느린 로그에 완전히 기록됩니다. '0'으로 설정하면 '해제'를 의미합니다.🎜 🎜🎜slowlog = log/$pool.log.slow🎜🎜🎜request_slowlog_timeout🎜🎜🎜rlimit_files = 1024🎜🎜🎜와 함께 사용되는 느린 요청 로그 파일 열기 설명자 기본값: 기본 열기 핸들의 시스템 정의 값은 1024이며, ulimit -n을 사용하여 볼 수 있고 ulimit -n 2048로 수정할 수 있습니다. 🎜🎜🎜rlimit_core = 0🎜🎜🎜최대 코어 제한 값을 설정합니다. 사용 가능한 값: '무제한', 0 또는 양의 정수. 기본값: 시스템 정의 값. chroot =
🎜🎜🎜시작 시 Chroot 디렉터리입니다. 정의된 디렉터리는 절대 경로여야 합니다. 설정하지 않으면 chroot가 사용되지 않습니다.🎜🎜🎜chdir =🎜🎜🎜Set 정의된 디렉터리는 절대 경로여야 합니다. 기본값: 현재 디렉터리 또는 /directory(chroot인 경우) 🎜🎜🎜catch_workers_output = yes 🎜🎜🎜Redirect 실행 중인 프로세스 중 stdout 및 stderr은 기본 오류 로그 파일로 전송됩니다. 설정하지 않으면 FastCGI 규칙에 따라 stdout 및 stderr이 /dev/null로 리디렉션됩니다.`🎜 🎜🎜clear_env = no         🎜🎜🎜환경 정리🎜🎜🎜variables_order🎜🎜variables_order 매개변수에 대한 자세한 내용은 다른 글 URL: juejin.im/post/5c4eea… 🎜🎜일반적인 오류 및 해결 방법 organized🎜🎜Request timeout abort time 🎜🎜🎜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 오류가 발생할 수 있습니다. 🎜🎜
  • 각 하위 프로세스가 다시 태어나기 전에 제공되는 요청 수를 설정합니다. 메모리 누수가 있을 수 있는 타사 모듈에 매우 유용합니다. '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 쿼리의 일반적인 문제를 확인할 수 있습니다. 프롬프트 정보에 따라 문제를 해결하면 명확한 방향이 표시됩니다.

      추천 튜토리얼: "php 튜토리얼"

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

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