이 글은 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은 fastcgi 프로토콜의 구현입니다. 이는 시작 시 마스터 프로세스와 작업자 프로세스를 포함합니다. 웹서버에는 일반적으로 여러 개의 작업자 프로세스가 있으며, 각 작업자에는 PHP 코드를 실행하는 데 사용되는 CGI 프로세스 해석기가 있습니다
phpfpm을 시작하면 마스터 프로세스가 시작됩니다. .ini 파일이 로드되고 실행 환경이 초기화되며 여러 작업자 프로세스가 시작됩니다. 요청이 올 때마다 요청은 처리를 위해 작업자 프로세스로 전달됩니다.
php.ini 구성을 수정하고 다시 시작한 후 매번 새 구성을 로드하기 위해 새 작업자 프로세스가 시작됩니다. 그리고 기존 작업이 완료된 후 프로세스가 소멸되므로 원활한 재시작이 이루어집니다
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 중국어 웹사이트의 기타 관련 기사를 참조하세요!