개발 꿀팁/PHP

Nginx+Php-fpm 작동 원리 상세설명

Jammie 2022. 7. 7. 17:30
반응형

1. 에이전트와 역방향 에이전트
실생활의 예
1. 순방향 에이전트: 접근xxxx.com

위와 같이 xxx 사이트 접속이 불가능하기 때문에 xxxx.com에 접속하려면 프록시 서버가 필요합니다.

에이전트 server는 '우리'에게 감지될 수 있다(우리는 에이전트 server에 접속한다)
프록시 서버는 "xxxx 서버"에 대해 인지할 수 없습니다(xxx는 ht만 알고 있습니다).tp요청해 주세요.

사람에게는 감지되지만 서버는 감지하지 못하는 서버를 우리는 그를 프록시 서버라고 부른다.

2, 역방향 에이전트: 역방향 에이전트를 통한 로드 밸런싱

위 그림과 같이 우리가 baidu.com를 방문했을 때, baidu는 하나의 프록시 서버를 가지고 있었고, 이 프록시 서버를 통해 서로 다른 서버로 부하를 분산시킬 수 있었다

이 프록시 서버는 '우리'에게 인식되지 않는다(우리는 바이두의 서버에만 접속할 수 있고 로드 밸런싱을 위한 프록시 서버가 중간에 있는지 몰랐다

이 프록시 서버는 "server1 server2 server3" 에 대해 인식 가능합니다. (프록시 서버의 로드 밸런싱을 다른 서버로 라우팅)
사람에게는 감지할 수 없지만 서버에게는 감지할 수 있다. 우리는 그를 역방향 프록시 서버라고 부른다.

결론
'정방향' '역방향'은 인간의 감각에 상대적이다.사람이 느끼는 대리는 정방향 대리이고, 사람이 느끼지 못하는 대리는 역방향 대리이다.

2. 초식 Nginx와 Php-fpm
Nginx가 뭐야

Nginx("engine x")는 고성능 HTTP 및 역방향 프록시 서버이며 IMAP/POP3/SMTP 서버이기도 하다

Php-fpm이 뭐야
1,cgi,fast-CGI 프로토콜

CGI의 역사

초기 웹서브rhtml와 같은 정적 파일만 처리하지만, 임의기술의 발전에 따라 수출하다.php 같은 동적 언어를 구사한다.
웹서버 처리이제 그만, 어떡하지?그럼 php해로 넘어가겠습니다.석기로 처리합시다!
php 인터프리터에 맡기면 굉장히자, 하지만 php 인터프리터가 웹과 어떻게서버 진행통신은요?

php, 파이썬 인터프리터 등 서로 다른 언어 해석기와 웹서버의 통신을 해결하기 위해 cgi 프로토콜이 등장했다.cgi 프로토콜에 따라 프로그램을 작성하면 언어 해석기와 웹서버의 통신이 가능하다.php-cgi 프로그램과 같습니다

fast-cgi 개선

cgi 프로토콜이 생겨서 해결되었습니다.hp 인터프리터가 webserver와 통신하는 문제를 webserver는 마침내 동적 언어를 다룰 수 있게 되었다.그러나 웹서버는 요청을 받을 때마다 fork에 cgi 프로세스로 가서 프로세스를 종료하고 kill을 삭제해 달라고 요청한다.이렇게 10000건의 요청이 있으면 fork, kill php-cgi 프로세스가 1만건 필요하다.

자원을 낭비하는 것을 발견했습니까?

그러자 cgi의 개량 버전인 fast-cgi가 나왔다.fast-cgi는 매번 요청을 처리한 후 kill이 프로세스를 삭제하지 않고 여러 개의 요청을 한 번에 처리할 수 있도록 프로세스를 유지한다.매번 fork를 다시 진행하지 않아도 돼 효율성이 크게 높아진다

2, php-fpm은 무엇인가

php-fpm 즉 php-Fastcgi Process Manager
php-fpm은 FastCGI를 구현하고 프로세스 관리 기능을 제공한다.
프로세스에 master 진행 포함프로세스와 worker 프로세스 두 가지입니다.
master 프로세스가 하나만 있음, 포트 수신, 웹 서버로부터의 요청 수신, worker 입력공정은 일반적으로 여러 개(구체 수량은 실제 필요에 따라 배치됨)가 있으며, 각각의 공정은 내부에 하나씩 내장되어 있다 PHP 인터프리터, PHP 코드가 실제로 실행되는 곳입니다.

3. Nginx가 어떻게 Php와-fpm 결합
위에서 말씀드렸듯이 엔징스는 아닙니다HTTP 요청을 처리하는 기능만 있고 역방향 에이전트도 가능하다.Nginx는 역방향 프록시 기능을 통해 동적으로요청은 백엔드 Php-fpm입니다.

이제 새로운 엔을 배치해볼까요?진엑스+Php-fpm

1.nginx.con 설정f파일
nginx 디렉터리로 이동, 편집 nginx.conf 파일.
그림과 같이 nginx.con에서f 마지막 줄, include 파일 추가

2、대응 server 추가
위 include로 들어가는 경로, server를 추가합니다

구성 항목의 의미를 설명합니다

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 포트를 수신하여 요청이 올 때까지 기다립니다

사. 총결산
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 요청을 받다,작업자 프로세스 실행 요청
        |
        |
php-fpm 요청을 처리한 후 nginx로 돌아가기
        |
        |
nginxHTTP를 통해 브라우저로 결과 반환

5. 효과 전시
1,nginx와 php-fpm 모듈 작동

성공적으로 부팅되었습니다. php-fpm 프로세스를 봅니다

위의 그림과 같이 마스터 프로세스가 하나 있고 3개의 worker 프로세스가 있습니다

2. 사이트 디렉토리 아래에 파일 작성
우리는 아래와 같이 문서를 편집한다

3. 사이트 방문

반응형