Nginx+PHP+FastCGI 가속 모드 구현 방법

WBOY
풀어 주다: 2023-05-14 16:34:12
앞으로
755명이 탐색했습니다.

1. 동적 PHP 웹 페이지에 대한 사용자의 액세스 프로세스

사용자의 브라우저는 웹 페이지에 대한 액세스를 시작합니다: http://192.168.1.103/index.php

사용자와 nginx 서버는 TCP 연결을 위해 3방향 핸드셰이크를 수행합니다(nginx 액세스 제어 정책, nginx 방화벽 및 기타 액세스 제어 정책을 포함한 액세스 제어 정책 무시)

1단계: 사용자가 nginx 서버

에 http 요청을 보냅니다. 2단계: nginx는 사용자가 방문한 URI와 접미사를 기반으로 요청을 판단합니다

1. 예를 들어, 사용자가 index.php에 액세스하면 nginx는 구성 파일의 위치에 따라 이를 일치시킵니다. 예:

[email protected]:/data/web# cat /etc/nginx/conf.d/blog.conf  server {     root /data/web/blog/;     index index.html index.htm;     server_name www.fwait.com;     location / {         try_files $uri $uri/ /index.html;     }     location /blog/ {         #alias /usr/share/doc/;         auth_basic "authorized users only";         auth_basic_user_file /etc/nginx/passwd.conf;         #autoindex on;         allow 192.168.1.103;         deny all;     }     location ~ \.php$ {         include /etc/nginx/fastcgi_params;         fastcgi_intercept_errors on;         fastcgi_pass 127.0.0.1:9000;     } }<br>
로그인 후 복사

사용자가 index.php에 액세스하면 ~ .php$ 위치와 일치합니다. 이는 사용자가 URI를 통해 액세스한 리소스가 크기에 따라 일치하고 액세스된 리소스가 .php로 끝나는 것을 의미합니다.

nginx는 사용자가 요청한 리소스에 따라 특정 위치를 일치시킨 후 해당 위치에 해당하는 작업을 실행합니다.

include /etc/nginx/fastcgi_params; # nginx가 fastcgi 인터페이스를 호출함을 나타냅니다

fastcgi_intercept_errors on; #fastcgi 인터럽트 및 오류 정보 기록이 켜짐을 나타냅니다

fastcgi_pass 127.0.0.1:9000; # nginx가 fastcgi_pass를 통해 분석을 위해 사용자가 요청한 리소스를 127.0.0.1:9000으로 전송함을 나타냅니다. 여기서 nginx와 php 스크립트 구문 분석 서버는 동일한 시스템에 있으므로 127.0.0.1:9000은 로컬 PHP 스크립트 구문 분석 서버입니다.

nginx 서버의 구성에 따라 사용자가 동적 PHP 리소스에 액세스하는 것을 볼 수 있으며, nginx는 PHP 관련 스크립트 구문 분석 프로그램을 호출하여 사용자가 액세스한 리소스를 구문 분석합니다.

3단계: 두 번째 단계에서 볼 수 있듯이 사용자는 동적 콘텐츠를 요청합니다. nginx는 요청을 fastcgi 클라이언트에 전달하고 fastcgi_pass

를 통해 사용자의 요청을 php-fpm으로 보냅니다. 사용자가 정적 리소스에 액세스하면 nginx는 사용자가 요청한 정적 리소스를 사용자에게 직접 반환합니다.

4단계: fastcgi_pass가 동적 리소스를 php-fpm에 전달한 후 php-fpm은 리소스를 PHP 스크립트 구문 분석 서버의 래퍼로 전송합니다

Nginx+PHP+FastCGI 가속 모드 구현 방법

Nginx+PHP+FastCGI 가속 모드 구현 방법

5단계: 래퍼가 php-fpm에서 전송된 요청을 받은 후 래퍼는 PHP 동적 프로그램 구문 분석 서버를 호출하기 위한 새 스레드를 생성합니다

사용자가 MySQL 데이터베이스 읽기 등을 요청하면 데이터베이스 읽기 작업이 트리거됩니다.

사용자가 이미지/첨부 파일 등을 요청하면 PHP는 NFS를 통해 저장된 스토리지 클러스터와 같은 백엔드 스토리지 서버에 대한 쿼리를 트리거합니다.

6단계: PHP는 쿼리 결과를 nginx

로 반환합니다. 7단계: nginx는 응답 메시지를 구성하고 결과를 사용자에게 반환합니다

이는 nginx의 한 유형일 뿐이며, 사용자의 요청과 사용자의 요청 결과 반환은 비동기식으로 수행됩니다. 즉, 사용자가 요청한 리소스가 nginx에서 전송되어 동기화할 수 있습니다. 즉, 구문 분석된 리소스가 직접 반환됩니다. 사용자의 경우 nginx에서 전송할 필요가 없습니다.

2. 관련 질문

1. 동적 리소스에 대한 모든 사용자 요청은 완전한 동적 리소스 구문 분석 프로세스를 트리거해야 합니까?

아니요, 이 문제를 해결하는 방법에는 두 가지가 있습니다.

먼저, nginx 자체의 캐싱 기능을 활성화하여 다음 번에 사용자가 해당 리소스에 액세스하면 nginx는 쿼리가 성공하면 동적 리소스가 구문 분석된 후 정적 리소스를 수행합니다. 사용자에게 직접 반환됩니다.

둘째, 캐시 리소스에 광택 캐시 클러스터를 배포하는 등 nginx 백엔드에 캐시 머신을 배포합니다. 사용자가 요청한 리소스는 먼저 캐시 클러스터에서 검색할 수 있습니다. 2. 캐싱에 nginx를 사용하는 것이 가능합니까? 실제 상황에 따라 전체 웹 아키텍처에서 nginx가 병목 현상이 되지 않는다면 nginx를 캐싱용으로 사용할 수도 있지만, 사용자 요청과 사용자 요청에 대한 응답을 위한 유일한 방법은 nginx이기 때문에 권장하지 않습니다. 스토리지 클러스터와 같은 다른 백엔드 구성 요소의 성능이 아무리 뛰어나더라도 실제 배포(nginx가 http 서버로 사용되는 경우)에서는 nginx의 캐싱 기능을 활성화하지 않는 것이 좋습니다. nginx 캐시 기능을 활성화하면 nginx 성능이 저하되고 nginx가 배포된 해당 서버의 하드웨어 리소스가 소모되기 때문입니다.

3. nginx fastcgi 래퍼 php

Nginx+PHP+FastCGI 가속 모드 구현 방법 간의 관계를 그림으로 표현한다면 4.fastcgi가 정확히 무엇인가요

CGI는 Common Gateway Interface

의 약자입니다. HTTP 서비스에서 프로그램 서비스 통신에 사용되는 도구는 네트워크 서버에서 실행되어야 합니다.

전통적인 CGI 인터페이스 방법은 HTTP 서버가 동적 프로그램을 만날 때마다 구문 분석을 수행하기 위해 파서를 다시 시작해야 하고 그 결과가 HTTP 서버로 반환되기 때문에 성능이 좋지 않습니다. 높은 동시성을 처리할 때 이는 거의 불가능하므로 FastCGI가 탄생했습니다. 게다가 기존 CGI 인터페이스 방식의 보안성도 매우 취약합니다

一个可伸缩地。高速地在HTTP服务器和动态脚本语言间通信的接口

接口在linux下是socket(这个socket可以是文件socket也可以是ip socket)

主要优点把动态语言和HTTP服务器分离开来。多数流行的HTTP服务器都支持FsatCGI包括Apache/Nginx/lighttpd等

支持语言比较流行的是PHP,接口方式采用C/S架构,可以将HTTP服务器和脚本解析器分开,同时在脚本解析服务器上启动一个或者多个脚本解析守护进程。

当HTTP服务器每次遇到动态程序时,可以将其直接交付给FastCGI进程来执行,然后将得到的结果返回给浏览器。这种方式可以让HTTP服务器专一地处理静态请求或者将动态脚本服务器的结果返回给客户端,这在很大程度上提高了整个应用系统的性能。

5.具体的nginx + php的nginx相关配置

[email protected]:/data/web# cat /etc/nginx/nginx.conf|egrep -v "#|^$" user www-data; worker_processes 4; pid /var/run/nginx.pid; events {     worker_connections 768; } http {     sendfile on;     tcp_nopush on;     tcp_nodelay on;     keepalive_timeout 65;     types_hash_max_size 2048;     include /etc/nginx/mime.types;     default_type application/octet-stream;     access_log /var/log/nginx/access.log;     error_log /var/log/nginx/error.log;     gzip on;     gzip_disable "msie6";     include /etc/nginx/conf.d/*.conf;     include /etc/nginx/sites-enabled/*; } [email protected]:/data/web#<br>
로그인 후 복사
[email protected]:/data/web# cat /etc/nginx/conf.d/blog.conf server {     root /data/web/blog/;     index index.html index.htm;     server_name www.fwait.com;     location / {         try_files $uri $uri/ /index.html;     }     location /blog/ {         #alias /usr/share/doc/;         auth_basic "authorized users only";         auth_basic_user_file /etc/nginx/passwd.conf;         #autoindex on;         allow 192.168.1.103;         deny all;     }     location ~ \.php$ {         #include /usr/local/etc/nginx/fastcgi.conf;         include /etc/nginx/fastcgi_params;         fastcgi_intercept_errors on;         fastcgi_pass 127.0.0.1:9000;     } } [email protected]:/data/web#<br>
로그인 후 복사

위 내용은 Nginx+PHP+FastCGI 가속 모드 구현 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:yisu.com
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
최신 이슈
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!