摘要:最終代理路徑是路徑部分和瀏覽器輸入的未匹配到的部分。其中只有,直接返回。瀏覽器因此,代理目錄時(shí),還是正則匹配的話,是無(wú)法訪問(wèn)到這個(gè)目錄下的各個(gè)文件的。關(guān)于既想用又想能代理到某目錄下各個(gè)文件的解決辦法方案方案用結(jié)合代替
介紹nginx中l(wèi)ocation塊的匹配符(~, ~*, ^~, [space]等)與alias文件代理的關(guān)系
實(shí)驗(yàn)環(huán)境E: /static
a.js
b.js
/case/
c.js
d.js
e.js
server { listen 80; server_name 127.0.0.1; }alias代理特定文件
僅僅代理一個(gè)特定的文件,基本上很少會(huì)出錯(cuò),
location塊是前綴匹配和正則匹配均可。
如下,瀏覽器訪問(wèn)http://127.0.0.1/static/case/... 都返回c.js的內(nèi)容。
location /static/case/c.js { alias E:/static/case/c.js; }
location ~ /static/case/c.js { alias E:/static/case/c.js; }alias代理某目錄下的各個(gè)文件
但當(dāng)需要代理一個(gè)目錄下的各個(gè)文件時(shí),會(huì)因location塊是前綴匹配和正則匹配的不同,導(dǎo)致代理的結(jié)果不同。
尤其是location是正則匹配時(shí),較為特殊,容易出錯(cuò)。
這種情況如果出錯(cuò),一般就是由于對(duì)location URI部分和alias部分最后加不加“/”犯糊涂導(dǎo)致的,
或者說(shuō)是不清楚這種情況下最終代理到什么path導(dǎo)致的。
// case1 location /static/case/ { alias E:/static/case/; autoindex on; }
// case2 location /static/case { alias E:/static/case/; autoindex on; }
case3 location /static/case/ { alias E:/static/case; autoindex on; }
case4 location /static/case { alias E:/static/case; autoindex on; }
以上四種情況,瀏覽器輸入:http://127.0.0.1/static/case/... 只有第三種失敗。
如果在這四種情況的location前面都加上 ^~ 結(jié)果也是一樣的,因?yàn)?^~ 和[space]都是前綴匹配。
**最終代理路徑是: alias路徑 + location部分URI和瀏覽器輸入的URL未匹配到的部分。
這個(gè)路徑下有文件,就200,沒(méi)有文件,就404。**
所以分析一下為什么第三種寫法不能正確代理呢,
瀏覽器URL: http://127.0.0.1/static/case/...,
location:/static/case/,
因此兩個(gè)URL匹配部分是/static/case/,
未匹配部分是c.js。
因此它最終代理的path是:E:/static/case + c.js = E:/static/casec.js,相當(dāng)于找static目錄下有沒(méi)有casec.js文件,因?yàn)闆](méi)這個(gè)文件,所以404。
location ~ /static/case/ { alias E:/static/case/; autoindex on; }
瀏覽器URL1:http://127.0.0.1/static/case/...
瀏覽器URL2:http://127.0.0.1/static/case/...
瀏覽器URL3:http://127.0.0.1/static/case/...
瀏覽器URL4:http://127.0.0.1/static/case/,
結(jié)果都是一樣的,返回/static/case目錄。
其中只有URL4,直接200返回。URL1-3都是301->200。
重定向不是無(wú)限的,當(dāng)瀏覽器URL case后的層級(jí)大于10時(shí),就不再301->200,而是直接200返回。
即,瀏覽器URL5,直接200返回。代理到/static/case目錄。
瀏覽器URL5:http://127.0.0.1/static/case/...
因此,代理目錄時(shí),location還是正則匹配的話,是無(wú)法訪問(wèn)到這個(gè)目錄下的各個(gè)文件的。
解決辦法有兩個(gè)。
關(guān)于既想用~又想能代理到某目錄下各個(gè)文件的解決辦法: //方案1 location ~ ^/(.+)/(.+)/(.+.js)$ { alias E:/static/case/$3; } //方案2、用root結(jié)合rewrite代替 location ~ ^/.+/.+/.+.js$ { root E:/; rewrite ^/(.*) /$1 break; }
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/40240.html
摘要:本文同步在個(gè)人博客上,歡迎關(guān)注這篇文章整理了在前端開發(fā)中,在開發(fā)環(huán)境下使用重寫及代理功能的方法。表示該規(guī)則是使用正則定義的,區(qū)分大小寫。因此牢記在上下文中使用,而在上下文中使用。 本文同步在個(gè)人博客shymean.com上,歡迎關(guān)注 這篇文章整理了在前端開發(fā)中,在開發(fā)環(huán)境下使用nginx重寫uri及代理功能的方法。 參考 nginx中文文檔 前端開發(fā)者必備的 Nginx 知識(shí) Ngin...
摘要:前端最基礎(chǔ)的就是。我這邊預(yù)期準(zhǔn)備進(jìn)入中級(jí)階段,中間還是會(huì)穿插一些實(shí)戰(zhàn)。語(yǔ)法精確匹配,匹配成功,則停止搜索正則不能有嵌套的。指令會(huì)根據(jù)在配置文件中出現(xiàn)的順序依次執(zhí)行,可以使用來(lái)終止接下來(lái)的處理。如果以或者或者,則停止處理,立刻重定向。 前端最基礎(chǔ)的就是 HTML+CSS+Javascript。掌握了這三門技術(shù)就算入門,但也僅僅是入門,現(xiàn)在前端開發(fā)的定義已經(jīng)遠(yuǎn)遠(yuǎn)不止這些。前端小課堂(HTM...
摘要:前端最基礎(chǔ)的就是。我這邊預(yù)期準(zhǔn)備進(jìn)入中級(jí)階段,中間還是會(huì)穿插一些實(shí)戰(zhàn)。語(yǔ)法精確匹配,匹配成功,則停止搜索正則不能有嵌套的。指令會(huì)根據(jù)在配置文件中出現(xiàn)的順序依次執(zhí)行,可以使用來(lái)終止接下來(lái)的處理。如果以或者或者,則停止處理,立刻重定向。 前端最基礎(chǔ)的就是 HTML+CSS+Javascript。掌握了這三門技術(shù)就算入門,但也僅僅是入門,現(xiàn)在前端開發(fā)的定義已經(jīng)遠(yuǎn)遠(yuǎn)不止這些。前端小課堂(HTM...
摘要:反向代理前后端聯(lián)調(diào)跨域什么是跨域跨域,指的是瀏覽器不能執(zhí)行其他網(wǎng)站的腳本。這時(shí)候,用反向代理實(shí)現(xiàn)跨域,是最簡(jiǎn)單的跨域方式。 keywords: Nginx反向代理 前后端聯(lián)調(diào) 跨域 1.什么是跨域 跨域,指的是瀏覽器不能執(zhí)行其他網(wǎng)站的腳本。它是由瀏覽器的同源策略造成的,是瀏覽器對(duì)javascript施加的安全限制。 所謂同源是指,域名,協(xié)議,端口都相同。瀏覽器執(zhí)行javascrip...
摘要:和的區(qū)別和的區(qū)別訪問(wèn)一個(gè)文件時(shí),顯示的路徑是訪問(wèn)一個(gè)文件時(shí),顯示的路徑是也就是差異在沒(méi)顯示后面的路徑想要獲取用戶的真實(shí)因?yàn)榻?jīng)過(guò)多層代理后,用戶的真實(shí)會(huì)被代理覆蓋掉的,所以在第一個(gè)代理服務(wù)器中設(shè)置并在最后一個(gè)代理服務(wù)器獲取這樣就可以直接在里執(zhí) Nginx(alias 和 root的區(qū)別)1.alias 和 root 的區(qū)別: location /request_path/image { ...
閱讀 5072·2021-09-07 09:58
閱讀 797·2019-08-30 15:55
閱讀 2935·2019-08-30 15:55
閱讀 927·2019-08-30 15:53
閱讀 1562·2019-08-29 12:57
閱讀 1829·2019-08-26 13:46
閱讀 571·2019-08-26 11:00
閱讀 3668·2019-08-23 15:42