一直在懵逼nginx 的路由配置,經過今天幾個小時的努力這次終於弄明白了。
如果有不對的地方,希望有前輩指出錯誤,讓我更上一層樓,也讓我別再錯誤的道路上越走越遠。
1.index
我的理解是預設路徑,也就是當找不到檔案的時候的一個預設的路徑,可以配置多個。
具體的用法稍後說,請先記住這個東西當你找不到其他合適的東西,預設給你分配的。
2.location
這個東西匹配你需要的路徑
server {
listen 80;
server_name localhost;
root html/;
index index.html index.htm index.php;
location / {
try_files $uri $uri/ /index.php?$args;
proxy_pass http://www.baidu.com;
}
location ~ \.(html|htm)$ {
try_files $uri = 404;
}
location ~ \.php$ {
try_files $uri = 404;
include fastcgi.conf;
fastcgi_pass 127.0.0.1:9000;
}
}
你可以匹配你需要的所有的uri
想要具體瞭解的話。http://www.nginx.cn/115.html
3.try_files
這個東西是重新導向用的,我感覺和index 差不多,不過確實比index 要好用
舉個例子:
訪問:xf.com/aa
如果我們這麼設定,對於這一句的理解是。
try_files $uri $uri/ /index.php?$args;
當nginx 收到你的xf.com/aa ,那麼會匹配到
location / {
try_files $uri $uri/ /index.php?$args;
proxy_pass http://www.baidu.com;
}
這裡多說一嘴,如果沒有合適的匹配,那麼就會找index的值。
index.html inde.htm index.php
當找到相對應的檔案,就會把你的訪問url變成。
xf.com/index.html或者xf.com/index.htm xf.com/index.php 其中一個
這回你明白index了吧
回來我們再說 try_files
當匹配到這項的時候,就開始執行try_files
nginx 回去找有沒有 aa這個檔案($uri) 如果沒有
繼續找aa這個目錄($uri/) 如果也沒有的話就直接
重新導向到 /index.php?$args
$args 就是你的url 問號後邊的參數
總結:
nginx 擷取到url
1.找server_name
2.找locationpipei
如果沒有找index預設的檔案
如果沒有直接404
有的話加上預設的index.* 重新尋找匹配的location
如果有進入執行try_files
3.尋找try_files 是否有相應的檔案
如果沒有直接重新導向最後一項