>  기사  >  백엔드 개발  >  PHP와 nginx 간의 작동 메커니즘과 원리에 대한 자세한 소개

PHP와 nginx 간의 작동 메커니즘과 원리에 대한 자세한 소개

不言
不言앞으로
2019-03-25 09:44:253231검색

이 글은 PHP와 nginx 사이의 작동 메커니즘과 원리에 대해 자세히 소개합니다. 도움이 필요한 친구들이 참고할 수 있기를 바랍니다.

1. Nginx 및 Php-fpm 관련 지식 포인트 대중화

Nginx란 무엇인가요?

Nginx("engine x")는 고성능 HTTP 및 역방향 프록시 서버이자 IMAP/POP3/SMTP입니다. 섬기는 사람.

Php-fpm이란

1.cgi, fast-cgi 프로토콜

cgi의 역사

초기 웹서버는 html 등의 정적 파일만 처리했지만, 기술의 발달로 php 등의 동적 언어도 사용하게 되었습니다. 나타났다.
웹서버가 처리할 수 없습니다. 어떻게 해야 하나요? 그런 다음 PHP 인터프리터가 처리하도록 하세요!
PHP 인터프리터에 맡겨도 괜찮지만, PHP 인터프리터는 웹서버와 어떻게 통신하나요?

다른 언어 해석기(예: PHP, Python 해석기)와 웹 서버 간의 통신 문제를 해결하기 위해 cgi 프로토콜이 등장했습니다. CGI 프로토콜에 따라 프로그램을 작성하면 언어 해석기와 웹서버 간의 통신이 가능합니다. php-cgi 프로그램과 같은 것입니다.

fast-cgi 개선

cgi 프로토콜을 사용하면 PHP 인터프리터와 웹 서버 간의 통신 문제가 해결되고 웹 서버가 마침내 동적 언어를 처리할 수 있습니다.
그러나 웹서버가 요청을 받을 때마다 CGI 프로세스를 분기한 다음 요청이 완료된 후 프로세스를 종료합니다. 요청이 10,000개라면 php-cgi 프로세스를 10,000번 포크하고 종료해야 합니다.

자원 낭비라고 생각한 적이 있나요?

그래서 CGI의 향상된 버전인 fast-cgi가 등장했습니다. fast-cgi는 각 요청을 처리한 후 프로세스를 종료하지 않지만 프로세스가 한 번에 여러 요청을 처리할 수 있도록 프로세스를 유지합니다. 이렇게 하면 매번 프로세스를 다시 포크할 필요가 없어 효율성이 크게 향상됩니다.

2. php-fpm이란

php-fpm은 php-Fastcgi 프로세스 관리자입니다.
php-fpm은 FastCGI를 구현한 것이며 프로세스 관리 기능을 제공합니다.
프로세스에는 마스터 프로세스와 작업자 프로세스가 포함됩니다.
포트를 수신하고 웹 서버로부터 요청을 받는 역할을 담당하는 마스터 프로세스는 단 하나뿐인 반면, 일반적으로 여러 작업자 프로세스가 있습니다(특정 개수는 실제 필요에 따라 구성됨). 각 프로세스에는 PHP 인터프리터가 내장되어 있습니다. 내부는 PHP 코드의 실제 해석기입니다.

2. Nginx를 Php-fpm과 결합하는 방법

우리는 Nginx가 http 요청 처리 기능뿐만 아니라 역방향 프록시도 수행할 수 있다는 것을 알고 있습니다.
그래서 Nginx는 역방향 프록시 기능을 통해 백엔드 Php-fpm에 동적 요청을 전달합니다.

새 Nginx+Php-fpm을 구성해 보겠습니다

1. nginx.conf 파일을 구성합니다

nginx 디렉터리에 들어가서 nginx.conf 파일을 편집합니다.
그림과 같이 nginx.conf 마지막 줄에 include 파일을 추가합니다

2. 해당 서버를 추가합니다

위의 include 경로를 입력하고 서버를 추가합니다.

설명해 보겠습니다. 구성 항목의 의미 :

server {    listen       80; #监听80端口,接收http请求
    server_name  www.example.com; #就是网站地址
    root /usr/local/etc/nginx/www/huxintong_admin; # 准备存放代码工程的路径
    #路由到网站根目录www.example.com时候的处理
    location / {        index index.php; #跳转到www.example.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; #nginx fastcgi进程监听的IP地址和端口
    }

}

간단히 말하면: www.example.com을 방문하면 처리 흐름은 다음과 같습니다.

 www.example.|
        ||
        |.example.com/index.|
        |-|
        |-cgi监听127.0.0.1:|
        |.example.com/index.php请求到达127.0.0.1:9000
        |
        |
   等待处理。。。

이제 이 요청을 처리하기 위해 php의 php-fpm을 활성화합니다

php-fpm.conf 파일을 열면 다음 구성을 볼 수 있습니다:

즉, php-fpm 모듈은 127.0.0.1:9000 포트를 수신하고 요청이 처리될 때까지 기다립니다.

3. 요약

nginx와 php-fpm을 결합하면 전체 과정은 이렇습니다.

nginx与php-fpm的结合,完整的流程是这样的。

     www.example.com        
            |
        |
      Nginx        
         |
        |
    路由到www.example.com/index.php        
          |
        |
    加载nginx的fast-cgi模块        
          |
        |
    fast-cgi监听127.0.0.1:9000地址        .
          |
        |
   www.example.com/index.php请求到达127.0.0.1:9000
        |
        |
  php-fpm 监听127.0.0.1:9000
        |
        |
  php-fpm 接收到请求,启用worker进程处理请求        
           |
        |
   php-fpm 处理完请求,返回给nginx        
           |
        |
  nginx将结果通过http返回给浏览器

4. 효과 표시

1. nginx 및 php-fpm 모듈 시작

성공적으로 시작되었으니 php-fpm 프로세스를 확인해 보겠습니다.

위와 같이 마스터 프로세스와 3개의 작업자가 있습니다. 프로세스.

2. 웹사이트 디렉터리에 파일을 만듭니다.

아래와 같이 파일을 편집합니다.

3. 웹사이트를 방문하세요.

이 기사는 여기까지입니다. 흥미진진한 내용 PHP 중국어 홈페이지의 PHP 동영상 튜토리얼 칼럼!

위 내용은 PHP와 nginx 간의 작동 메커니즘과 원리에 대한 자세한 소개의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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