前言
最近幫客戶配置服務器,經常修改Nginx的配置文件,頻繁的用到正式匹配規則,這裡整理了一些常用的正則參數及規則,以備查詢。
Nginx配置中Location的語法規則 location [ = | ~ | ~* | ^~ | !~ | !~* ] /uri/{ … }
= 表示精確匹配
~ 表示區分大小寫正則匹配
~* 表示不區分大小寫正則匹配
^~ 表示URI以某個常規字符串開頭
!~ 表示區分大小寫正則不匹配
!~* 表示不區分大小寫正則不匹配
/ 通用匹配,任何請求都會匹配到
匹配順序
多個location配置的情況下匹配順序為:
首先匹配 =
其次匹配 ^~
其次是按文件中順序的正則匹配
最後是交給 / 通用匹配
當有匹配成功時候,停止匹配,按當前匹配規則處理請求。
. 匹配除換行符以外的任意字符
w 匹配字母或數字或下劃線或漢字
s 匹配任意的空白符
d 匹配數字
匹配單詞的開始或結束
^ 匹配字符串的開始
$ 匹配字符串的結束
* 重複零次或更多次
+ 重複一次或更多次
? 重複零次或一次
{n} 重複n次
{n,} 重複n次或更多次
{n,m} 重複n到m次
*? 重複任意次,但儘可能少重複
+? 重複1次或更多次,但儘可能少重複
?? 重複0次或1次,但儘可能少重複
{n,m}? 重複n到m次,但儘可能少重複
{n,}? 重複n次以上,但儘可能少重複
W 匹配任意不是字母,數字,下劃線,漢字的字符
S 匹配任意不是空白符的字符
D 匹配任意非數字的字符
B 匹配不是單詞開頭或結束的位置
[^x] 匹配除了x以外的任意字符
[^aeiou] 匹配除了aeiou這幾個字母以外的任意字符
常用的規則
精確匹配
location = / { proxy_pass http://127.0.0.1:9090/ }
將所有請求直接轉發給服務器的9090端口。
處理靜態文件
#目錄匹配 location ^~ /static/ { root /webroot/static/; } #後綴匹配 location ~* .(gif|jpg|jpeg|png|css|js|ico)$ { root /webroot/res/; }
轉發動態請求到後端應用服務器
#將/account/開始的請求轉發給Account服務器 location /account/ { proxy_pass http://127.0.0.1:8080/ } #將/order/開始的請求轉發給Order服務器 location /order/ { proxy_pass http://127.0.0.1:9090/ }
rewrite指令
last 相當於apache裡面的[L]標記,表示rewrite。
break 本條規則匹配完成後,終止匹配,不再匹配後面的規則。
redirect 返回302臨時重定向,瀏覽器地址會顯示跳轉後的URL地址。
permanent 返回301永久重定向,瀏覽器地址會顯示跳轉後的URL地址。
使用last和break實現URI重寫,瀏覽器地址欄不變。
使用alias指令必須用last標記;使用proxy_pass指令時,需要使用break標記。
last標記在本條rewrite規則執行完畢後,會對其所在server{……}標籤重新發起請求,而break標記則在本條規則匹配完成後,終止匹配。
[kyec555 ] Nginx正則表達式相關的參數和規則介紹已經有710次圍觀