俗話說的好,規則寫的好,天天睡到飽。
為了睡的好,讓我們一次把 Nginx 相關的正規表示法搞清楚吧!接下來我們專注在 Nginx Location 的部分。
先講結論
Nginx Location 的語法是有優先權的,其優先順序如下:
'=' > '^~' > '~' > '/xxx/yyy.zzz' > '/'
正規表示法說明
這是 Nginx 官方對於 Location 的說明 Nginx Location。
按照定義,Location 有兩種語法:
Syntax: location [ = | ~ | ~* | ^~ ] uri { ... } location @name { ... }
我們先針對第一種最常見的表示法來說明,第二種為了篇幅就下次再說吧!
表示法一:location [ = | ~ | ~* | ^~ ] uri { … }
測試Nginx方式
我把測試Config放到Gist上,供大家參考 Nginx Location測試
指定Config啟動
nginx -c /path/to/nginx-test/nginx-regex.conf
修改Config後,重啟
nginx -s reload
精確比對:’=’
- Exactly Match
- 比對成功後,終止接下來的比對
字串比對:’^~’
- 會在 match 成功後,告訴 Nginx 停止比對後面的規則
- 普通字串比對
- 區分大小寫
- 不會做URL encode
- 最常的 match 為最高優先
正規表示法比對:’~’
- Regex match
- 區分大小寫 (在Mac上無效)
- 注意:如果是在Mac上測試的朋友,請注意在Mac上,這裡的規則是不會區分大小寫的,所以記得不要像筆者一樣,想說怎麼測試都無法成功喔!
以下附上Nginx官方網站,關於Mac會忽略大小寫判定的說明。
http://nginx.org/en/docs/http/ngx_http_core_module.html#location
> For case-insensitive operating systems such as Mac OS X and Cygwin, matching with prefix strings ignores a case (0.7.7).
正規表示法比對:’~*’
- Regex match
- 不分大小寫
URL比對:’/’
- 在這裡把它當成是直接比對 URL 的位置似乎比較好懂
- 任何的 Request 都會比對到 (因為 ‘/’ 是網頁的 root)
廣告