Nginx location配置解析
1.語法規則
location [=|~|~*|^~]/uri/{...}
- = 表示精確匹配,這個優先級最高的
- ^~ 表示uri以某個常規字符串開頭,理解爲匹配 url路徑即可,Nginx不對url做編碼,因此請求爲/static/80%/aa,可以被規則^~/static/ /aa(注意中間是空格)
- ~ 表示區分大小寫的正則匹配、
- ~* 表示不區分大小寫的正則匹配
- !~ 表示區分大小寫不正則匹配
- !~*表示不區分大小寫不正則匹配
- / 表示通用匹配,任何請求都會匹配到,默認匹配
其中常用正則 - . : 匹配除換行符以外的任意字符
- ? : 重複0次或1次
- + : 重複1次或更多次
- * : 重複0次或更多次
- \d :匹配數字
- ^ : 匹配字符串的開始
- $ : 匹配字符串的介紹
- {n} : 重複n次
- {n,} : 重複n次或更多次
- [c] : 匹配單個字符c
- [a-z] : 匹配a-z小寫字母的任意一個
2.語法優先級別
優先級:= > ^~
首先匹配 = ,其次匹配 ^~,其次是按文件中順序的正則匹配,最後是交給 / 通用匹配。當有匹配成功時候,停止匹配,按當前匹配規則請求。
3.定義匹配規則
(注:需要安裝echo模塊纔行,才能使用echo)
location / {
echo '/';
}
location = /{
echo '=/';
}
location = /nginx{
echo '=/nginx';
}
location ~ \.(gif|jpg|png|js|css) {
echo 'name-gif/jpg/png';
}
location ~* \.png$ {
echo 'all-png';
}
location ^~ /static/ {
echo 'static';
}
4.訪問測試
- 訪問http://a.chen.com/,匹配到“=/”
#curl http://a.chen.com/
=/
- 訪問http://a.chen.com/nginx,完全匹配到“=/nginx”
#curl http://a.chen.com/nginx
=/nginx
- 訪問http://a.chen.com/xxx/xxx.PNG,完全匹配到“~* .png$,因爲大寫。所以沒有匹配到‘~.(gif|jpg|png|js|css)’,因爲 ~ 區分大小寫 ”
#curl http://a.chen.com/xxx/1.PNG
all-png
- 訪問http://a.chen.com/static/xxx.PNG,匹配到“ ^~ /static/ 因爲有 ^~ 停止往下匹配了”
#curl http://a.chen.com/static/1.PNG
static
5.常用的靜態資源匹配規則
5.1.樣式和JS
location ~* .*\.(js|css)?${
expires 7d;//7天過期
access_log off;//不保存日誌
}
5.5.圖片圖標等
location ~* .*\.(jpg|png|gif|jpeg|bmp|ico)?${
expires 7d;//7天過期
access_log off;//不保存日誌
}
5.6.資源數據
location ~* .*\.(zip|rar|exe|msi|iso|gho|mp3|mp4|rmvb|wma|wmv|rm)?${
deny all;//禁止這些文件的下載
}