nginx中location的匹配和rewrite
最近在線上進行nginx規則的調整的時候遇到一個問題,發現在location匹配時候可能會踩到的一個坑。
location在匹配規則的時候匹配的是歸一化之后的URL,比如多個斜杠或者URL中帶".", ".."的都會被
歸一化。
而在內部rewrite的時候新的URL地址是不會再次被歸一化的。這種不一致如果沒有留意可能會遇到問題。
比如:
if ($request_uri ~ "/api") { rewrite (.*) /newapi/$1; # 斜杠多余了 } location /newapi/api { set $testapi 1; } location /newapi { # ... }
對于上面的配置中,rewrite的時候不小心多寫了個斜杠,對于這個配置,如果用地址:/api訪問的話 /newapi/api 這個location是不能被匹配的。而用地址/newapi//api直接訪問是可以匹配到/newapi/api這個location的。
本質上是因為用戶直接訪問的URL會先歸一化處理,而rewrite之后是不會處理的。
具體見文檔: http://nginx.org/en/docs/http/ngx_http_core_module.html
本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!