nginx location 匹配測試

輸入 location 配置與一個 URI,看 nginx 實際會命中哪一條,並給出完整的判定過程。

匹配結果

location ~ ^/api/v[0-9]+/users {

命中原因:正則按配置順序逐條嘗試,這條是第一個命中的

L17

判定過程

  1. 1精確匹配location = / {不命中
  2. 2字首匹配location / {最長
  3. 3字首匹配location ^~ /static/ {不命中
  4. 4字首匹配location /api/ {最長
  5. 5正則匹配location ~* \.(jpg|png|gif)$ {不命中
  6. 6正則匹配location ~ ^/api/v[0-9]+/users {命中

順序是死的:先全部精確匹配,再找最長字首,字首帶 ^~ 就結束;否則按配置檔案裡的順序試正則,第一個命中的生效;正則都不中才回到最長字首。

最容易踩的坑:寫了 `location /api/` 再寫 `location ~ ^/api/v[0-9]+`,看起來字首更具體,實際是正則贏——正則的優先順序高於普通字首。想讓字首贏就加 ^~。

這裡只模擬一層的 location。巢狀 location 的規則更繞(外層字首內的正則優先於外層本身),生產中遇到再單獨分析。

評論

登入後即可參與評論

還沒有評論,來說兩句吧