Nginx Location REGEX 比對語法和設定

俗話說的好,規則寫的好,天天睡到飽。
為了睡的好,讓我們一次把 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)
廣告

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

您的留言將使用 WordPress.com 帳號。 登出 / 變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 / 變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 / 變更 )

Google+ photo

您的留言將使用 Google+ 帳號。 登出 / 變更 )

連結到 %s