Nginx location的用法

2022-12-19  本文已影响0人  饱饱想要的灵感

location 常用匹配规则

符号 类型 含义
= 精确匹配 进行普通字符完全匹配
^~ 前缀匹配 表示普通字符匹配。如果匹配成功,则不再匹配其他location
~ 正则匹配 匹配大小写的匹配
~* 正则匹配 不区分大小写的匹配
!~ 正则匹配 区分大小写的匹配取非
!~* 正则匹配 不区分大小写的匹配取非

匹配优先级规则

例子讲解

例子 类型 是否继续搜索 解释
location = / {} 精确匹配 主机名后面不能带任何字符串,比如访问 / 和 /data,则 / 匹配,/data 不匹配
location / {} 通用匹配 将匹配到所有请求 比如访问 / 和 /data, 则 / 匹配, /data 也匹配,
但若后面是正则表达式会和最长字符串优先匹配(最长匹配)
location /documents/ {} 一般匹配 匹配任何以 /documents/ 开头的地址,匹配符合以后,还要继续往下搜索其它 location
只有其它 location后面的正则表达式没有匹配到时,才会采用这一条
location /documents/abc {} 一般匹配 匹配任何以 /documents/abc 开头的地址,匹配符合以后,还要继续往下搜索其它 location
只有其它 location后面的正则表达式没有匹配到时,才会采用这一条
location ^~ /images/ {} 前缀匹配 匹配任何以 /images/ 开头的地址,匹配符合以后,停止往下搜索正则,采用这一条
location ~* .(gif|jpg|jpeg)$ {} 正则匹配 匹配所有以 gif、jpg或jpeg 结尾的请求
但如果和前一个例子一起使用,那么所有请求 /images/ 下的图片会被 location ^~ /images/处理,因为 ^~ 的优先级更高,所以到达不了这一条正则
location /images/abc {} 一般匹配 最长字符匹配到 /images/abc,优先级最低,继续往下搜索其它 location,会发现 ^~ 和 ~ 存在
location ~ /images/abc {} 正则匹配 匹配以/images/abc 开头的
如果和location ^~ /images/一起使用, 将不会到达这一条
location /images/abc/1.html {} 一般匹配 匹配/images/abc/1.html 文件,如果和正则location ~ /images/abc/1.html 相比,正则优先级更高

实际场景常用

location = / {
    root   html;
    index  index.html index.htm;
}

location ^~ /static/ {
    root /webroot/static/;
}

location ~* \.(html|gif|jpg|jpeg|png|css|js|ico)$ {
    root /webroot/res/;
}

location /app/ {
    proxy_pass http://tomcat_server;
}
上一篇 下一篇

猜你喜欢

热点阅读