nginx如何解析php?


nginx本身不支持對外部程序的直接調用或者解析,所有的外部程序包括php必須通過FastCGI接口來調用(FastCGI接口在Linux下是socket)
為了調用CGI程序,還需要FastCGI的wrapper,當nginx將cgi請求發送給這個socket的時候,通過fastcgi接口,wrapper接收到請求,然后派生出一個線程,這個線程調用外部程序處理並返回數據;
接着,wrapper再將返回的數據通過fastcgi接口,socket傳遞給nginx;
最后,nginx將返回的數據發送給客戶端

一、Nginx解析PHP

PHP-FRM是管理FastCGI的一個管理器

1.php-frm自身初始化,啟動進程php-frm,監聽9000端口;FastCGI子進程等待來自web服務器的連接

2.當客戶端request到達nginx時,nginx通過location指令,將所有以.php結尾的文件都交給127.0.0.1:9000(本地php解析服務器)進行處理

        location ~ \.php$ {
            root           html;
            fastcgi_pass   127.0.0.1:9000;  #表示nginx通過fastcgi_pass將用戶請求的資源發給9000端口進行解析
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;  #腳本文件請求的路徑
            include        fastcgi.conf;  #表示nginx會調用fastcgi.conf這個配置文件
        }

ngx_http_fastcgi_module

3.nginx將請求fastcgi客戶端,通過fastcgi_pass將用戶的請求發送給php-fpm

4.wrapper收到php-fpm的請求后,會生成一個新的線程調用php動態程序解析服務器(如果請求是mysql數據的讀取,將會觸發讀庫操作,如果是圖片、文件等,將會觸發查詢后端存儲服務器)

5.php將查詢到的結果通過fastcgi返回給nginx

6.nginx將數據返回給用戶

二、如何配置nginx支持php

1.在編譯安裝時添加--enable-fpm 參數即可開啟php-fpm

./configure --prefix=/usr/local/php/  …… --enable-fpm

2.生成php-fpm的配置文件,並修改參數

#cd /usr/local/php/etc/
cp -a php-fpm.conf.default php-fpm.conf
#vim php-fpm.conf
pid = run/php-fpm.pid
#取消注釋
user = nginx
group = nginx
pm.start_servers = 2
#啟動時開啟的進程數(默認值)
pm.min_spare_servers = 1
#最少空閑進程數(默認值)
pm.max_spare_servers = 3
#最多空閑進程數(默認值)

2.修改nginx的配置文件,使其識別.php后綴的

#vim /usr/local/nginx/conf/nginx.conf
#取消以下幾行的注釋,並修改include選項的后綴位fastcgi.conf
#65行-71行
        location ~ \.php$ {
            root           html;
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
            include        fastcgi.conf;
        } 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM