採用nginx+php做爲webserver的架構模式,在現現在運用至關普遍。然而第一步須要實現的是如何讓nginx正確的調用php。因爲nginx調用php並非如同調用一個靜態文件那麼直接簡單,是須要動態執行php腳本。因此涉及到了對nginx.conf文件的配置。這一步對新手而言通常須要網上查資料,對於通常的熟手而言,也有很多同窗並無搞透徹爲什麼要如此這般配置。本文的主要內容爲如何在nginx server中正確配置php調用方法,以及配置的基本原理。php
1、nginx+php運行原理:
首先簡單的講一講原理,目前主流的nginx+php的運行原理以下:
一、nginx的worker進程直接管理每個請求到nginx的網絡請求。
二、對於php而言,因爲在整個網絡請求的過程當中php是一個cgi程序的角色,因此採用名爲php-fpm的進程管理程序來對這些被請求的php程序進行管理。php-fpm程序也如同nginx同樣,須要監聽端口,而且有master和worker進程。worker進程直接管理每個php進程。
三、關於fastcgi:fastcgi是一種進程管理器,管理cgi進程。市面上有多種實現了fastcgi功能的進程管理器,php-fpm就是其中的一種。再提一點,php-fpm做爲一種fast-cgi進程管理服務,會監聽端口,通常默認監聽9000端口,而且是監聽本機,也就是隻接收來自本機的端口請求,因此咱們一般輸入命令 netstat -nlpt|grep php-fpm 會獲得:
tcp 0 0 127.0.0.1:9000 0.0.0.0:* LISTEN 1057/php-fpm
這裏的127.0.0.1:9000 就是監聽本機9000端口的意思。
四、關於fastcgi的配置文件,目前fastcgi的配置文件通常放在nginx.conf同級目錄下,配置文件形式,通常有兩種:fastcgi.conf 和 fastcgi_params。不一樣的nginx版本會有不一樣的配置文件,這兩個配置文件有一個很是重要的區別:fastcgi_parames文件中缺乏下列配置:
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
咱們能夠打開fastcgi_parames文件加上上述行,也能夠在要使用配置的地方動態添加。使得該配置生效。
五、當須要處理php請求時,nginx的worker進程會將請求移交給php-fpm的worker進程進行處理,也就是最開頭所說的nginx調用了php,其實嚴格得講是nginx間接調用php。
瞭解了上面的這五個簡單原理,在nginx中配置php調用方法就變得易如反掌。nginx
2、配置文件:
直接貼上代碼逐行進行講解,此處貼出一個能正常啓動php腳本的最簡nginx vhost配置:
server {
listen 8011;
server_name test.cn;
location ~ \.php?.*$ {
root /share/test;
fastcgi_pass 127.0.0.1:9000;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
一、第一個大括號 server{ }:沒必要多說,表明一個獨立的server,
二、listen 8011:表明該server監聽8011端口
三、location ~ \.php?.*${ }:表明一個能匹配對應uri的location,用於匹配一類uri,並對所匹配的uri請求作自定義的邏輯、配置。這裏的location,匹配了全部帶.php的uri請求,例如:http://192.168.244.128:8011/test.php/asdasd http://192.168.244.128:8011/index.php等
四、root /share/test:請求資源根目錄,告訴匹配到該location下的uri到/share/teset文件夾下去尋找同名資源。
五、fastcgi_pass 127.0.0.1:9000:這行開始是本文的重點:這行代碼的意思是,將進入到該location內的uri請求看作是cgi程序,並將請求發送到9000端口,交由php-fpm處理。
六、fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; :這行配置意思是:動態添加了一行fastcgi配置,配置內容爲SCRIPT_FILENAME,告知管理進程,cgi腳本名稱。因爲個人nginx中只有fastcgi_params文件,沒有fastcgi.conf文件,因此要使php-fpm知道SCRIPT_FILENAME的具體值,就必需要動態的添加這行配置。
七、include fastcgi_params; 引入fastcgi配置文件
以上就是最簡潔版的nginx啓動php腳本的最簡配置,當重啓nginx以後,在/share/test目錄下建立一個xx.php文件,輸入<?php echo "hello world"; ?>保存,而後在瀏覽器中訪問localhost:8011/xx.php 就能夠在網頁上顯示hello world了。web
3、總結:
其實對於調用php這類cgi腳本程序,只要理解了我開頭提到的5點原理,而後結合5-7行配置講解,徹底能夠較清晰的明白爲何須要這樣配置了。對於新手而言,每每被fastcgi,php-fpm cgi程序搞得一頭霧水,胡亂配置已通,跑通上線,也不去深究其原理。因此但願寫在這裏的東西能對讀者帶來一點點的幫助。
---------------------
做者:dengjiexian
來源:CSDN
原文:https://blog.csdn.net/dengjiexian123/article/details/53358452?utm_source=copy
版權聲明:本文爲博主原創文章,轉載請附上博文連接!瀏覽器