日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

nginx中的location指令

發布時間:2025/3/8 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 nginx中的location指令 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1、location 介紹

location是Nginx中的塊級指令(block directive),location指令的功能是用來匹配不同的url請求,進而對請求做不同的處理和響應,這其中較難理解的是多個location的匹配順序,本文會作為重點來解釋和說明。

開始之前先明確一些約定,我們輸入的網址叫做請求URI,nginx用請求URI與location中配置的URI做匹配。

2、localtion 語法

location有兩種匹配規則:

  • 匹配URL類型,有四種參數可選,當然也可以不帶參數。

    location [ = | ~ | ~* | ^~ ] uri { … }

  • 命名location,用@標識,類似于定于goto語句塊。

    location @name { … }

location匹配參數解釋:

(1)?“=”?,精確匹配

  • 內容要同表達式完全一致才匹配成功

location = /abc/ {.....}# 只匹配http://abc.com/abc #http://abc.com/abc [匹配成功] #http://abc.com/abc/index [匹配失敗]

(2)?“~”,執行正則匹配,區分大小寫。

location ~ /Abc/ {..... } #http://abc.com/Abc/ [匹配成功] #http://abc.com/abc/ [匹配失敗]

(3)“~*”,執行正則匹配,忽略大小寫

location ~* /Abc/ {..... } # 則會忽略 uri 部分的大小寫 #http://abc.com/Abc/ [匹配成功] #http://abc.com/abc/ [匹配成功]

(4)“^~”,表示普通字符串匹配上以后不再進行正則匹配。

location ^~ /index/ {..... } #以 /index/ 開頭的請求,都會匹配上 #http://abc.com/index/index.page [匹配成功] #http://abc.com/error/error.page [匹配失敗]

(5)不加任何規則

  • 不加任何規則時,默認是大小寫敏感,前綴匹配,相當于加了“~”與“^~”

location /index/ {...... } #http://abc.com/index [匹配成功] #http://abc.com/index/index.page [匹配成功] #http://abc.com/test/index [匹配失敗] #http://abc.com/Index [匹配失敗] # 匹配到所有uri

(6)“@”,nginx內部跳轉

location /index/ {error_page 404 @index_error; } location @index_error {..... } #以 /index/ 開頭的請求,如果鏈接的狀態為 404。則會匹配到 @index_error 這條規則上。

3、location匹配順序

=?>?^~?>?~ | ~*?>?最長前綴匹配?>?/

序號越小優先級越高

  • location = ? ?# 精準匹配

  • location ^~ ? # 帶參前綴匹配

  • location ~ ? ?# 正則匹配(區分大小寫)

  • location ~* ? # 正則匹配(不區分大小寫)

  • location /a ? # 普通前綴匹配,優先級低于帶參數前綴匹配。

  • location / ? ?# 任何沒有匹配成功的,都會匹配這里處理

  • 舉例

    location = / { #規則A }location = /login { #規則B }location ^~ /static/ { #規則C }location ~ \.(gif|jpg|png|js|css)$ { #規則D }location ~* \.png$ { #規則E }location !~ \.xhtml$ { #規則F }location !~* \.xhtml$ { #規則G }location / { #規則H }

    匹配結果:

    訪問根目錄/, 比如http://localhost/ 將匹配規則A訪問 http://localhost/login 將匹配規則B,http://localhost/register 則匹配規則H訪問 http://localhost/static/a.html 將匹配規則C訪問 http://localhost/b.jpg 將匹配規則D和規則E,但是規則D順序優先,規則E不起作用, 而 http://localhost/static/c.png 則優先匹配到 規則C訪問 http://localhost/a.PNG 則匹配規則E, 而不會匹配規則D,因為規則E不區分大小寫。訪問 http://localhost/a.xhtml 不會匹配規則F和規則G,http://localhost/a.XHTML不會匹配規則G,因為不區分大小寫。規則F,規則G屬于排除法,符合匹配規則但是不會匹配到。訪問 http://localhost/qll/id/1111 則最終匹配到規則H,因為以上規則都不匹配。

    4、location URI結尾帶不帶 /

  • 如果 URI 結構是 https://domain.com/ 的形式,尾部有沒有 / 都不會造成重定向。因為瀏覽器在發起請求的時候,默認加上了 / 。雖然很多瀏覽器在地址欄里也不會顯示 / 。這一點,可以訪問百度驗證一下。

  • 如果 URI 的結構是 https://domain.com/some-dir/ 。尾部如果缺少 / 將導致重定向。因為約定,URL 尾部的 / 表示目錄,沒有 / 表示文件。所以訪問 /some-dir/ 時,服務器會自動去該目錄下找對應的默認文件。如果訪問 /some-dir 的話,服務器會先去找 some-dir 文件,找不到的話會將 some-dir 當成目錄,重定向到 /some-dir/ ,去該目錄下找默認文件。

  • 舉個例子:

    server {listen 9001;server_name www.abc.com;location ~ /edu {proxy_pass http://127.0.0.1:8080;}}

    我們訪問www.abc.com:9001/edu,看下效果

    訪問 /edu 時,服務器首先去找edu文件,找不到則將edu當做目錄,重定向到 /edu/,在該目錄下找默認文件。

    但是如果想這兩種請求對應不同的處理,就要明確增加不帶/結尾的location配置。例如:

    location /doc {proxy_pass http://www.doc123.com } location /doc/ {proxy_pass http://www.doc456.com }

    總結

    以上是生活随笔為你收集整理的nginx中的location指令的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。