Nginx location的匹配規(guī)則
- ~ 波浪線表示執(zhí)行一個正則匹配,區(qū)分大小寫
- ~* 表示執(zhí)行一個正則匹配,不區(qū)分大小寫
- ^~ ^~表示普通字符匹配,如果該選項匹配,只匹配該選項,不匹配別的選項,一般用來匹配目錄
- = 進行普通字符精確匹配
- @ #"@" 定義一個命名的 location,使用在內(nèi)部定向時,例如 error_page, try_files
location 匹配優(yōu)先級
- = 精確匹配會第一個被處理。如果發(fā)現(xiàn)精確匹配,nginx停止搜索其他匹配。
- 普通字符匹配,正則表達式規(guī)則和長的塊規(guī)則將被優(yōu)先和查詢匹配,也就是說如果該項匹配還需去看有沒有正則表達式匹配和更長的匹配。
- ^~ 則只匹配該規(guī)則,nginx停止搜索其他匹配,否則nginx會繼續(xù)處理其他location指令。
- 最后匹配理帶有""和"*"的指令,如果找到相應的匹配,則nginx停止搜索其他匹配;當沒有正則表達式或者沒有正則表達式被匹配的情況下,那么匹配程度最高的逐字匹配指令會被使用。
示例
<pre style="white-space:pre-wrap;color:rgb(85,85,85);margin-top:5px;margin-bottom:5px;padding:8px 12px;font-size:13px;border:1px dashed rgb(204,204,204);line-height:17px;background-color:rgb(244,245,247);">location = / {
只匹配"/".
[ configuration A ]
}
location / {
匹配任何請求,因為所有請求都是以"/"開始
但是更長字符匹配或者正則表達式匹配會優(yōu)先匹配
[ configuration B ]
}
location ^~ /images/ {
匹配任何以 /images/ 開始的請求,并停止匹配 其它location
[ configuration C ]
}
location ~* .(gif|jpg|jpeg)$ {
匹配以 gif, jpg, or jpeg結(jié)尾的請求.
但是所有 /images/ 目錄的請求將由 [Configuration C]處理.
[ configuration D ]
}</pre>
URL 重寫
僅是URL重寫,不需要用location匹配,直接在server里寫rewrite即可。
location / {
try_files $uri $uri/ /index.html?$args;
}
找指定路徑下文件,如果不存在,則轉(zhuǎn)給哪個文件執(zhí)行
try_files
語法: try_files file1 [file2 ... filen] fallback
默認值: 無
作用域: location
目前看 location /getoffers {
try_files $uri/getoffers $uri/index.php /index.php?$query_string;
}
被路由,等價于 curl -v "http://api.mobcastlead.com/index.php?action=getoffers&mod=server&sid=6&secret=7cbb72e208044850325c33f5b0ac43a3" ,這個當然也是500錯誤。
去掉 最后的 secret 參數(shù) , curl -v "http://api.mobcastlead.com/index.php?action=getoffer&mod=server&sid=6" ,得到 {"status":"error","msg":"Apptoken is mistake"}
試了一個 第七個渠道可以獲得數(shù)據(jù)
【nginx try_files的理解】
以 try_files $uri $uri/ /index.php; 為例,當用戶請求 http://servers.blog.ustc.edu.cn/example 時,這里的 $uri 就是 /example。try_files 會到硬盤里嘗試找這個文件。如果存在名為 /$root/example(其中 $root 是 WordPress 的安裝目錄)的文件,就直接把這個文件的內(nèi)容發(fā)送給用戶。顯然,目錄中沒有叫 example 的文件。然后就看 $uri/,增加了一個 /,也就是看有沒有名為 /$root/example/ 的目錄。又找不到,就會 fall back 到 try_files 的最后一個選項 /index.php,發(fā)起一個內(nèi)部 “子請求”,也就是相當于 nginx 發(fā)起一個 HTTP 請求到 http://servers.blog.ustc.edu.cn/index.php。這個請求會被 location ~ \.php$ { ... } catch 住,也就是進入 FastCGI 的處理程序。而具體的 URI 及參數(shù)是在 REQUEST_URI 中傳遞給 FastCGI 和 WordPress 程序的,因此不受 URI 變化的影響。