>백엔드 개발 >PHP 튜토리얼 >요청을 실행하는 nginx 및 PHP의 원리 소개

요청을 실행하는 nginx 및 PHP의 원리 소개

不言
不言앞으로
2019-02-25 09:53:212268검색

이 글은 nginx와 php 실행 요청의 원칙을 소개합니다. 필요한 친구들이 참고할 수 있기를 바랍니다.

먼저 우리가 자주 듣는 cgi, php-cgi, fastcgi, php-fpm의 관계를 이해하여 php의 작동 원리를 이해해 봅시다

cgi 프로토콜

cgi 프로토콜은 웹 서버(예: nginx), 즉 콘텐츠 배포 서버에서 어떤 데이터가 전달되고 어떤 형식의 데이터가 전달되는지

php-cgi 프로세스 인터프리터

php-cgi는 매번 PHP의 CGI 프로토콜 프로세스 인터프리터입니다. 시작되면 PHP를 로드해야 합니다. ini 파일->실행 환경 초기화->요청 처리->웹서버로 콘텐츠 반환->php-cgi 프로세스 종료 프로세스

fastcgi 프로토콜

fastcgi 프로토콜 주로 요청이 들어올 때마다 cgi 해석기 프로세스를 시작해야 하는 필요성을 최적화하기 위한 것입니다. cgi 해석기 프로세스는 더 이상 php.ini 파일을 다시 로드하고 매번 실행 환경을 초기화할 필요가 없습니다. 웹서버 요청을 받습니다

php-fpm 프로세스 관리자

php-fpm은 fastcgi 프로토콜의 구현입니다. 이는 시작 시 마스터 프로세스와 작업자 프로세스를 포함합니다. 웹서버에는 일반적으로 여러 개의 작업자 프로세스가 있으며, 각 작업자에는 PHP 코드를 실행하는 데 사용되는 CGI 프로세스 해석기가 있습니다

php 시작 및 작동 원리

phpfpm을 시작하면 마스터 프로세스가 시작됩니다. .ini 파일이 로드되고 실행 환경이 초기화되며 여러 작업자 프로세스가 시작됩니다. 요청이 올 때마다 요청은 처리를 위해 작업자 프로세스로 전달됩니다.

php 원활한 다시 시작 원칙

php.ini 구성을 수정하고 다시 시작한 후 매번 새 구성을 로드하기 위해 새 작업자 프로세스가 시작됩니다. 그리고 기존 작업이 완료된 후 프로세스가 소멸되므로 원활한 재시작이 이루어집니다

nginx 작동 방식

nginx와 php의 협력 원리를 이해하려면 먼저 서버에 대한 이해도 필요합니다 nginx 구성 파일의 일부

server {
    listen       80; #监听80端口,接收http请求
    server_name  www.example.com; #一般存放网址,表示配置的哪个项目
    root /home/wwwroot/zensmall/public/; # 存放代码的根目录地址或代码启动入口
    index index.php index.html; #网站默认首页
    
    #当请求网站的url进行location的前缀匹配且最长匹配字符串是该配置项时,按顺序检查文件是否存在,并返回第一个找到的文件
    location / {
          #try_files,按顺序检查文件是否存在,返回第一个找到的文件
          #$uri代表不带请求参数的当前地址
          #$query_string代表请求携带的参数
          try_files   $uri $uri/ /index.php?$query_string; #按顺序检查$uri文件,$uri地址是否存在,如果存在,返回第一个找到的文件;如果都不存在,发起访问/index.php?$query_string的内部请求,该请求会重新匹配到下面的location请求
    }
    
     #当请求网站的php文件的时候,反向代理到php-fpm去处理
    location ~ \.php$ {
          include       fastcgi_params; #引入fastcgi的配置文件
          fastcgi_pass   127.0.0.1:9000; #设置php fastcgi进程监听的IP地址和端口
          fastcgi_index  index.php; #设置首页文件
          fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name; #设置脚本文件请求的路径
    }
}

위의 전체 서버 구성 의미는 nginx가 포트 80에서 URL 요청을 수신할 때마다 URL에서 위치 일치를 수행한다는 것입니다. / 규칙이 일치하면 내부 요청이 리디렉션되고 /index.php?$query_string의 내부 요청이 시작되며 해당 위치 구성 규칙은 포트에서 수신 대기 중인 php-fpm의 마스터 프로세스로 요청을 보냅니다. 9000

요약

다음은 가장 간단한 사용자 요청 프로세스를 요약한 것입니다.

사용자가 도메인 이름에 액세스 -> 도메인 이름이 DNS 확인을 수행 -> 해당 IP 서버 및 포트에 요청 -> nginx가 요청을 모니터링합니다. 해당 포트 -> nginx가 URL에 응답 위치 일치 수행 -> 일치하는 위치에서 규칙 실행 -> nginx가 요청을 php로 전달 -> php-fpm의 마스터 프로세스가 nginx 요청을 수신함 -> ;마스터 프로세스는 유휴 작업자 프로세스 중 하나에 요청을 할당합니다->작업자 프로세스는 요청을 실행합니다->작업자 프로세스는 실행 결과를 nginx에 반환합니다->nginx는 결과를 사용자에게 반환합니다

위 내용은 요청을 실행하는 nginx 및 PHP의 원리 소개의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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