nginx location指令用法

时间:2025-03-30 22:25:56

nginx使用location指令去匹配不同的路径

nginx首先通过路径的前缀去匹配

此时用法就是如下:

# url就是路径的前缀,比如/, 比如/aaa
location url {...}
  • 1
  • 2
location / {
	config1
}
location /aaa {
	config2
}
location /aaa/bbb {
	config3
}

像上面这个例子
如果访问的路径是/ewrs, 那么config1会被使用
如果访问的路径以/aaa开头, 例如/aaa/sdewr, 那么config2会被使用
如果访问的路径以/aaa/bbb开头,例如/aaa/bbb/sdfjkw, 那么config3会被使用
也就是nginx最终匹配到满足条件的最长的路径前缀
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

nginx还可以通过正则表达式去匹配路径

此时用法就是如下:

# 不区分大小写的正则
location *~ {...}
# 区分大小写的正则
location ~ {...}
  • 1
  • 2
  • 3
  • 4
location ~* \.(gif|jpg)$ {
    config2
}

上面这个例子
如果访问的路径/aaa/1.gif, 
那么config2就会被使用
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

nginx配置中存在多个满足条件的正则location,那么只有第一个会被匹配到

nginx配置中有多个使用正则匹配的location指令的时候,nginx按照这些location指令在配置文件中出现的顺序去匹配,只要有一个匹配到,就会终止匹配,直接使用这个匹配到location配置,比如:

# 以/user开头的路径
location *~ ^(/user) {
	config1
}
# 任意的路径
location *~ .+ {
	config2
}

上面的例子
如果要访问的路径是/user, 那么匹配到的就是config1了
如果要访问的路径是/aaa, 那么匹配到的就是config2了
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

nginx配置中同时存在使用路径前缀的和使用正则的location指令

有时候,nginx中有一个location指令使用路径前缀去匹配,另外一个location指令使用正则去匹配,而且要访问的路径也都满足了这两个location指令的条件,比如:

# 以/aaa开头的路径
location /aaa {
	config1
}
# 以.gif或者.jpg结尾的路径
location ~* \.(gif|jpg)$ {
    config2
}

上面的例子,
如果访问的路径是/aaa/1.jpg,
那么先是匹配到config1,然后config2也被匹配到了,
但是会采用config2
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

nginx首先会使用路径前缀匹配一遍,找到长度最大的一个,
然后再去进行正则匹配,找到第一个满足条件的正则,
然后优先使用正则location指令对应的配置。

要避免这种情况
就可以在路径前缀前面加上修饰符^~,
这样就会采用路径前缀对应的配置了,
不会去继续进行正则匹配了,例如:

# 以/aaa开头的路径
location ^~ /aaa {
	config1
}
# 以.gif或者.jpg结尾的路径
location ~* \.(gif|jpg)$ {
    config2
}

上面的例子,
如果访问的路径是/aaa/1.jpg,
那么先是匹配到config1,然后停止进一步的匹配了
此时会采用config1
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

nginx也可以精确匹配某一个路径

# 路径为/aaa
location = /aaa {
	config1
}
# 以/aaa开头的路径
location /aaa{
    config2
}

上面的例子,
如果访问的路径是/aaa,那么config1会被匹配到,
如果访问的路径是/aaa/bbb, 那么config2会被匹配到
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12