>  기사  >  백엔드 개발  >  nginx와 php의 작동 방식

nginx와 php의 작동 방식

小云云
小云云원래의
2018-03-01 13:58:203023검색

nginx는 http 요청을 받으면 구성 파일을 통해 해당 서버를 찾습니다. 그런 다음 서버의 모든 위치를 일치시키고 가장 잘 일치하는 위치를 찾으십시오. 위치의 명령은 작업을 완료하기 위해 다시 쓰기 모듈 및 인덱스 모듈과 같은 다른 모듈을 시작합니다. 따라서 nginx의 모듈은 실제 작업자로 간주될 수 있습니다. nginx 모듈은 정적 방식으로 nginx로 컴파일됩니다. nginx를 시작하면 모듈이 자동으로 로드됩니다. Apache와 달리 모듈은 별도로 so 파일로 컴파일되며, 로드 여부는 구성 파일에서 지정됩니다. 따라서 nginx는 모듈 로딩 측면에서도 Apache보다 빠릅니다.

그럼 nginx는 어떻게 PHP를 호출하나요? 먼저 아래 nginx의 PHP 구성을 살펴보겠습니다

location ~ \.php$ {
            root           /webpath;
            fastcgi_pass   127.0.0.1:9000;
            …
            ...
        }

이 위치 지시문은 처리를 위해 파일 접미사가 127.0.0.1:9000인 PHP가 포함된 요청을 전달합니다. 이것을 봤을 때 이것이 C/S 아키텍처라는 것을 짐작했어야 했다고 생각합니다. 여기의 IP 주소와 포트(127.0.0.1:9000)는 fastcgi 프로세스가 수신하는 IP 주소와 포트입니다. fastcgi는 http 서버와 동적 스크립팅 언어 간의 확장 가능한 고속 통신 인터페이스입니다. 가장 널리 사용되는 http 서버는 apache, nginx, lighttpd 등을 포함한 fastcgi를 지원합니다. 동시에, fastcgi는 PHP를 포함한 많은 스크립트 언어에서도 지원됩니다.

이 fastcgi 구성 IP와 포트는 어디서 오는 걸까요? php-fpm.conf에서 다음을 볼 수 있습니다:

listen = 127.0.0.1:9000  #这个表示php的fastcgi进程监听的ip地址以及端口

pm.start_servers = 2
php-fpm作为fastcgi的进程管理器,可以有效控制内存和进程,并且平滑重载php配置。php5.3以后,php-fpm被集成到php的core中,默认安装,无须配置。

fastcgi 프로세스 관리자 php-fpm은 자체적으로 초기화되고 기본 프로세스 php-fpm을 시작하고 start_servers fastcgi 하위 프로세스를 시작합니다. 기본 프로세스 php-fpm은 주로 fastcgi 하위 프로세스를 관리하고 포트 9000을 수신하며 fastcgi 하위 프로세스는 요청을 기다립니다. 클라이언트 요청이 nginx에 도달하면 nginx는 위치 지시문을 통해 처리하기 위해 접미사로 php가 포함된 모든 파일을 127.0.0.1:9000으로 전달합니다. php-fpm은 fastcgi 하위 프로세스를 선택하여 연결하고 환경 변수와 표준 입력을 fastcgi 하위 프로세스로 보냅니다. fastcgi 하위 프로세스는 처리를 완료한 후 표준 출력 및 오류 정보를 반환합니다. fastcgi 하위 프로세스가 연결을 닫으면 요청이 처리되고 다음 처리를 기다리고 있습니다.

일반적인 cgi 모드는 프로세스인데 문제가 있습니다. 요청이 올 때마다 프로세스를 분기해야 하므로 효율성이 느려집니다.

이것이 빠른 cgi fpm이 빠른 cgi 관리자인 이유입니다.
fpm 모드도 마찬가지입니다. 하지만 서비스인 프리포크를 수행합니다. 시작 시 일부 프로세스는 먼저 요청 처리를 기다리기 위해 포크됩니다.

관련 권장 사항:

Nginx 및 PHP-FPM용 시작, 다시 시작, 중지 스크립트

nginx 및 PHP 업로드 파일 크기 제한 설정

mac에서 nginx 및 php_PHP 설치에 대한 자습서

위 내용은 nginx와 php의 작동 방식의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.