>  기사  >  백엔드 개발  >  PHP와 nginx의 작동 메커니즘과 원리

PHP와 nginx의 작동 메커니즘과 원리

little bottle
little bottle앞으로
2019-04-17 16:23:412468검색

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

Nginx란 무엇입니까

Nginx("엔진 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.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의 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. 웹 사이트 디렉토리에서 파일 생성 아래 그림과 같이 파일을 편집합니다.

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

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