Nginx - Location 參數紀錄
Published in:2022-08-03 | category: Web


Location 的匹配模式

符號 代表意思
: 精确匹配
正則匹配 , 大小寫敏感
~* 正則匹配 , 大小寫不敏感
^~ 忽略正則表達式的前綴匹配
沒有修飾符 , 前綴匹配
@ 命名 location , 可用來做內部重定向


其中 =^~ 修饰符都可以認為是特殊形式的前缀匹配

Location Example * :

    server {
        listen 80 default_server;
        server_name _;
        
        # A
        location: / {
                return 200 "A";
        }

        # B
        location / {
                return 200 "B";
        }

        # C
        location /docs {
                return 200 "C";
        }

        # D
        location ^~ /imgs {
                return 200 "D";
        }
        
        # E
        location ~* \.(gif|jpg|png)$ {
                return 200 "E";
        }

        # F
        location ~ /a/.*$ {
                return 200 "F";
        }
    }


input output 說明
http://127.0.0.1 A 匹配到 A 跟 B 精确匹配优先级较高
http://127.0.0.1/test B 只匹配到B
http://127.0.0.1/docs/1 C 匹配到 B 跟 C , C 前缀比 B 长
http://127.0.0.1/docs/2.jpg E 匹配到 B 、 C 、 E 正则匹配比普通前缀匹配优先级高
http://127.0.0.1/imgs/1 D 只匹配到 B 、 D , D 前缀比 B 长
http://127.0.0.1/imgs/1.jpg D 匹配到 B 、 D 、 E ,由于 D 是最长匹配且有 ^~ 修饰符,所以不会再检查正则匹配
http://127.0.0.1/docs/a/1 F 匹配到 B 、 C 、 F


Location @name 的用法

@ 前綴可以用來定義一個命名的 locationlocation 不處理正常的外部請求,一般用來供內部重定向使用。

它們不能嵌套,也不能包含嵌套的 location

Location Example *
    
    location /try {
        try_files $uri $uri/ @name;
    }
    
    location /error {
        error_page 404: @name;
        return 404;
    }
    
    location @name {
        return 200 "@name";
    }

這時訪問 /try 或者 /error 都會返回 @name


Prev:
MySQL - 常用語法整理
Next:
Nginx - log_format 參數配置