昊鼎王五:nginx location正则表达式进阶写法

版权声明:感谢您阅读我的文章,转载注明出处哦~~ https://blog.csdn.net/haoding205/article/details/81741869

昊鼎王五:nginx location正则表达式进阶写法

示例及解析:

‘=’ 号 精确匹配 / ,主机名后面不能带任何字符串

location = / {
    [ configuration A ]
}

匹配到所有请求 (因为所有的地址都以 / 开头,一般放在最末位置)

location / {
    [ configuration B ]
}

匹配任何以 /documents/ 开头的地址,匹配符合以后,还要继续往下搜索

location /documents/ {       #只有后面的正则表达式没有匹配到时,这一条才会采用这一条
    [ configuration C ]
}

匹配任何以 /documents/ 开头的地址,匹配符合以后,还要继续往下搜索

location ~ /documents/Abc {    #只有后面的正则表达式没有匹配到时,这一条才会采用这一条
        [ configuration CC ]
}

匹配任何以 /images/ 开头的地址,匹配符合以后,停止往下搜索正则,采用这一条。

location ^~ /images/ {
        [ configuration D ]
}

匹配所有以 gif,jpg或jpeg 结尾的请求

location ~* \.(gif|jpg|jpeg)$ {     # 然而,所有请求 /images/ 下的图片会被 config D 处理,因为 ^~ 到达不了这一条正则
        [ configuration E ]
}

字符匹配到 /images/,继续往下,会发现 ^~ 存在

location /images/ {
        [ configuration F ]
}

最长字符匹配到 /images/abc,继续往下,会发现 ^~ 存在

location /images/abc {   # F与G的放置顺序是没有关系的
        [ configuration G ]
}

只有去掉 config D 才有效:先最长匹配 config G 开头的地址,继续往下搜索,匹配到这一条正则,采用

location ~ /images/abc/ {
        [ configuration H ]
}

匹配多路径下js的请求

location ~* /js/.*/\.js{
        [ configuration I ]
}

小结:

=开头表示精确匹配,如 A 中只匹配根目录结尾的请求,后面不能带任何字符串。
    以 ^~ 开头表示uri以某个常规字符串开头,不是正则匹配
    以 ~ 开头表示区分大小写的正则匹配;
    以 ~* 开头表示不区分大小写的正则匹配
    以 / 通用匹配, 如果没有其它匹配,任何请求都会匹配到

顺序 no优先级:

(location =) > (location 完整路径) > (location ^~ 路径) > (location ~,~* 正则顺序) > (location 部分起始路径) > (/)

按照上面的location写法,以下的匹配示例成立:

     / -> config A         #精确完全匹配,即使/index.html也匹配不了
     /downloads/download.html -> config B  #匹配B以后,往下没有任何匹配,采用B
     /images/1.gif -> configuration D   #匹配到F,往下匹配到D,停止往下
     /images/abc/def -> config D   #最长匹配到G,往下匹配D,停止往下,你可以看到 任何以/images/开头的都会匹配到D并停止,FG写在这里是没有任何意义的,H是永远轮不到的,这里只是为了说明匹配顺序
     /documents/document.html -> config C  #匹配到C,往下没有任何匹配,采用C
     /documents/1.jpg -> configuration E   #匹配到C,往下正则匹配到E
     /documents/Abc.jpg -> config CC    #最长匹配到C,往下正则顺序匹配到CC,不会往下到E

实际使用建议

所以实际使用中,个人觉得至少有三个匹配规则定义,如下:

1.第一个必选规则是处理静态文件请求,这是nginx作为http服务器的强项

location ^~ /static/ {                                             #目录匹配,任选其一
            root /webroot/static/;
}
location ~* \.(gif|jpg|jpeg|png|css|js|ico)$ {           #后缀匹配,任选其一
            root /webroot/res/;
}

2.第二个必选规则

location = / {
            proxy_pass http://tomcat:8080/index
}

3.第三个规则就是通用规则,用来转发动态请求到后端应用服务器

location / {
            proxy_pass http://tomcat:8080/
}

参考网址:

http://tengine.taobao.org/book/chapter_02.html
http://nginx.org/en/docs/http/ngx_http_rewrite_module.html

好了,聪明如你,知道了如何Nginx 的 Location 进阶配置,是不是很欢喜 ^_^

还有其他问题的可以在评论区留言或者扫码加博主获取资源或者提问。
这里写图片描述

猜你喜欢

转载自blog.csdn.net/haoding205/article/details/81741869