`

location 匹配规则

 
阅读更多
转自https://moonbingbing.gitbooks.io/openresty-best-practices/content/ngx/nginx_local_pcre.html

location 匹配规则

语法规则

location [=|~|~*|^~] /uri/ { … }
location

多个location配置的情况下匹配顺序为(参考资料而来,还未实际验证,试试就知道了,不必拘泥,仅供参考):
首先匹配 =
其次匹配 ^~
其次是按文件中顺序的正则匹配
最后是交给 / 通用匹配
当有匹配成功时候,停止匹配,按当前匹配规则处理请求
例子,有如下匹配规则:
location = / {
   #规则A
}
location = /login {
   #规则B
}
location ^~ /static/ {
   #规则C
}
location ~ \.(gif|jpg|png|js|css)$ {
   #规则D
}
location ~* \.png$ {
   #规则E
}
location !~ \.xhtml$ {
   #规则F
}
location !~* \.xhtml$ {
   #规则G
}
location / {
   #规则H
}
那么产生的效果如下:
访问根目录/, 比如 http://localhost/ 将匹配规则A
访问 http://localhost/login 将匹配规则B,http://localhost/register 则匹配规则H
访问 http://localhost/static/a.html 将匹配规则C
访问 http://localhost/a.gif, http://localhost/b.jpg 将匹配规则D和规则E,但是规则D顺序优先,规则E不起作用,而 http://localhost/static/c.png 则优先匹配到规则C
访问 http://localhost/a.PNG 则匹配规则E,而不会匹配规则D,因为规则E不区分大小写。
访问 http://localhost/a.xhtml 不会匹配规则F和规则G,http://localhost/a.XHTML不会匹配规则G,因为不区分大小写。规则F,规则G属于排除法,符合匹配规则但是不会匹配到,所以想想看实际应用中哪里会用到。
访问 http://localhost/category/id/1111 则最终匹配到规则H,因为以上规则都不匹配,这个时候应该是nginx转发请求给后端应用服务器,比如FastCGI(php),tomcat(jsp),nginx作为反向代理服务器存在。
所以实际使用中,个人觉得至少有三个匹配规则定义,如下:
#直接匹配网站根,通过域名访问网站首页比较频繁,使用这个会加速处理,官网如是说。
#这里是直接转发给后端应用服务器了,也可以是一个静态首页
# 第一个必选规则
location = / {
    proxy_pass http://tomcat:8080/index
}
# 第二个必选规则是处理静态文件请求,这是nginx作为http服务器的强项
# 有两种配置模式,目录匹配或后缀匹配,任选其一或搭配使用
location ^~ /static/ {
    root /webroot/static/;
}
location ~* \.(gif|jpg|jpeg|png|css|js|ico)$ {
    root /webroot/res/;
}
#第三个规则就是通用规则,用来转发动态请求到后端应用服务器
#非静态文件请求就默认是动态请求,自己根据实际把握
#毕竟目前的一些框架的流行,带.php,.jsp后缀的情况很少了
location / {
    proxy_pass http://tomcat:8080/
}


ReWrite语法

last – 基本上都用这个Flag
break – 中止Rewirte,不在继续匹配
redirect – 返回临时重定向的HTTP状态302
permanent – 返回永久重定向的HTTP状态301
1、下面是可以用来判断的表达式:
-f和!-f用来判断是否存在文件
-d和!-d用来判断是否存在目录
-e和!-e用来判断是否存在文件或目录
-x和!-x用来判断文件是否可执行
2、下面是可以用作判断的全局变量
例:http://localhost:88/test1/test2/test.php?k=v
$host:localhost
$server_port:88
$request_uri:/test1/test2/test.php?k=v
$document_uri:/test1/test2/test.php
$document_root:D:\nginx/html
$request_filename:D:\nginx/html/test1/test2/test.php
Redirect语法

server {
    listen 80;
    server_name start.igrow.cn;
    index index.html index.php;
    root html;
    if ($http_host !~ “^star\.igrow\.cn$&quot {
        rewrite ^(.*) http://star.igrow.cn$1 redirect;
    }
}
防盗链

location ~* \.(gif|jpg|swf)$ {
    valid_referers none blocked start.igrow.cn sta.igrow.cn;
    if ($invalid_referer) {
       rewrite ^/ http://$host/logo.png;
    }
}
根据文件类型设置过期时间

location ~* \.(js|css|jpg|jpeg|gif|png|swf)$ {
    if (-f $request_filename) {
        expires 1h;
        break;
    }
}
禁止访问某个目录

location ~* \.(txt|doc)${
    root /data/www/wwwroot/linuxtone/test;
    deny all;
}
分享到:
评论

相关推荐

    nginx的server和location匹配规则

    Nginx 服务器和 Location 匹配规则 Nginx 配置文件主要由 events、http、server、location、upstream 等块配置项和一些行配置项组成。Server 块匹配规则是 Nginx 配置文件中的一部分,对虚拟主机的相关参数进行配置...

    Nginx location匹配规则的方法示例

    Nginx的location匹配规则非常灵活和强大,可以实现精确匹配、前缀匹配、正则表达式匹配等多种方式。在配置Nginx服务器时,了解location匹配规则的方法至关重要。 location块中的匹配规则可以根据不同的符号进行分类...

    Nginx关于location的匹配规则详解.docx

    **Nginx中的Location匹配规则详解** 在Nginx服务器配置中,`location`指令是核心部分之一,用于处理HTTP请求。它根据指定的规则来匹配URL,从而决定如何处理客户端的请求。本文将深入探讨Nginx `location`的匹配...

    详解Nginx location 匹配规则

    正确配置location匹配规则,可以极大地提升Web服务器的性能和效率。理解每种修饰符和匹配顺序是配置正确规则的关键。在具体应用中,还需要根据实际的Web应用结构和性能要求来细化配置,确保每个请求都能得到最合适的...

    nginx location匹配实例详解

    您可能感兴趣的文章:Nginx配置指令location匹配符优先级和安全问题详解Nginx location 匹配规则Nginx服务器的location指令匹配规则详解利用nginx如何匹配多个条件Nginx location匹配规则的方法示例简介Nginx中的...

    简介Nginx中的location匹配规则

    location匹配规则是Nginx配置中的一个重要部分,它决定了Nginx如何将用户请求映射到相应的处理器。location指令可以在server块中使用,用于定义对不同URI请求的处理策略。匹配规则的使用,使得Nginx能够灵活地处理...

    nginx 配置location匹配规则实例讲解

    理解`location`的匹配规则对于编写高效的Nginx配置至关重要,它可以帮助我们更好地控制请求的流向,实现灵活的路由策略,满足各种复杂的业务需求。在实际应用中,可以根据需求合理组合不同类型的`location`,确保...

    一文弄懂Nginx的location匹配的实现

    学习location匹配规则对于理解如何在Nginx中配置服务器和优化网站性能至关重要。 location指令有多种匹配方式,具体包括精确匹配(=)、正则表达式匹配(~和~*)、最前缀匹配(^~)以及前缀匹配。它们都遵循特定的...

    详解Nginx之Location配置(Location匹配顺序)

    1. **精确匹配优先**:首先尝试`location = /pattern`,如果找到精确匹配,就不再继续检查其他规则。 2. **前缀匹配**:如果精确匹配未找到,Nginx会尝试前缀匹配(`location /pattern`)。按配置文件中的顺序依次...

    Nginx服务器的location指令匹配规则详解

    Location 指令,是用来为匹配的 URI 进行配置,URI 即语法中的”/uri/”,可以是字符串或正则表达式。但如果要使用正则表达式,则必须指定前缀。 nginx location语法 基本语法:location [=|~|~*|^~] /uri/ { … } ...

    Nginx 反向代理 location 语法规则说明

    当有匹配成功时候,停止匹配,按当前匹配规则处理请求。 示例 下面是一些示例 Location 规则: ``` location = / { ... } # 精确匹配根目录 location = /login { ... } # 精确匹配 /login location ^~ /static/ { ...

    nginx 匹配规则小总结(推荐)

    本文主要介绍Nginx中location匹配规则的小结,以及配置proxy_pass时路径是否带斜杠(/)的问题。 首先,Nginx的location匹配规则中,使用等号类型(=)时,表示精确匹配,优先级最高,一旦匹配成功,其他匹配规则将...

    nginx配置location时容易出现的误区

    - **普通 location** 的匹配规则遵循“最大前缀匹配”原则,即优先选择与请求 URI 最大程度匹配的 location 块。 - **正则 location** 的匹配规则是按照配置文件中的先后顺序来进行匹配的,一旦某个正则表达式匹配...

    Nginx服务器中的location配置详解

    location匹配测试只使用请求URI的部分,而不使用参数部分。(原因:参数的写法太多,无法精确匹配) location匹配顺序 多个location配置的前提下,location的匹配顺序(未验证,嘿嘿,google上搜的) 1.首先匹\u914d...

    Nginx配置之location的匹配优先级浅析

    - `location ^~ expression`:这种类型同样属于普通匹配,但一旦匹配,即使后续有正则表达式匹配,也会立即停止匹配,执行此`location`的配置。 - `location expression`:无特殊标志的普通匹配,如果有多个匹配,...

Global site tag (gtag.js) - Google Analytics