PHP-FPM과 Nginx 간의 통신 메커니즘 요약

藏色散人
풀어 주다: 2023-04-07 06:10:02
앞으로
3456명이 탐색했습니다.

PHP-FPM 소개

CGI 프로토콜 및 FastCGI 프로토콜

각 동적 언어( PHP , Python 등) 코드 파일은 해당 파서를 통과해야 서버가 인식할 수 있으며 CGI 프로토콜을 사용하여 인터프리터와 서버가 서로 통신할 수 있습니다. 서버에서 PHP 파일을 구문 분석하려면 서버가 PHP 파일을 구문 분석할 수 있도록 해당 CGI 프로토콜과 결합된 PHP 인터프리터를 사용해야 합니다.

CGI 메커니즘은 각 요청에 대해 CGI 프로세스를 포크하고 요청이 완료된 후 프로세스를 종료해야 하므로 실제 응용 프로그램에서는 리소스 낭비이므로 CGI의 향상된 버전인 FastCGI , FastCGI는 요청이 처리된 후 프로세스가 종료되지 않지만 여러 요청이 계속 처리되므로 효율성이 크게 향상됩니다.

PHP-FPM이란

PHP-FPM은 FastCGI를 구현하고 프로세스 관리를 제공하는 PHP-FastCGI 프로세스 관리자입니다. 기능. 프로세스에는 마스터 프로세스와 작업자 프로세스의 두 가지 유형이 포함됩니다. 포트를 수신하고 서버에서 요청을 수신하는 마스터 프로세스는 하나만 있지만 일반적으로 여러 작업자 프로세스가 있습니다(특정 개수는 실제 프로세스에 따라 구성됩니다). 필요), 각 프로세스에는 내부에 하나의 코드가 내장되어 있습니다. PHP 인터프리터는 코드가 실제로 실행되는 곳입니다.

Nginx 및 php-fpm 통신 메커니즘

웹사이트(예: www.test.com)를 방문할 때 처리 흐름은 다음과 같습니다. 다음과 같습니다:

www.test.com
        |
        |
      Nginx
        |
        |
路由到 www.test.com/index.php
        |
        |
加载 nginx 的 fast-cgi 模块
        |
        |
fast-cgi 监听 127.0.0.1:9000 地址
        |
        |
www.test.com/index.php 请求到达 127.0.0.1:9000
        |
        |
     等待处理...
로그인 후 복사

Nginx와 php-fpm의 조합

Linux에서 nginx와 php-fpm 간의 통신에는 TCP 소켓이 포함됩니다. Unix 소켓은 두 가지 방법으로 가능합니다.

tcp 소켓의 장점은 서버를 교차할 수 있다는 것입니다. 이 방법은 nginx와 php-fpm이 동일한 시스템에 있지 않을 때만 사용할 수 있습니다.

IPC(프로세스 간 통신) 소켓이라고도 하는 Unix 소켓은 동일한 호스트에서 프로세스 간 통신을 구현하는 데 사용됩니다. 이 방법을 사용하려면 nginx 구성 파일에 php-fpm 소켓을 채워야 합니다. . 파일 위치.

두 가지 방법의 데이터 전송 과정은 아래 그림과 같습니다.

PHP-FPM과 Nginx 간의 통신 메커니즘 요약

두 가지 방법의 차이점: # 🎜🎜## 🎜🎜#Unix 소켓은 네트워크 프로토콜 스택을 통과할 필요가 없으므로 패키징 및 언패킹, 체크섬 계산, 시퀀스 번호 및 응답 유지 등의 작업이 필요하지 않습니다. 단지 하나의 프로세스에서 애플리케이션 계층 데이터를 복사할 뿐입니다. 다른 사람에게. 따라서 tcp 소켓보다 효율성이 높아 불필요한 tcp 오버헤드를 줄일 수 있습니다. 그러나 동시성이 높을 때 Unix 소켓은 불안정하며 연결 ​​지향 프로토콜을 지원하지 않으면 대량의 장기 캐시가 생성됩니다. 예외. TCP와 같은 연결 지향 프로토콜은 통신의 정확성과 무결성을 더 잘 보장할 수 있습니다.

Nginx와 php-fpm의 조합에는 해당 구성 파일의 설정만 필요합니다.

1) Nginx의 구성

은 Take로 시작합니다. tcp 소켓 통신 예시

server {
    listen       80; #监听 80 端口,接收http请求
    server_name  www.test.com; #就是网站地址
    root /usr/local/etc/nginx/www/huxintong_admin; # 准备存放代码工程的路径
    #路由到网站根目录 www.test.com 时候的处理
    location / {
        index index.php; #跳转到 www.test.com/index.php
        autoindex on;
    }   
    #当请求网站下 php 文件的时候,反向代理到 php-fpm
    location ~ \.php$ {
        include /usr/local/etc/nginx/fastcgi.conf; #加载 nginx 的 fastcgi 模块
        fastcgi_intercept_errors on;
        fastcgi_pass   127.0.0.1:9000; # tcp 方式,php-fpm 监听的 IP 地址和端口
       # fasrcgi_pass /usr/run/php-fpm.sock # unix socket 连接方式
    }

}
로그인 후 복사

2) php-fpm 구성

listen = 127.0.0.1:9000
# 或者下面这样
listen = /var/run/php-fpm.sock
로그인 후 복사

참고

is in use 유닉스 소켓 모드로 접속 시 소켓 파일은 본질적으로 파일이기 때문에 권한 제어에 문제가 있으므로 nginx 프로세스의 권한과 php-fpm의 권한에 주의해야 합니다. 허가 없이 접근하라는 메시지가 표시됩니다. (해당 구성 파일에 사용자를 설정합니다.) 위 구성을 통해 php-fpm과 nginx 간의 통신을 완료할 수 있습니다.

애플리케이션에서 선택

nginx와 php-fpm이 동일한 서버에서 실행되고 동시성이 높지 않은 경우(더 이상 1000 이상), nginx와 php-fpm 간의 통신 효율성을 향상시키려면 unix 소켓을 선택하십시오.

동시 업무가 많은 경우, 보다 안정적인 TCP 소켓을 사용하여 로드 밸런싱, 커널 최적화 등 운영 및 유지 관리 방법을 통해 효율성을 유지하는 것을 고려해 보세요.

동시성이 높지만 여전히 유닉스 소켓을 사용하고 싶다면 다음 방법을 통해 유닉스 소켓의 안정성을 향상시킬 수 있습니다.

1) sock 파일을 /dev/shm 디렉토리에 저장하세요. 메모리를 더 빠르게 읽고 쓸 수 있도록 이 디렉토리에 sock 파일을 저장하세요.

2) 백로그 개선

backlog 기본 비트 128, 1024. 이 값은 일반 QPS로 대체되며 구성은 다음과 같습니다.

nginx.conf 파일

server {
        listen 80 default backlog = 1024;
       }
로그인 후 복사

php-fpm.conf 파일

listen.backlog = 1024
로그인 후 복사

3) 양말 파일을 추가하고 php-fpm 인스턴스

/dev/shm에 새 양말 파일을 생성하고, nginx의 업스트림 모듈을 통해 두 양말 파일에 대한 요청을 로드 밸런싱하고, 두 양말 파일을 php-의 두 세트에 매핑합니다. fpm 인스턴스.

개인 요약, 틀린 내용이 있으면 정정해주세요~

관련 추천: "

PHP 튜토리얼

"

위 내용은 PHP-FPM과 Nginx 간의 통신 메커니즘 요약의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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