`

nginx location 规则

阅读更多

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.gifhttp://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内置绑定变量章节。

分享到:
评论

相关推荐

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

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

    nginx location匹配实例详解

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

    nginx配置location总结及rewrite规则写法

    nginx配置location总结及rewrite规则写法

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

    ### Nginx 配置 Location 时常见...总之,在配置 Nginx 时,正确理解和使用 `location` 的匹配规则和 `root`、`alias` 的区别是非常重要的。只有深入掌握这些概念,才能更高效地利用 Nginx 进行 Web 服务器的配置管理。

    nginx location配置详细解释.pdf

    除了 `location` 配置外,Nginx 还支持强大的重写规则功能,可以通过 `rewrite` 指令实现 URL 的重定向或修改。以下是几个常用的 `rewrite` 标记: - **last**:继续执行后续的重写规则。 - **break**:终止重写...

    nginx_location

    Nginx 的 `location` 指令是配置 Web 服务器路由请求的关键部分,用于根据请求的 URI 来决定如何处理请求。以下是对 `location` 指令的详细解释和最佳实践: 1. **匹配规则**: - `=`:精确匹配,如果请求的 URI ...

    详解Nginx location 匹配规则

    语法规则 location [=|~|~*|^~] /uri/ { … } 模式 含义 location = /uri = 表示精确匹配,只有完全匹配上才能生效 location ^~ /uri ^~ 开头对URL路径进行前缀匹配,并且在正则之前。 location ~ ...

    nginx语法规则.docx

    nginx 语法规则详解 Nginx 语法规则是 Nginx 配置文件的核心组成部分,它规定了 Nginx 如何处理用户的请求。理解 Nginx 语法规则对于配置 Nginx 是非常重要的。本文详细介绍了 Nginx 语法规则的各种模式和匹配规则...

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

    Nginx 反向代理 Location 语法规则详解 Nginx 的 Location 语法规则是 Nginx 反向代理中最重要的配置部分之一。Location 规则用于匹配客户端请求的 URI,并将其路由到相应的服务器或应用程序。下面我们详细解释 ...

    nginx配置location总结location正则写法及rewrite规则写法

    `location` 的正则写法和 `rewrite` 规则是 Nginx 配置中的高级特性,用于实现灵活的URL管理和重定向。 1. **location 正则写法** - `location = /{}`:精准匹配,只有当请求的URI完全等于 `/` 时才匹配,不接受...

    Nginx 重写规则教程

    重写规则可以实现从一个location跳转到另一个location,最多允许10次重定向,超过这个次数,Nginx会返回500错误。此外,`set`指令允许创建新的变量并设置它们的值,这对于记录条件标识、传递参数和记录操作行为非常...

    Nginx location匹配规则的方法示例

    Nginx可以配置为反向代理服务器,即根据配置的location规则对请求进行匹配,并将匹配到的请求转发到后端的服务器。这个转发过程涉及到反向代理的配置,通常使用proxy_pass指令实现。 综上所述,Nginx的location匹配...

    nginx location 配置 正则表达式实例详解

    **Nginx Location 配置正则表达式详解** 在Nginx服务器配置中,`location`指令扮演着至关重要的角色。它允许我们根据请求的URI(Uniform Resource Identifier)进行精细化处理,例如转发请求到不同的后端服务、提供...

    nginx的server和location匹配规则

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

    NGINX location 在配置中的优先级.docx

    NGINX location 配置中的优先级详解 NGINX 中的 location directive 是一个非常重要的配置指令,它可以根据不同的 URL 模式来匹配不同的请求路径。但是,location 的配置顺序并不是固定的,而是根据 Location ...

    nginx location中多个if里面proxy_pass的方法

    在Nginx配置中,`location`指令是用于定义URL路由和处理规则的关键部分,它决定了请求应如何被代理、重定向或静态文件服务。在本文中,我们将深入探讨`location`指令的匹配机制以及在多个`if`语句中使用`proxy_pass`...

    Nginx Location 指令简明指南

    3. 对于使用了正则表达式的location块,Nginx会按顺序检查,找到第一个匹配的规则即停止匹配过程。 4. 如果正则表达式匹配到了结果,则使用正则表达式的结果;如果没有找到匹配的正则表达式,那么会退回到前面找到的...

    nginx转发规则、负载均衡验证素材

    Nginx的转发规则主要通过配置其HTTP模块中的location指令实现。location指令用于匹配请求的URI,根据匹配结果决定如何处理请求。其基本语法如下: ```nginx location [=|~|~*|^~] URI { ... } ``` 1. `=`:精确...

Global site tag (gtag.js) - Google Analytics