2018-04-04 nginx tryfile 和php cpa

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 變化的影響。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

  • Nginx簡介 解決基于進程模型產(chǎn)生的C10K問題,請求時即使無狀態(tài)連接如web服務都無法達到并發(fā)響應量級一萬的現(xiàn)...
    魏鎮(zhèn)坪閱讀 2,227評論 0 9
  • [toc] 在公司的網(wǎng)站上推薦使用 docker 容器來安裝環(huán)境,一個項目一個 docker 容器。 、、 百度百...
    Mdvtrw閱讀 1,575評論 0 1
  • 大多數(shù) Nginx 新手都會頻繁遇到這樣一個困惑,那就是當同一個location配置塊使用了多個 Nginx 模塊...
    SkTj閱讀 8,252評論 0 12
  • 本章主要內(nèi)容是nginx的location模塊,也是最重要的模塊。 location模塊: proxy_set_h...
    農(nóng)民工進城閱讀 1,528評論 0 1
  • location正則寫法 location使用語法: location [ = | ~ | ~* | ^~ ] u...
    Zhang21閱讀 14,897評論 0 5

友情鏈接更多精彩內(nèi)容