詳解Nginx如何根據(jù)swagger關(guān)鍵字屏蔽頁面
一、知識回顧
1.什么是 location
Nginx 中通過根據(jù) location
塊的規(guī)則來將匹配到的 URL 請求進(jìn)行一系列操作,最常見的就是進(jìn)行代理。Nginx 中一個 Server 可以有多個 location 配置,當(dāng)請求在與多個 location 匹配時,會根據(jù)一定的 location 匹配規(guī)則和優(yōu)先級來確定具體將請求分發(fā)到哪個 location。
2.location 語法
# |指令| |前綴| |匹配的網(wǎng)站網(wǎng)址| |匹配URI之后要執(zhí)行的配置段| location [=|^~|~|~*] /uri/ { ... }
3.location 的匹配規(guī)則
匹配規(guī)則 | 說明 |
---|---|
沒有前綴 | 普通匹配(遵循最大前綴匹配規(guī)則)。 |
= | 精確(嚴(yán)格)匹配。 |
~ | 區(qū)分大小寫的正則匹配。 |
~* | 不區(qū)分大小寫的正則匹配。 |
^~ | 匹配 URI 以某個常規(guī)字符串開頭,^ 為正則表達(dá)式中的開頭。 |
!~ | 區(qū)分大小寫不匹配的正則。 |
!~* | 不區(qū)分大小寫不匹配的正則。 |
/ | 通用匹配,任何請求都會匹配到。 |
由此我們可以根據(jù)是否按照正則匹配將 location 的匹配規(guī)則劃分為兩類:
- 普通location: 包括
沒有前綴
、=
、^~
、@
四種。其中@
時用作服務(wù)內(nèi)部的一種轉(zhuǎn)發(fā)行為,很少用。 - 正則location: 包括
~
、~*
、!~
、!~*
四種。
4.優(yōu)先級排序
具體的匹配順序生效規(guī)則如下:
- 普通 location 與正則 location 之間的匹配:選擇出 “普通 location” 的最大前綴匹配結(jié)果后,還需要繼續(xù)搜索正則 location。如果繼續(xù)搜索的 “正則 location” 也有匹配上的,那么 “正則 location” 覆蓋 “普通 location” 的最大前綴匹配。
- 普通 location 之間:最大前綴匹配。
- 正則 location 之間:按照正則 location 在配置文件中的物理順序(編輯順序)匹配,并且只要匹配到一條正則 location,就不再考慮后面的。
- 以上 “普通 location” 指的是 沒有前綴 和 @,= 和 ^~ 在匹配到結(jié)果后就不再需要繼續(xù)匹配 “正則 location” 了(^ 表示 “非”,~ 表示 “正則”,字符意思是:不要繼續(xù)匹配正則)。
- = 和 ^~ 共同點:都可以阻止繼續(xù)匹配 “正則 location”。
- = 和 ^~ 不同點:^~ 依然遵守 “最大前綴” 匹配規(guī)則,然而 = 不是 “最大前綴”,而是必須是嚴(yán)格匹配(exact match)。
所有類型location存在時,優(yōu)先級排序為:
=
匹配 > ^~
匹配(不是用正則,最大前綴匹配) > 正則匹配 > 沒有前綴(最大前綴匹配) > 默認(rèn)(/)
location / {} 和 location = / {} 的區(qū)別:
- location / {} 遵守普通 location 的最大前綴匹配,由于任何 URI 都必然以 / 根開頭,所以對于一個 URI,如果有更 specific 的匹配,那自然是選這個更 specific 的,如果沒有,/ 一定能為這個 URI 點背(至少能匹配到 /)。也就是說,location / {} 有默認(rèn)配置的意思,其他更 specific 的配置能 orverwrite 這個默認(rèn)配置(這也是為什么我們總能看到 location / {} 這個配置的原因)。
- location = / {} 遵守的是 “嚴(yán)格精確匹配 exact match”,也就是只能匹配 http://host:port/ 請求,同時會禁止繼續(xù)搜索正則 location。因此如果我們只想對 “GET /” 請求配置作用指令,那么我們可以選 location = / {},這樣能減少正則 location 的搜索,因此效率比 location / {} 高(注:前提是我們的目的僅僅只想對 “GET /” 起作用)。
二、如何根據(jù)關(guān)鍵字篩選請求
1.實現(xiàn)方案
可以利用以下四種匹配規(guī)則實現(xiàn):
匹配規(guī)則 | 說明 |
---|---|
~ | 區(qū)分大小寫的正則匹配。 |
~* | 不區(qū)分大小寫的正則匹配。 |
!~ | 區(qū)分大小寫不匹配的正則。 |
!~* | 不區(qū)分大小寫不匹配的正則。 |
例如,我想根據(jù) swagger 關(guān)鍵字進(jìn)行篩選,將帶有 swagger 的請求全部攔截,我們可以這么實現(xiàn):
location ~* swagger { return 404; }
2.測試結(jié)果
訪問地址:http://localhost:8081/swagger-ui.html
整理完畢!
參考地址:
1.Nginx之location匹配規(guī)則,https://www.cnblogs.com/gaoyanbing/p/16915446.html
到此這篇關(guān)于詳解Nginx如何根據(jù)swagger關(guān)鍵字屏蔽頁面的文章就介紹到這了,更多相關(guān)Nginx swagger屏蔽頁面內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
樹莓派如何搭建web服務(wù)器(nginx?+php?+?mysql?+?vsftpd?+phpmyadmin)
本文介紹如何使用樹莓派搭建Web服務(wù)器,包括安裝Nginx、PHP、MySQL、ftp和phpMyAdmin,步驟詳盡,涵蓋不同架構(gòu)的PHP安裝,提供了配置MySQL遠(yuǎn)程訪問和管理數(shù)據(jù)庫的方法,是搭建個人Web服務(wù)器的實用指南2024-11-11解決Nginx無法啟動 -10013: An attempt was
這篇文章主要給大家介紹了解決用nginx -t 發(fā)成Nginx無法啟動報錯10013: An attempt was made to access a socket in a way forbidden by its access permissions的問題,需要的朋友可以參考下2023-11-11Nginx中的用戶認(rèn)證配置及阻止用戶使用代理訪問的方法
這篇文章主要介紹了Nginx中的用戶認(rèn)證配置及阻止用戶使用代理訪問的方法,用戶認(rèn)證部分用到了自帶的ngx_http_auth_basic_module模塊,需要的朋友可以參考下2016-01-01