国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

在nginx location中用alias代理文件

MockingBird / 1968人閱讀

摘要:最終代理路徑是路徑部分和瀏覽器輸入的未匹配到的部分。其中只有,直接返回。瀏覽器因此,代理目錄時,還是正則匹配的話,是無法訪問到這個目錄下的各個文件的。關于既想用又想能代理到某目錄下各個文件的解決辦法方案方案用結合代替

介紹nginx中location塊的匹配符(~, ~*, ^~, [space]等)與alias文件代理的關系

實驗環境
靜態資源目錄

E: /static

a.js

b.js

/case/

c.js

d.js

e.js

nginx server塊
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是前綴匹配^~或者[space]時

這種情況如果出錯,一般就是由于對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是正則匹配~, ~*時
    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

相關文章

  • 開發環境下使用nginx重寫uri及代理功能

    摘要:本文同步在個人博客上,歡迎關注這篇文章整理了在前端開發中,在開發環境下使用重寫及代理功能的方法。表示該規則是使用正則定義的,區分大小寫。因此牢記在上下文中使用,而在上下文中使用。 本文同步在個人博客shymean.com上,歡迎關注 這篇文章整理了在前端開發中,在開發環境下使用nginx重寫uri及代理功能的方法。 參考 nginx中文文檔 前端開發者必備的 Nginx 知識 Ngin...

    LMou 評論0 收藏0
  • 前端培訓-初級階段-場景實戰(2019-06-13)-Nginx代理正確食用方式

    摘要:前端最基礎的就是。我這邊預期準備進入中級階段,中間還是會穿插一些實戰。語法精確匹配,匹配成功,則停止搜索正則不能有嵌套的。指令會根據在配置文件中出現的順序依次執行,可以使用來終止接下來的處理。如果以或者或者,則停止處理,立刻重定向。 前端最基礎的就是 HTML+CSS+Javascript。掌握了這三門技術就算入門,但也僅僅是入門,現在前端開發的定義已經遠遠不止這些。前端小課堂(HTM...

    Harpsichord1207 評論0 收藏0
  • 前端培訓-初級階段-場景實戰(2019-06-13)-Nginx代理正確食用方式

    摘要:前端最基礎的就是。我這邊預期準備進入中級階段,中間還是會穿插一些實戰。語法精確匹配,匹配成功,則停止搜索正則不能有嵌套的。指令會根據在配置文件中出現的順序依次執行,可以使用來終止接下來的處理。如果以或者或者,則停止處理,立刻重定向。 前端最基礎的就是 HTML+CSS+Javascript。掌握了這三門技術就算入門,但也僅僅是入門,現在前端開發的定義已經遠遠不止這些。前端小課堂(HTM...

    seanHai 評論0 收藏0
  • Nginx反向代理解決前后端聯調跨域問題

    摘要:反向代理前后端聯調跨域什么是跨域跨域,指的是瀏覽器不能執行其他網站的腳本。這時候,用反向代理實現跨域,是最簡單的跨域方式。 keywords: Nginx反向代理 前后端聯調 跨域 1.什么是跨域 跨域,指的是瀏覽器不能執行其他網站的腳本。它是由瀏覽器的同源策略造成的,是瀏覽器對javascript施加的安全限制。 所謂同源是指,域名,協議,端口都相同。瀏覽器執行javascrip...

    QiuyueZhong 評論0 收藏0
  • Nginxalias 和 root的區別)

    摘要:和的區別和的區別訪問一個文件時,顯示的路徑是訪問一個文件時,顯示的路徑是也就是差異在沒顯示后面的路徑想要獲取用戶的真實因為經過多層代理后,用戶的真實會被代理覆蓋掉的,所以在第一個代理服務器中設置并在最后一個代理服務器獲取這樣就可以直接在里執 Nginx(alias 和 root的區別)1.alias 和 root 的區別: location /request_path/image { ...

    Lyux 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<