一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

云服務器|WEB服務器|FTP服務器|郵件服務器|虛擬主機|服務器安全|DNS服務器|服務器知識|Nginx|IIS|Tomcat|

服務器之家 - 服務器技術 - Nginx - Nginx處理請求時的匹配規則詳析

Nginx處理請求時的匹配規則詳析

2020-03-12 14:13Abyssknight Nginx

這篇文章主要給大家介紹了關于Nginx處理請求時的匹配規則的相關資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用Nginx具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧

nginx 在收到一條請求時將先通過 server_name 匹配一個 server, 然后使用 server 中的 location 繼續匹配.

匹配 server_name

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

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

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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;
}

在上面的配置中, 默認的服務器為 第一個, 隨便訪問一個不存在的 server 將會返回 401. 不過可以使用 default_server 手動設置一個默認主機, default_server 設置在 listen 字段, 如下:

?
1
2
3
4
server {
 listen 80 default_server;
 server_name example.net www.example.net;
}

之后再匹配時, 未匹配到將會使用這個 server.

禁止訪問

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

?
1
2
3
4
5
server {
 listen 80;
 server_name "";
 return 444;
}

server_name 定義為空字符串, 如果 Host 字段為空或不存在, 將會匹配到這個 server, 然后返回 404 狀態碼.

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

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

?
1
2
3
4
5
server {
 listen 80 default_server;
 server_name _;
 return 444;
}

_ 在這里沒有任何特別含義, 因為一個域名中不會出現 _, 所以不會與任何真實的域名相同, 使用其他非法字符是相同的道理.

同時匹配 IP 和 server_name

現在來看一下對于監聽不同 IP 和不同 server_name 混合使用時是如何處理的:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
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;
}

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
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 匹配到一個 server 后, 就會通過 location 繼續處理請求, 下面是一個示例:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
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 首先會在所有的 location 中搜索 前綴進行匹配, 匹配到前綴后, 將按順序匹配使用 正則表達式 定義的 location, 匹配到就結束, 如果沒有匹配到, 則使用之前匹配到前綴的那個 location 進行處理, 下面是具體匹配的例子:

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

參考

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對服務器之家的支持。

原文鏈接:https://juejin.im/post/5ddba048f265da7dcc7e5954

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 色婷婷久久综合中文久久一本 | 99ri精品| 亚洲一区二区三区免费视频 | 国产精品久久久久一区二区三区 | 美女脱了内裤打开腿让你桶爽 | 国产成人永久免费视 | 卫生间被教官做好爽HH视频 | 四虎影视在线看免费 720p | 国产精品免费视频能看 | 歪歪视频在线播放无遮挡 | 天天插综合网 | 大杳蕉在线影院在线播放 | 福利一区在线观看 | 52av我爱avhaose01 51香蕉视频 | 午夜性爽视频男人的天堂在线 | 草莓香蕉绿巨人丝瓜榴莲污在线观看 | 激情艳妇 | 亚洲精品一二三四区 | 和岳m的小说 | 日本免费v片一二三区 | 毛片在线免费视频 | 国内视频一区二区 | 黑人女性猛交xxxxxⅹxx | 日本护士xxxx爽爽爽 | 97色吧| 91制片厂制作果冻传媒2021 | 日韩精选视频 | 日本一区二区三区视频在线观看 | 日本熟hdx| 亚洲欧美另类专区 | 国产精品短视频 | 欧美日韩中文字幕在线视频 | 99成人免费视频 | 99久久精品国产免费 | 精品国产成a人在线观看 | 国产精品不卡高清在线观看 | 亚洲欧美日韩天堂在线观看 | 精品国产福利一区二区在线 | 国语自产自拍秒拍在线视频 | 日韩欧美一区二区三区 | 小SAO货边洗澡边CAO你动漫 |