摘要:然后檢查正則表達(dá)式,按照它們?cè)谂渲梦募械娘@示順序。正則表達(dá)式的搜索在第一個(gè)匹配中終止,并且使用相應(yīng)的配置。正則表達(dá)式可以包含稍后可以在其他指令中使用的捕獲。
最近學(xué)習(xí)vuejs,做前后端分離,demo做完了,最終還是要發(fā)布的,于是學(xué)習(xí)nginx,其它配置倒是還好理解,唯獨(dú)對(duì)localtion理解不了,最后請(qǐng)教了一些網(wǎng)友,才得以解決問(wèn)題,但是不希望下次還遇到問(wèn)題,所以這里把localtion的配置規(guī)則,都嘗試一遍,也記錄一下,方便自己,也方便別人。
1、配置規(guī)則只要在網(wǎng)上搜一下,或者去官網(wǎng)翻一下文檔,都能知道有幾種規(guī)則,這是官網(wǎng)的:
Syntax: location [ = | ~ | ~* | ^~ ] uri { ... } location @name { ... } Default: — Context: server, location
總而言之,包含兩部分內(nèi)容,一部分是匹配前提條件或者叫要求,另外一部分是要匹配的東西,也就是匹配內(nèi)容。
下面這段是官網(wǎng)說(shuō)明的谷歌翻譯:
在對(duì)“%XX”形式編碼的文本進(jìn)行解碼之后,針對(duì)歸一化的URI執(zhí)行匹配,解析對(duì)相對(duì)路徑組件“.”和“..”的引用,以及將兩個(gè)或多個(gè)相鄰斜杠可能壓縮為單個(gè)斜杠。 localtion可以由前綴字符串或正則表達(dá)式定義。正則表達(dá)式使用前面的“?*”修飾符(不區(qū)分大小寫(xiě)匹配)或“?”修飾符(用于區(qū)分大小寫(xiě)匹配)指定。要找到匹配給定請(qǐng)求的位置,nginx首先檢查使用前綴字符串(前綴位置)定義的位置。其中,選擇并記住具有最長(zhǎng)匹配前綴的位置。然后檢查正則表達(dá)式,按照它們?cè)谂渲梦募械娘@示順序。正則表達(dá)式的搜索在第一個(gè)匹配中終止,并且使用相應(yīng)的配置。如果沒(méi)有找到與正則表達(dá)式匹配,則使用之前記住的前綴位置的配置。 localtion blocks可以嵌套,下面提到一些例外。 對(duì)于不區(qū)分大小寫(xiě)的操作系統(tǒng),如macOS和Cygwin,與前綴字符串的匹配忽略了一個(gè)情況(0.7.7)。但是,比較僅限于一個(gè)字節(jié)的區(qū)域設(shè)置。 正則表達(dá)式可以包含稍后可以在其他指令中使用的捕獲(0.7.40)。 如果最長(zhǎng)匹配的前綴位置具有“^?”修飾符,則不會(huì)檢查正則表達(dá)式。 另外,使用“=”修飾符可以定義一個(gè)完全匹配的URI和位置。如果找到完全匹配,則搜索終止。例如,如果頻繁出現(xiàn)“/”請(qǐng)求,則定義“l(fā)ocation = /”將加快對(duì)這些請(qǐng)求的處理,因?yàn)樗阉髟诘谝淮伪容^之后立即終止。這樣的位置不能明顯地包含嵌套的位置。 在從0.7.1到0.8.41的版本中,如果請(qǐng)求匹配前綴位置而沒(méi)有“=”和“^?”修飾符,則搜索也將被終止,而正則表達(dá)式未被檢查
根據(jù)上面的說(shuō)明可知,默認(rèn)情況, nginx先檢查前綴字符串,然后檢查正則表達(dá)式,如果前綴字符串匹配到了,并且前綴字符串有這個(gè)“^~” 要求,就不配正則了;如果沒(méi)有這個(gè)“^~” ,即使前綴匹配到了,也要去匹配正則表則,如果正則表達(dá)式匹配到了,就是用正則表達(dá)式的,沒(méi)有就是用前綴字符串匹配到的路徑;
2、無(wú)正則表達(dá)式匹配規(guī)則:使用匹配到的最長(zhǎng)的前綴的路徑。
location / { root html; index index.html index.htm; } location /img { root D:/nginx/img; index test.png; }
這是nginx下載安裝完成后,增加了一個(gè)叫img的配置,訪問(wèn)路徑是http://localhost/img,訪問(wèn)一下看看什么效果,我開(kāi)啟了日志,就不截圖了,直接看日志里,nginx查找的路徑:
D:/nginx/img/img/test.png" is not found (3: The system cannot find the path specified)
文件查找的路徑是D:/nginx/img(這是我配置的路徑),下面的img文件下的test.png文件
如果改成這樣:
location / { root html; index index.html index.htm; } location /img/ { root D:/nginx/img; index test.png; }
看看有沒(méi)有區(qū)別,重新啟動(dòng),在訪問(wèn)http://localhost/img試一下:
"D:/nginx/img/img/test.png" is not found (3: The system cannot find the path specified)
和之前沒(méi)什么區(qū)別,也就是兩個(gè)效果是一樣的,在瀏覽其中http://localhost/img和http://localhost/img/是一樣的。
再改一下,重啟:
location / { root html; index index.html index.htm; } location /img/ { root D:/nginx/img/; index test.png; }
我在重新訪問(wèn)一下:
"D:/nginx/img/img/test.png" is not found (3: The system cannot find the path specified)
還是一樣的效果。
所以如果是前綴字符串匹配,就不要糾結(jié)后面要不要加“/”的問(wèn)題。
另外從結(jié)果上看,確實(shí)符合規(guī)則,使用前綴最長(zhǎng)的匹配路徑。
規(guī)則:無(wú)“^~”, 最終使用正則匹配到的路徑,正則匹配不到,使用字符串前綴匹配最長(zhǎng)的
增加一個(gè)配置:
location /img/ { root D:/nginx/reg/; index test.png; }
重啟訪問(wèn):
"D:/nginx/img/img/test.png" is not found (3: The system cannot find the path specified)
結(jié)果發(fā)現(xiàn),找的還是D:/nginx/img的img文件夾的文件,好像正則沒(méi)有匹配上,改一下:
location /img { root D:/nginx/reg/; index test.png; }
這下一定可以匹配上了,重啟http://localhost/img測(cè)試:
"D:/nginx/img/img/test.png" is not found (3: The system cannot find the path specified)
無(wú)語(yǔ)了,為什么沒(méi)有按照規(guī)則來(lái)呢,為什么沒(méi)有查找D:/nginx/reg/路徑下的文件呢?
回到前面看一下官網(wǎng)說(shuō)明,發(fā)現(xiàn)正則表達(dá)式需要"~"或者"~*"指定才行,修改為下面的配置:
location ~* /img/ { root D:/nginx/reg/; index test.png; }
重啟訪問(wèn)http://localhost/img測(cè)試:
"D:/nginx/reg/img/test.png"
這下按照規(guī)則了,看東西看來(lái)還是要認(rèn)真看啊!
改一下正則表達(dá)式:
location ~* /img { root D:/nginx/reg/; index test.png; }
再重啟測(cè)試:
"D:/nginx/reg/img/test.png" is not found (3: The system cannot find the path specified)
也可以正常匹配,也就是說(shuō)正則匹配的情況下,最后一個(gè)/要不要都行,效果是一樣的
另外“~*” 不區(qū)分大小寫(xiě)和“~”就不用試,應(yīng)該都知道
3、精確匹配=號(hào)規(guī)則:精確匹配某個(gè)路徑,優(yōu)先級(jí)最高
增加一種配置:
location = /img/test.png { root D:/nginx/denghao/; index test.png; }
重啟訪問(wèn)路徑http://localhost/img/test.png:
"D:/nginx/denghao/img/test.png" failed (3: The system cannot find the path specified)
從結(jié)果看出,和規(guī)則一致;
改一下配置:
location = /img/ { root D:/nginx/wuhouzhui/; index test.png; }
測(cè)試結(jié)果:
"D:/nginx/reg/img/test.png" is not found (3: The system cannot find the path specified)
從結(jié)果上看,最終使用的匹配路徑是正則,至于 = /img/,有沒(méi)有匹配到,我也不清楚,總而言之,這種情況下使用的是正則的路徑,有知道朋友解釋一下=號(hào)有沒(méi)有匹配到。
4、提高前綴字符串的優(yōu)先級(jí)的“^~”規(guī)則:如果最長(zhǎng)匹配的前綴位置具有“^?”修飾符,則不會(huì)檢查正則表達(dá)式
因?yàn)橄人阉髌ヅ涞氖乔熬Y字符串,所有匹配到了,有這個(gè)修飾符就不檢查正則了,所以正則就不考慮了。
把配置改一下:
location ^~ /img/ { root D:/nginx/img/; index test.png; } location = /img/test.png { root D:/nginx/denghao/; index test.png; }
訪問(wèn)http://localhost/img/test.png測(cè)試:
"D:/nginx/denghao/img/test.png" failed (3: The system cannot find the path specified)
可以看到匹配結(jié)果是等號(hào)的路徑,所以=號(hào)的優(yōu)先級(jí)比^~高
5、總結(jié)搜索優(yōu)先級(jí):
精確匹配 > 字符串匹配( 長(zhǎng) > 短 [ 注: ^~ 匹配則停止匹配 ]) > 正則匹配( 上 > 下 )
使用優(yōu)先級(jí):
精確匹配 > (^~) > 正則匹配( 上 > 下 )>字符串(長(zhǎng) > 端)
剛學(xué)的,如果有錯(cuò)誤,請(qǐng)指出,我修改,別讓錯(cuò)誤誤導(dǎo)他人。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/39535.html
摘要:改為后,顯示出文件的大概大小,單位是或者或者默認(rèn)為,顯示的文件時(shí)間為時(shí)間。 這是 Nginx 學(xué)習(xí)總結(jié)的第三篇,上一篇介紹到了 Nginx 學(xué)習(xí)總結(jié)(2) —— 基本配置,這一篇會(huì)對(duì)Location 模塊 做一些總結(jié)。我們知道,Location 模塊 主要是用于針對(duì)某些特定的 URL 進(jìn)行配置,可以由前綴字符串定義,也可以由正則表達(dá)式定義。 Location 匹配規(guī)則 location...
摘要:深度學(xué)習(xí)篇一動(dòng)靜分離通過(guò)中間件將動(dòng)態(tài)請(qǐng)求和靜態(tài)請(qǐng)求進(jìn)行分離。原因分離資源,減少不必要的請(qǐng)求消耗,減少請(qǐng)求延時(shí)。關(guān)閉后,重定向會(huì)失效。驗(yàn)證規(guī)則保持一致。啟動(dòng),也會(huì)要求你輸入密碼。根據(jù)用戶(hù)的信息等信息區(qū)別根據(jù)用戶(hù)的地址實(shí)現(xiàn)灰度發(fā)布示意圖 Nginx-深度學(xué)習(xí)篇 一、動(dòng)靜分離 通過(guò)中間件將動(dòng)態(tài)請(qǐng)求和靜態(tài)請(qǐng)求進(jìn)行分離。原因:分離資源,減少不必要的請(qǐng)求消耗,減少請(qǐng)求延時(shí)。 動(dòng)態(tài)和靜態(tài)請(qǐng)求圖例:s...
摘要:深度學(xué)習(xí)篇一動(dòng)靜分離通過(guò)中間件將動(dòng)態(tài)請(qǐng)求和靜態(tài)請(qǐng)求進(jìn)行分離。原因分離資源,減少不必要的請(qǐng)求消耗,減少請(qǐng)求延時(shí)。關(guān)閉后,重定向會(huì)失效。驗(yàn)證規(guī)則保持一致。啟動(dòng),也會(huì)要求你輸入密碼。根據(jù)用戶(hù)的信息等信息區(qū)別根據(jù)用戶(hù)的地址實(shí)現(xiàn)灰度發(fā)布示意圖 Nginx-深度學(xué)習(xí)篇 一、動(dòng)靜分離 通過(guò)中間件將動(dòng)態(tài)請(qǐng)求和靜態(tài)請(qǐng)求進(jìn)行分離。原因:分離資源,減少不必要的請(qǐng)求消耗,減少請(qǐng)求延時(shí)。 動(dòng)態(tài)和靜態(tài)請(qǐng)求圖例:s...
摘要:本文同步在個(gè)人博客上,歡迎關(guān)注這篇文章整理了在前端開(kāi)發(fā)中,在開(kāi)發(fā)環(huán)境下使用重寫(xiě)及代理功能的方法。表示該規(guī)則是使用正則定義的,區(qū)分大小寫(xiě)。因此牢記在上下文中使用,而在上下文中使用。 本文同步在個(gè)人博客shymean.com上,歡迎關(guān)注 這篇文章整理了在前端開(kāi)發(fā)中,在開(kāi)發(fā)環(huán)境下使用nginx重寫(xiě)uri及代理功能的方法。 參考 nginx中文文檔 前端開(kāi)發(fā)者必備的 Nginx 知識(shí) Ngin...
摘要:以下列配置為例語(yǔ)法規(guī)則開(kāi)頭表示精確匹配開(kāi)頭表示以某個(gè)常規(guī)字符串開(kāi)頭,理解為匹配路徑即可表示區(qū)分大小寫(xiě)的正則匹配表示不區(qū)分大小寫(xiě)的正則匹配和分別為區(qū)分大小寫(xiě)不匹配及不區(qū)分大小寫(xiě)不匹配的正則通用匹配,任何請(qǐng)求都會(huì)匹配到。 以下列配置為例 server { listen 80; server_name jouypub.com; location ^~ ...
閱讀 1970·2021-11-17 09:33
閱讀 6617·2021-10-12 10:20
閱讀 2416·2021-09-22 15:50
閱讀 1939·2021-09-22 15:10
閱讀 849·2021-09-10 10:51
閱讀 790·2021-09-10 10:50
閱讀 3201·2021-08-11 11:19
閱讀 1873·2019-08-30 15:55