>  기사  >  백엔드 개발  >  PHP-FPM 설치 및 구성에 대한 자세한 설명

PHP-FPM 설치 및 구성에 대한 자세한 설명

青灯夜游
青灯夜游앞으로
2021-03-02 18:07:434327검색

이 기사에서는 PHP-FPM에 대해 자세히 알아보고 PHP-FPM의 설치 및 전역 구성을 소개합니다. 도움이 필요한 친구들이 모두 참고할 수 있기를 바랍니다.

PHP-FPM 설치 및 구성에 대한 자세한 설명

【추천 학습: "PHP Video Tutorial"】

Function

PHP-FPM(PHP FastCGI 프로세스 관리자)의 의미: PHP FastCGI 프로세스 관리자, PHP 프로세스 풀을 관리하는 데 사용됨 소프트웨어 웹 서버로부터의 요청을 받아들이는 것입니다.
PHP-FPM은 메모리와 프로세스를 효과적으로 제어하고 PHP 구성을 원활하게 다시 로드할 수 있는 더 나은 PHP 프로세스 관리 방법을 제공합니다.

(1). php-fpm이 나타나는 이유는 php-fastcgi 때문입니다. php-fastcgi를 잘 관리하기 위해 구현한 프로그램

(2) php-fastcgi

php-fastcgi는 관리 없이 PHP 요청만 구문 분석하고 결과를 반환하는 CGI 프로그램일 뿐입니다(그래서 php-fpm이 나타나는 이유입니다).

(3) php-cgi라고 부르면 안되는 이유

사실 php-fastcgi가 등장하기 전에도 php-cgi가 있었지만 실행 효율이 낮아서 php-fastcgi로 대체되었습니다.

(4) fastcgi와 cgi의 차이점은 무엇인가요?

친구 여러분, 서비스 웹 서버(nginx)가 요청을 배포할 때 접미사를 일치시켜 해당 요청이 동적 PHP 요청임을 알고 해당 요청을 PHP로 전달합니다.

CGI 시대에는 요청이 들어온 후 php.ini의 기본 구성 정보를 읽고 실행 환경을 초기화해야 한다는 생각이 비교적 보수적이었습니다. . 환경을 초기화하고, 데이터를 반환하고, 프로세스를 종료합니다. 시간이 지나면 프로세스를 시작하는 작업이 지루해지고 특히 피곤해집니다.

PHP가 5의 시대가 되었을 때, 모든 사람들은 특히 이런 작업 방식에 혐오감을 느꼈습니다. 게으른 사람들은 필사적으로 CGI가 마스터 프로세스(마스터)를 한 번에 시작하게 하고 읽기만 하게 할 수 있을까라고 생각했습니다. 그런 다음 여러 작업자 프로세스(작업자)를 시작하면 요청이 오면 마스터를 통해 작업자에게 전달되므로 작업 중복을 피할 수 있습니다. 그래서 fastcgi가 탄생했습니다.

(5) Fastcgi가 너무 좋은데, 시작한 일꾼이 다 떨어지면 어떻게 해야 하나요?

워커가 충분하지 않으면 마스터는 구성의 정보를 통해 동적으로 워커를 시작하고 유휴 상태일 때 워커를 다시 가져올 수 있습니다.


(6) 아직도 php-fpm이 무엇인지 이해가 안 되나요?

그것은


PHP-FPM은 처리를 위해 하나 이상의 하위 프로세스에 HTTP 요청을 전달할 시기와 방법을 제어하는 ​​기본 프로세스를 생성합니다. PHP-FPM 기본 프로세스는 또한

PHP 하위 프로세스가 생성되고(웹 애플리케이션에서 더 많은 트래픽을 처리하기 위해) 삭제되는 시기(하위 프로세스가 너무 오랫동안 실행되었거나 더 이상 필요하지 않음)를 제어합니다. PHP-FPM 프로세스 풀의 각 프로세스는 단일 HTTP 요청보다 오래 지속되며 10, 50, 100, 500개 이상의 HTTP 요청을 처리할 수 있습니다.




Installation

PHP는 5.3.3 이후 PHP 핵심 코드에 php-fpm을 통합했습니다. 따라서 php-fpm은 별도의 다운로드 및 설치가 필요하지 않습니다. PHP가 php-fpm을 지원하도록 하려면 PHP 소스 코드를 컴파일할 때 --enable-fpm만 포함하면 됩니다.


전역 구성

Centos에서 PHP-FPM의 주요 구성 파일은 /etc/php7/php-fpm.conf입니다. 지정된 하위 프로세스가 지정된 기간 내에 실패하면 PHP-FPM이 다시 시작됩니다.

#在指定的一段时间内,如果失效的PHP-FPM子进程数超过这个值,PHP-FPM主进程将优雅重启。
emergency_restart_threshold = 10

#设定emergency_restart_interval 设置采用的时间跨度。
emergency_restart_interval = 1m

프로세스 풀 구성

PHP-FPM 구성 파일의 나머지 부분은 풀 정의라는 영역입니다. 이 영역에서는 각 PHP-FPM 프로세스 풀에 대한 사용자 설정을 구성합니다. PHP-FPM 프로세스 풀은 일련의 관련 PHP 하위 프로세스입니다. 보통 PHP 애플리케이션에는 자체 프로세스 풀이 있습니다.

Centos는 PHP-FPM 기본 구성 파일 상단에 프로세스 풀 정의 파일을 소개합니다.

include=/etc/php7/php-fpm.d/*.conf
www.conf는 PHP-FPM 프로세스 풀의 기본 구성 파일입니다.

user= nobody
#拥有这个 PHP-FPM进程池中子进程的系统用户。要把这个设置的值设用的非根用户的用户名。

group = nobody
#拥有这个 PHP-FPM进程池中子进程的系统用户组。要把这个设置的值设应用的非根用户所属的用户组名。

listen=[::]]:9000
#PHP-FPM进程池监听的IP地址和端口号,让 PHP-FPM只接受 nginx从这里传入的请求。

listen. allowed clients =127.0.0.1
#可以向这个 PHP-FPM进程池发送请求的IP地址(一个或多个)。

pm.max children =51
#这个设置设定任何时间点 PHP-FPM进程池中最多能有多少个进程。这个设置没有绝对正确的值,你应该测试你的PHP应用,确定每个PHP进程需要使用多少内存,然后把这个设置设为设备可用内存能容纳的PHP进程总数。对大多数中小型PHP应用来说,每个PHP进程要使用5~15MB内存(具体用量可能有差异)。 假设我们使用设备为这个PHP-FPM进程池分配了512MB可用内存,那么可以把这个设置设为(512MB总内存)/(每个进程使用10MB) = 51个进程。

...

편집 및 저장하고 PHP-FPM 기본 프로세스를 다시 시작하세요.

sudo systemctl restart php-fpm.service

PHP-FPM 프로세스 풀의 구성 세부정보는 http://php.net/manual/install.fpm.configuration.php

를 참조하세요.

회사 개발 환경을 참고하세요

테스트 환경 구성은 다음과 같습니다.

[www]
user = nobody               #进程的发起用户和用户组,用户user是必须设置,group不是  nobody 任意用户
group = nobody

listen = [::]:9000          #监听ip和端口,[::] 代表任意ip
chdir = /app                #在程序启动时将会改变到指定的位置(这个是相对路径,相对当前路径或chroot后的“/”目录) 

pm = dynamic                #选择进程池管理器如何控制子进程的数量  static:  对于子进程的开启数路给定一个锁定的值(pm.max_children)   dynamic:  子进程的数目为动态的,它的数目基于下面的指令的值(以下为dynamic适用参数)
pm.max_children = 16        #同一时刻能够存货的最大子进程的数量
pm.start_servers = 4        #在启动时启动的子进程数量
pm.min_spare_servers = 2    #处于空闲"idle"状态的最小子进程,如果空闲进程数量小于这个值,那么相应的子进程会被创建
pm.max_spare_servers = 16   #最大空闲子进程数量,空闲子进程数量超过这个值,那么相应的子进程会被杀掉。

catch_workers_output = Yes  #将worker的标准输出和错误输出重定向到主要的错误日志记录中,如果没有设置,根据FastCGI的指定,将会被重定向到/dev/null上
제품 환경 구성:

예를 들어 PHP-FPM

nginx에 요청을 전달합니다.

server {
       listen       83;
       server_name mobile.com;
       root /app/mobile/web/;

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   /usr/share/nginx/html;
        }

        location / {
                index  index.html index.htm index.php;
                # Redirect everything that isn't a real file to index.php
                try_files $uri $uri/ /index.php$is_args$args;
        }

        #把HTTP请求转发给PHP-FPM进程池处理
        location ~ .*\.php                 include fastcgi_params;
                fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                fastcgi_pass   192.168.33.30:9000;      #监听9000端口
                fastcgi_index  index.php;
                try_files $uri =404;
                #include fastcgi.conf;
        }
        location ~ /\.(ht|svn|git) {
                deny all;
        }
        access_log  /app/wwwlogs/access.log;
        error_log   /app/wwwlogs/error.log;
}

Thinking

[x] 생각하기 질문: 서버의 동시성을 결정하는 요소는 무엇인가요?

  • 최대 PHP-FPM 프로세스 수,
    nginx 동시 수
  • (nginx는 프록시 서버로만 작동), 메모리 사용량, CPU 오버헤드

서버의 QPS(초당 처리되는 요청 수) = 평균 요청 수 연결* (1/응답 시간) 동시성 = 유효 시간 * QPS;

  • 해결책:
  1. 머신 오프로드 추가
    • 동시성 양에 따라 머신 추가 필요성 계산
  2. 새로운 독립형 기능 추가
    • PHP의 opcache 활성화 및 메모리 공간 늘리기
    • 캐시에 연결 system
    • SQL 최적화
    • php Optimization
      ...

더 많은 프로그래밍 관련 지식을 보려면 프로그래밍 비디오를 방문하세요! !

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

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