最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Nginx處理請求時(shí)的匹配規(guī)則詳析

 更新時(shí)間:2019年11月27日 09:09:50   作者:Abyssknight  
這篇文章主要給大家介紹了關(guān)于Nginx處理請求時(shí)的匹配規(guī)則的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用Nginx具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧

nginx 在收到一條請求時(shí)將先通過 server_name 匹配一個(gè) server, 然后使用 server 中的 location 繼續(xù)匹配.

匹配 server_name

在 nginx 中, server_name 決定了當(dāng)收到一個(gè)請求后哪一個(gè) server 會(huì)被使用. nginx 會(huì)使用請求頭中的 Host 字段與 server_name 進(jìn)行匹配. 定義 server_name 時(shí)可以使用 完全名稱、通配符名稱、正則表達(dá)式名稱, 它們的匹配順序如下:

  • 完全匹配
  • 前通配符匹配, 即 *.example.org
  • 后通配符匹配, 即 mail.*
  • 正則表達(dá)式匹配

如果沒有匹配到結(jié)果, 將會(huì)使用 default_server 進(jìn)行處理, 如果沒有定義, 則第一個(gè)定義的為 default_server. 使用三個(gè)簡單的 server 作為例子, 讓他們監(jiān)聽 80 端口, server_name 分別設(shè)置為 *.org、*.net、*.com:

server {
 listen 80;
 server_name example.org www.example.org;
 return 401;
}

server {
 listen 80;
 server_name example.net www.example.net;
 return 402;
}

server {
 listen 80;
 server_name example.com www.example.com;
 return 403;
}

在上面的配置中, 默認(rèn)的服務(wù)器為 第一個(gè), 隨便訪問一個(gè)不存在的 server 將會(huì)返回 401. 不過可以使用 default_server 手動(dòng)設(shè)置一個(gè)默認(rèn)主機(jī), default_server 設(shè)置在 listen 字段, 如下:

server {
 listen 80 default_server;
 server_name example.net www.example.net;
}

之后再匹配時(shí), 未匹配到將會(huì)使用這個(gè) server.

禁止訪問

如果想要禁止一個(gè)沒有攜帶 Host 字段的請求, 可以定義如下 server:

server {
 listen 80;
 server_name "";
 return 444;
}

server_name 定義為空字符串, 如果 Host 字段為空或不存在, 將會(huì)匹配到這個(gè) server, 然后返回 404 狀態(tài)碼.

Nginx 的444 狀態(tài)比較特殊,如果返回 444 那么客戶端將不會(huì)收到服務(wù)端返回的信息,就像是網(wǎng)站無法連接一樣, 瀏覽器直接顯示 502. 但是如果使用反向代理, 還是顯示正常狀態(tài)碼

如果想要禁止訪問不存在的主機(jī), 可以這樣定義:

server {
 listen 80 default_server;
 server_name _;
 return 444;
}

_ 在這里沒有任何特別含義, 因?yàn)橐粋€(gè)域名中不會(huì)出現(xiàn) _, 所以不會(huì)與任何真實(shí)的域名相同, 使用其他非法字符是相同的道理.

同時(shí)匹配 IP 和 server_name

現(xiàn)在來看一下對于監(jiān)聽不同 IP 和不同 server_name 混合使用時(shí)是如何處理的:

server {
 listen 192.168.1.1:80;
 server_name example.org www.example.org;
}

server {
 listen 192.168.1.1:80;
 server_name example.net www.example.net;
}

server {
 listen 192.168.1.2:80;
 server_name example.com www.example.com;
}

在這個(gè)配置中, nginx 首先匹配 IP, 匹配到后再匹配它們的 server_name, 如果沒有匹配到 server_name, 則使用到它們默認(rèn)的 server. 舉個(gè)例子, 如果一個(gè)域名為 www.example.com 的請求來自 192.168.1.1:80. 但是監(jiān)聽 192.168.1.1:80 的 server 只有兩個(gè), 這兩個(gè)都不能匹配 www.example.com, 那么就使用這兩個(gè) server 中的默認(rèn)主機(jī), 由于沒有使用 defualt_server 定義監(jiān)聽, 所以默認(rèn)為第一個(gè)即 www.example.org 這個(gè) server. 當(dāng)然你可以定義 defualt_server:

server {
 listen 192.168.1.1:80;
 server_name example.org www.example.org;
}

server {
 listen 192.168.1.1:80 default_server;
 server_name example.net www.example.net;
}

server {
 listen 192.168.1.2:80 default_server;
 server_name example.com www.example.com;
}

匹配 location

在 nginx 匹配到一個(gè) server 后, 就會(huì)通過 location 繼續(xù)處理請求, 下面是一個(gè)示例:

server {
 listen 172.17.0.3:80;
 server_name _;

 location / {
 return 401;
 }

 location ~*\.(gif|jpg|png)$ {
 return 402;
 }
 
 location ~*\.(gif|jpg|png)$ {
 return 404;
 }

 location /api {
 return 403;
 }
}

nginx 首先會(huì)在所有的 location 中搜索 前綴進(jìn)行匹配, 匹配到前綴后, 將按順序匹配使用 正則表達(dá)式 定義的 location, 匹配到就結(jié)束, 如果沒有匹配到, 則使用之前匹配到前綴的那個(gè) location 進(jìn)行處理, 下面是具體匹配的例子:

  • 一個(gè) /x.gif 請求, 首先匹配到的前綴為 /, 然后使用剩下的 x.gif 跟 location 的正則去匹配, 先匹配到了 location ~*\.(gif|jpg|png)$, 返回 402.
  • 一個(gè) /x.pdf 請求, 由于 x.pdf 無法被匹配到, 所以使用 location / 進(jìn)行處理.
  • 一個(gè) /api/x.gif, 首先匹配到前綴為 /api, 然后使用剩下的 x.gif 跟 location 的正則去匹配, 先匹配到了 location ~*\.(gif|jpg|png)$, 返回 402.
  • 一個(gè) /api/x.pdf 請求, 由于 x.pdf 無法被匹配到, 所以使用 location /api 進(jìn)行處理.

參考

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對腳本之家的支持。

相關(guān)文章

  • Nginx配置文件解析

    Nginx配置文件解析

    Nginx 是一款常用的 Web 服務(wù)器軟件,其配置文件用于指定服務(wù)器的行為和功能,本文將給大家詳細(xì)的解析Nginx配置文件,文中有相關(guān)的代碼示例供大家參考,需要的朋友可以參考下
    2023-09-09
  • Nginx Proxy緩存的具體實(shí)現(xiàn)

    Nginx Proxy緩存的具體實(shí)現(xiàn)

    本文主要介紹了Nginx Proxy緩存的具體實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-08-08
  • Nginx、Tomcat等項(xiàng)目部署問題以及解決流程

    Nginx、Tomcat等項(xiàng)目部署問題以及解決流程

    本文總結(jié)了項(xiàng)目部署中常見的 four 類問題及其解決方法:Nginx 未按預(yù)期顯示結(jié)果、端口未開啟、日志分析的重要性以及開發(fā)環(huán)境與生產(chǎn)環(huán)境運(yùn)行結(jié)果不一致的問題,通過提供詳細(xì)的解決方案和思路,希望開發(fā)者能夠更好地應(yīng)對部署過程中的挑戰(zhàn),確保項(xiàng)目順利上線
    2024-12-12
  • nginx配置教程之a(chǎn)dd_header的坑詳解

    nginx配置教程之a(chǎn)dd_header的坑詳解

    這篇文章主要給大家介紹了關(guān)于nginx配置教程之a(chǎn)dd_header坑的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-02-02
  • nginx反向代理導(dǎo)致session失效的問題解決

    nginx反向代理導(dǎo)致session失效的問題解決

    這篇文章主要介紹了nginx反向代理導(dǎo)致session失效的問題解決,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-06-06
  • nginx 平滑重啟與升級的實(shí)現(xiàn)方法

    nginx 平滑重啟與升級的實(shí)現(xiàn)方法

    有時(shí)候我們需要平滑重啟nginx服務(wù),防止出現(xiàn)問題,這里簡單的總結(jié),方便需要的朋友
    2013-02-02
  • 詳解Nginx 出現(xiàn) 403 Forbidden 的解決辦法

    詳解Nginx 出現(xiàn) 403 Forbidden 的解決辦法

    本篇文章主要介紹了詳解Nginx 出現(xiàn) 403 Forbidden 的解決辦法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-08-08
  • nginx搭建文件服務(wù)器的詳細(xì)過程

    nginx搭建文件服務(wù)器的詳細(xì)過程

    這篇文章主要介紹了nginx搭建文件服務(wù)器,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-06-06
  • Nginx+Tomcat集群環(huán)境的實(shí)現(xiàn)

    Nginx+Tomcat集群環(huán)境的實(shí)現(xiàn)

    本文主要介紹了配置Nginx和Tomcat集群環(huán)境,包括負(fù)載均衡、故障轉(zhuǎn)移以及配置單機(jī)應(yīng)用和Tomcat集群的具體步驟, 感興趣的可以了解一下
    2024-11-11
  • Nginx平滑升級的詳細(xì)操作方法

    Nginx平滑升級的詳細(xì)操作方法

    這篇文章主要介紹了Nginx平滑升級的詳細(xì)操作方法,適應(yīng)編譯安裝ningx的情況,yum安裝的直接用yum更新即可,需要的朋友可以參考下
    2014-03-03

最新評論

高邮市| 边坝县| 宜兴市| 南岸区| 三亚市| 萍乡市| 青海省| 成都市| 壤塘县| 广南县| 龙南县| 海阳市| 平罗县| 日喀则市| 崇信县| 栾城县| 栾城县| 文登市| 大丰市| 刚察县| 盖州市| 秭归县| 拜泉县| 柘城县| 扎兰屯市| 那坡县| 通许县| 于田县| 东兰县| 宣威市| 海淀区| 垦利县| 腾冲县| 孟津县| 阳谷县| 仙桃市| 沅陵县| 南昌市| 商南县| 孟连| 元氏县|