簡單的PHP站點中,nginx怎樣爲一個請求選擇location來處理:
server {
listen 80;
server_name example.org www.example.org;
root /data/www;
location / {
index index.html index.php;
}
location ~* .(gif|jpg|png)$ {
expires 30d;
}
location ~ .php$ {
fastcgi_pass localhost:9000;
fastcgi_param SCRIPT_FILENAME
$document_root$fastcgi_script_name;
include fastcgi_params;
}
}
首先,nginx使用前綴匹配找出最準確的location,這一步nginx會忽略location在配置文件出現的順序。上面的配置中,唯一的前綴匹配location是"/",而且因爲它可以匹配任意的請求,所以被作爲最後一個選擇。接着,nginx繼續按照配置中的順序依次匹配正則表達式的location,匹配到第一個正則表達式後停止搜索。匹配到的location將被使用。如果沒有匹配到正則表達式的location,則使用剛剛找到的最準確的前綴匹配的location。
請注意所有location匹配測試只使用請求的URI部分,而不使用參數部分。這是因爲寫參數的方法很多,比如:
/index.php?user=john&page=1
/index.php?page=1&user=john
除此以外,任何人在請求串中都可以隨意添加字符串:
/index.php?page=1&something+else&user=john
現在讓我們來看使用上面的配置,請求是怎樣被處理的:
請求"/logo.gif"首先匹配上location "/",然後匹配上正則表達式".(gif|jpg|png)$"。因此,它將被後者處理。根據"root /data/www"指令,nginx將請求映射到文件/data/www/logo.gif",併發送這個文件到客戶端。
請求"/index.php"首先也匹配上location "/",然後匹配上正則表達式".(php)$"。 因此,它將被後者處理,進而被髮送到監聽在localhost:9000的FastCGI服務器。fastcgi_param指令將FastCGI的參數SCRIPT_FILENAME的值設置爲"/data/www/index.php",接着FastCGI服務器執行這個文件。變量$document_root等於root指令設置的值,變量$fastcgi_script_name的值是請求的uri,"/index.php"。
請求"/about.html"僅能匹配上location "/",因此,它將使用此location進行處理。根據"root /data/www"指令,nginx將請求映射到文件"/data/www/about.html",併發送這個文件到客戶端。
請求"/"的處理更爲複雜。它僅能匹配上location "/",因此,它將使用此location進行處理。然後,index指令使用它的參數和"root /data/www"指令所組成的文件路徑來檢測對應的文件是否存在。如果文件/data/www/index.html不存在,而/data/www/index.php存在,此指令將執行一次內部重定向到"/index.php",接着nginx將重新尋找匹配"/index.php"的location,就好像這次請求是從客戶端發過來一樣。正如我們之前看到的那樣,這個重定向的請求最終交給FastCGI服務器來處理。
一個簡單的php站點配置
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章
Django學習隨手記(七)
ZSC_LM
2018-08-27 19:45:51
ThinkCMF配置URL
ZSC_LM
2018-08-27 19:45:48
nginx+php-fpm訪問報錯,顯示access denied
ZSC_LM
2018-08-27 19:45:48
nginx開啓監控模塊
baiydn
2018-08-27 19:17:46
Nginx在CentOS7基於源代碼編譯安裝【作者Leo】
leoly521
2018-08-27 17:53:34
nginx配置詳情(持續更新)
it_______
2018-08-27 17:51:24
Nginx簡介與安裝
it_______
2018-08-27 17:51:23
使用NGINX部署Laravel項目詳解
EagleMaze
2018-08-27 16:52:03
NGINX/Apache2 如何設置HTTPS鏈接
EagleMaze
2018-08-27 16:52:02
CentOS7 Nginx配置https
jeikerxiao
2018-08-27 16:35:21
禪道附件大小的限制、PHP上傳文件大小限制
qq_27086159
2018-08-27 16:29:11
nginx, tomcat 集羣
iteye_20450
2018-08-27 15:25:07
大型網站技術架構(一)-技術彙總&實戰(部分)
陈鋆
2018-08-27 14:31:02
Nginx監聽多個端口配置實例(Window環境)&負載均衡
陈鋆
2018-08-27 14:31:02