Nginx("엔진 x")는 고성능 HTTP 및 역방향 프록시 서버이자 IMAP/POP3/SMTP입니다. 섬기는 사람.
초기 웹서버는 html과 같은 정적 파일만 처리했지만, 기술의 발전으로 php가 나타났습니다.
웹서버가 처리할 수 없습니다. 어떻게 해야 하나요? 그런 다음 PHP 인터프리터가 처리하도록 하세요!
PHP 인터프리터에 맡겨도 괜찮지만, PHP 인터프리터는 웹서버와 어떻게 통신하나요?
다른 언어 해석기(예: PHP, Python 해석기)와 웹 서버 간의 통신 문제를 해결하기 위해 cgi 프로토콜이 등장했습니다. CGI 프로토콜에 따라 프로그램을 작성하면 언어 해석기와 웹서버 간의 통신이 가능합니다. php-cgi 프로그램과 같은 것입니다.
cgi 프로토콜을 사용하면 PHP 인터프리터와 웹 서버 간의 통신 문제가 해결되고 웹 서버가 마침내 동적 언어를 처리할 수 있습니다.
그러나 웹서버가 요청을 받을 때마다 CGI 프로세스를 분기한 다음 요청이 완료된 후 프로세스를 종료합니다. 요청이 10,000개라면 php-cgi 프로세스를 10,000번 포크하고 종료해야 합니다.
자원 낭비라고 생각한 적이 있나요?
그래서 CGI의 향상된 버전인 fast-cgi가 등장했습니다. fast-cgi는 매번 요청을 처리한 후 프로세스를 종료하지 않지만 프로세스가 한 번에 여러 요청을 처리할 수 있도록 프로세스를 유지합니다. 이렇게 하면 매번 프로세스를 다시 포크할 필요가 없어 효율성이 크게 향상됩니다.
php-fpm은 php-Fastcgi 프로세스 관리자입니다.
php-fpm은 FastCGI를 구현한 것이며 프로세스 관리 기능을 제공합니다.
프로세스에는 마스터 프로세스와 작업자 프로세스가 포함됩니다.
포트를 수신하고 웹 서버로부터 요청을 받는 역할을 담당하는 마스터 프로세스는 하나뿐입니다. 일반적으로 여러 개의 작업자 프로세스가 있습니다(특정 번호는 실제 필요에 따라 구성됩니다). 각 프로세스에는 내부에 PHP 인터프리터가 내장되어 있습니다. , 이는 PHP 코드의 실제 해석입니다.
우리는 Nginx가 http 요청을 처리하는 기능뿐만 아니라 역방향 프록시도 수행할 수 있다는 것을 알고 있습니다.
그래서 Nginx는 역방향 프록시 기능을 통해 백엔드 Php-fpm에 동적 요청을 전달합니다.
새 Nginx+Php-fpm을 구성해 보겠습니다
nginx 디렉터리에 들어가서 nginx.conf 파일을 편집합니다.
그림과 같이 nginx.conf 마지막 줄에 include 파일을 추가합니다
위의 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 포트를 수신하고 요청이 처리될 때까지 기다립니다.
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返回给浏览器
시작이 성공했습니다. php-fpm 프로세스를 확인합니다
위와 같이 , 마스터 프로세스, 3개의 작업자 프로세스가 있습니다.
위 내용은 PHP와 nginx의 작동 메커니즘과 원리의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!