Nginx location 规则

发布于 2020-08-18  428 次阅读


location 支持的语法location [=|~|~*|^~|@] pattern { ... }

「=」修饰符:要求路径完全匹配
location = /xxx {}

http://website.com/abcd 匹配
http://website.com/ABCD 可能会匹配,也可以不匹配,取决于操作系统的文件系统是否大小写敏感(case-sensitive)。ps: Mac 默认是大小写不敏感的,git 使用会有大坑。
http://website.com/abcd?param1&param2 匹配,忽略 querystring
http://website.com/abcd/ 不匹配,带有结尾的/
http://website.com/abcde 不匹配

「~」修饰符:区分大小写的正则匹配
 location ~ ^/abcd$ { }

http://website.com/abcd匹配(完全匹配)
http://website.com/ABCD不匹配,大小写敏感
http://website.com/abcd?param1&param2匹配
http://website.com/abcd/不匹配,不能匹配正则表达式
http://website.com/abcde不匹配,不能匹配正则表达式

「~*」不区分大小写的正则匹配
 location ~* ^/abcd$ { }

http://website.com/abcd 匹配(完全匹配)
http://website.com/ABCD 匹配(大小写不敏感)
http://website.com/abcd?param1&param2 匹配
http://website.com/abcd/ 不匹配,不能匹配正则表达式
http://website.com/abcde 不匹配,不能匹配正则表达式

查找的顺序及优先级

当有多条 location 规则时,nginx 有一套比较复杂的规则,优先级如下:
精确匹配=
前缀匹配^~(立刻停止后续的正则搜索)
按文件中顺序的正则匹配~或~*
匹配不带任何修饰的前缀匹配。 location / {}
这个规则大体的思路是

上面的匹配都是在$ 然而我们工作中很多情款 都是匹配以xxx 开头 或者以xxx 结尾的。

比如我们比较常见的配备以img jpg开头的
location ~ ^/(img|jpg) { }

比如我们比较常见的配备以img jpg结尾
location ~ ^/(img|jpg) { }