Nginx와 FPM의 작동 메커니즘 예시 공유

小云云
풀어 주다: 2023-03-20 15:52:01
원래의
1323명이 탐색했습니다.

Nginx + FPM을 구성하는 방법에 대한 많은 기사가 인터넷에 있지만 운영 관점에서 수행 방법을 알려주는 것이지 왜 수행해야 하는지에 대해서는 설명하지 않습니다. Nginx와 FPM의 작동 메커니즘 구성 뒤에 숨은 원리에 대해 논의하고 Nginx와 PHP가 함께 작동하는 방식을 실제로 이해해 보겠습니다.

Nginx와 PHP가 어떻게 함께 작동하는지 이야기하려면 먼저 CGI(Common Gateway Interface)와 FastCGI라는 두 가지 프로토콜에 대해 이야기해야 합니다.

CGI는 웹 서버와 배경 언어 간의 상호 작용을 위한 프로토콜입니다. 이 프로토콜을 사용하면 개발자는 모든 언어를 사용하여 웹 서버의 요청을 처리하고 콘텐츠를 동적으로 생성할 수 있습니다. 그러나 CGI에는 치명적인 단점이 있습니다. 즉, 각 요청을 새로운 프로세스로 포크해야 한다는 것입니다. 웹의 등장으로 높은 동시성이 점점 더 표준이 되었고 이러한 비효율적인 방법은 분명히 수요를 충족할 수 없습니다. 이렇게 해서 FastCGI가 탄생했고, CGI는 곧 역사의 무대에서 물러났다. FastCGI는 이름에서 알 수 있듯이 더 빠른 CGI입니다. 하나의 요청이 처리된 후 바로 프로세스를 종료하는 대신 하나의 프로세스에서 여러 요청을 처리할 수 있습니다.

FPM(FastCGI Process Manager)은 FastCGI를 구현한 것이며 FastCGI 프로토콜을 구현하는 모든 웹 서버는 FPM과 통신할 수 있습니다. FPM은 또한 표준 FastCGI에 몇 가지 향상된 기능을 제공합니다. 자세한 내용은 공식 문서인 PHP: FPM Installation을 참조하세요.

FPM은 마스터 프로세스와 작업자 프로세스를 포함하는 PHP 프로세스 관리자입니다. 포트를 수신하고 웹 서버에서 요청을 받는 역할을 담당하는 마스터 프로세스는 단 하나뿐인 반면, 일반적으로 여러 작업자 프로세스(특정 번호)가 있습니다. 실제 필요 구성을 기반으로 함) 각 프로세스에는 PHP 코드가 실제로 실행되는 곳인 PHP 인터프리터가 내장되어 있습니다. 아래 그림은 내 로컬 컴퓨터에서 1개의 마스터 프로세스, 3개의 작업자 프로세스로 구성된 fpm의 프로세스 상황입니다.


FPM으로부터 요청을 받아 처리를 완료하기까지의 구체적인 과정은 다음과 같습니다.

  1. FPM의 마스터 프로세스가 요청을 받습니다

  2. 마스터 프로세스는 구성에 따라 특정 작업자 프로세스를 할당합니다. 사용 가능한 프로세스가 없으면 오류를 반환하므로 Nginx로 작업할 때 더 많은 502 오류가 발생합니다.


  3. 작업자 프로세스가 요청을 처리합니다. 시간이 초과되면 504 오류를 반환합니다.


  4. 요청 처리가 종료되고 결과가 반환됩니다.

FPM 요청을 수신하고 처리하는 과정입니다. , 그렇다면 Nginx는 어떻게 요청을 보내나요? 이는 Nginx 수준에서 설명해야 합니다.

Nginx는 웹 서버일 뿐만 아니라, http 요청에 대한 프록시 외에도 이 기사의 fpm과 관련된 fastcgi 프로토콜을 포함하여 다른 많은 프로토콜 요청에 대해서도 프록시를 수행할 수 있다는 것을 알고 있습니다. Nginx가 fastcgi 프로토콜을 이해할 수 있도록 Nginx는 http 요청을 해당 fastcgi 요청에 매핑하는 fastcgi 모듈을 제공합니다.

Nginx의 fastcgi 모듈은 주로 이러한 매핑 관계를 처리하기 위한 fastcgi_param 명령을 제공합니다. 아래는 Ubuntu에서 Nginx의 구성 파일입니다. 주요 작업은 Nginx의 변수를 PHP에서 이해할 수 있는 변수로 변환하는 것입니다.

또한 매우 중요한 것은 fastcgi_pass 명령입니다. 이 명령은 fpm 프로세스가 수신하는 주소를 지정하는 데 사용됩니다. Nginx는 모든 PHP 요청을 fastcgi 요청으로 변환한 다음 이 주소로 보냅니다. 다음은 간단하게 작동하는 Nginx 구성 파일입니다.

이 구성 파일에서는 포트 80에서 수신 대기하는 새 가상 호스트를 생성하며 웹 루트 디렉터리는 /home/rf/projects/wordpress입니다. 그런 다음 위치 지시어를 사용하여 .php로 끝나는 모든 요청을 처리를 위해 fastcgi 모듈에 넘겨줍니다. 따라서 모든 PHP 요청을 fpm에 넘겨 처리하여 Nginx에서 fpm까지의 폐쇄 루프를 완료합니다.

이제 Nginx와 FPM 간의 전체 통신 프로세스가 더 명확해졌습니다.

관련 권장 사항:

Linux에서 PHP 환경을 설치하고 php-fpm 모듈을 지원하도록 Nginx를 구성하는 방법에 대한 자세한 소개(그림 및 텍스트)

PHP-FPM 실행의 실시간 보기 및 모니터링에 대한 자세한 설명 상태

php는 php-fpm을 사용하여 작업 명령을 다시 시작하고 중지합니다

위 내용은 Nginx와 FPM의 작동 메커니즘 예시 공유의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿