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