`
iwebcode
  • 浏览: 2071523 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

Nginx路径匹配规则详解

 
阅读更多
  作者:zhanhailiang 日期:2013-02-01

本节要讨论Nginx如何为一个请求选择匹配的location进行处理。

如下配置文件:

server {
    listen         80 default_server;
    server_name  itravel.smartcom.cc itravel-beta.huawei.com;
    client_max_body_size  8M;
    server_tokens  off;
    root   /data/web/itravel2.smartcom.cc/trunk/htdocs;

    error_page     404  /404.htm;
    error_page    500 502 503 504  /50x.htm;

    location / {
        #root   /data/web/itravel2.smartcom.cc/trunk/htdocs;
        index  index.php index.html index.htm;
        if (!-e $request_filename) {
            rewrite ^(.+)\.html$ $1.php last;
        }
    }

    location /static/js/ {
        #root /data/web/itravel2.smartcom.cc/trunk/htdocs;
        concat on;
        concat_types text/javascript;
    }

    location /static/css/ {
        #root /data/web/itravel2.smartcom.cc/trunk/htdocs;
        concat on;
        concat_types text/css;
    }

    location /api { }

    location ~/\.ht { }


    location ~ ^/~([^/]+)(/?.*)$ { }

    location ~ \.do$ { }

    location ~ \.(jpg|jpeg|gif|png|ico|css|tgz|gz|bz2|pdf|txt|tar|bmp|js|mov) { }

    location ~ /trip/ { }

    location /trip/ { }

    location ~ \.php$ { }
 }

第一步:请求URI(路径)规范化。

所谓规范化,就是先将URI中形如“%XX”的编码字符进行解码,再解析URI中的相对路径“.”和“..”部分, 另外还可能会压缩相邻的两个或多个斜线成为一个斜线。

举例说明:若REQUEST_URI为//trip/t.php,则规范化后为/trip/t.php,Nginx将规范前的值存放在$request_uri中,而规范化后的值存放在$uri中。

其中,$request_uri和$uri为Nginx内嵌变量。

第二步:请求URI路径匹配。

首先需要明确Nginx中将路径匹配分为两类:

  1. 前缀路径匹配,即前缀字符串定义的路径,如上配置文件中“/,/static/js/,/static/css/,/api,/trip/”
  2. 正则表达式路径匹配,即使用正则表达式需要在路径开始添加“~*”前缀 (不区分大小写),或者“~”前缀(区分大小写)。如上配置文件中“/\.ht,^/~([^/]+)(/?.*)$,\.do$,/trip/,\.php$,\.(jpg|jpeg|gif|png|ico|css|zip|tgz|gz|rar|bz2|pdf|txt|tar||bmp|rtf|js|mov)”

其次为了根据请求URI查找路径,需要明确路径匹配的顺序:

Nginx首先检查前缀字符串定义的路径 (前缀路径),在这些路径中找到能最精确匹配请求URI的路径。然后Nginx按在配置文件中的出现顺序检查正则表达式路径,匹配上某个路径后即停止匹配并使用该路径的配置,否则使用最大前缀匹配的路径的配置。

举例说明:请求/trip/t.php,首先进行前缀路径匹配,最精确的前缀路径为/trip/,接下来进行正则表达式匹配,匹配到\.php$,从而进行location ~ \.php$ { }处理请求。反之若请求的是/trip/t.html,由于没有正则表达式匹配到该URI,故匹配最精确的前缀路径匹配,即进入location /trip/ { }处理请求。若想不论是请求/trip/t.php,还是/trip/t.html,都匹配到/trip/进行处理,则可以使用location ^~ /trip/ { },这样Nginx就不会再检查正则表达式了。

备注:

路径可以嵌套,但有例外。
在不区分大小写的操作系统(诸如MacOSX和Cygwin)上,前缀匹配忽略大小写(0.7.7)。但是,比较仅限于单字节的编码区域(one-byte locale)。
正则表达式中可以包含匹配组(0.7.40),结果可以被后面的其他指令使用。
如果最大前缀匹配的路径以“^~”开始,那么Nginx不再检查正则表达式。
在0.7.1到0.8.41的所有Nginx中,如果请求匹配的前缀字符串路径并没有“=”或“^~”前缀, 路径查找过程仍然会停止,而不进行正则表达式匹配。

而且,使用“=”前缀可以定义URI和路径的精确匹配。如果发现匹配,则终止路径查找。 比如,如果请求“/”出现频繁,定义“location = /”可以提高这些请求的处理速度, 因为查找过程在第一次比较以后即结束。这样的路径明显不可能包含嵌套路径。

扩展阅读:

分享到:
评论

相关推荐

    详解Nginx location 匹配规则

    接下来,我们将详细探讨Nginx location指令的匹配规则,以及如何正确地配置它们来处理各种HTTP请求。 首先,location指令的基本语法是location [修饰符] uri { ... },其中[修饰符]是可选的,uri是要匹配的路径。...

    nginx location匹配实例详解

    ### Location匹配规则 - **完全匹配**: 使用`=`,优先级最高。 - **前缀匹配**: 没有`=`,按URI长度排序,最长的匹配优先。 - **正则表达式匹配**: 使用`~`或`~*`,按照配置顺序进行尝试,一旦匹配成功,则停止后续...

    Nginx 转发匹配规则的实现

    本文将详细介绍Nginx中正则表达式匹配、文件及目录匹配,以及rewrite指令的使用,包括相关标志和指令的运用。 1. **正则表达式匹配** 在Nginx中,正则表达式常用于更精确地匹配URL路径。`~`用于区分大小写的匹配,...

    nginx之rewrite

    rewrite规则在nginx的配置文件中定义,通常在server、location和if指令块中使用。 一、Nginx rewrite规则定义 rewrite规则通过正则表达式匹配请求的URI,并且可以结合标志位来实现URL重写或重定向。使用全局变量...

    nginx中带问号(?) 带参数的rewrite规则

    以下将详细介绍如何在Nginx中处理带参数的`rewrite`规则,以及如何去除或保留这些参数。 首先,`$query_string`变量包含了GET请求中的所有参数,而`$request_uri`则包含了原始URI,包括路径和查询字符串,但不包含...

    nginx1.16.0 免依赖版本

    提供的安装文档应详细说明如何在目标系统上安装和配置这个免依赖版本的Nginx,包括必要的系统设置、环境变量、路径配置等。 5. **私信支持** 如果在安装或使用过程中遇到问题,可以联系提供者进行私信咨询,这是...

    Nginx Location指令URI匹配规则详解小结

    主要介绍了Nginx Location指令URI匹配规则详解小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

    nginx-linux-1.24.0.tar.gz

    以下将详细介绍如何在Linux环境下安装和使用这个版本的Nginx。 首先,我们需要了解Linux的基础操作。Linux是一种多用户、多任务的分时操作系统,它的命令行界面提供了丰富的工具进行文件管理、网络通信等任务。对于...

    nginx安装文档.pdf

    本文将详细介绍在Linux环境下安装Nginx的过程。 首先,从官方渠道获取Nginx的最新版本。你可以访问GitHub上的Nginx发布页面(https://github.com/nginx/nginx/releases)或直接访问Nginx官网下载页...

    nginx设置rewrite规则

    下面将详细介绍如何在LNMP环境中配置Nginx的rewrite规则。 首先,了解rewrite规则的基本概念。Nginx的rewrite模块允许我们根据特定的条件重写请求的URI,这在实现URL路由、隐藏真实路径、SEO优化等方面非常有用。它...

    Nginx中if语句的判断条件与多条件判断详解

    一、if语句中的判断条件(nginx)介绍 1、正则表达式匹配:  ==:等值比较;  ~:与指定正则表达式模式匹配时返回“真”,判断匹配与否时区分字符大小写;  ~*:与指定正则表达式模式匹配时返回“真”,判断匹配...

    Nginx配置详解.docx

    **Nginx配置详解** Nginx是一款由Igor Sysoev为俄罗斯rambler.ru站点设计的高性能HTTP和反向代理服务器,自2004年发布以来,它已发展成为一个功能丰富的网络服务器,广泛应用于全球众多网站。Nginx以其稳定性、高...

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

    Nginx是一款开源的高性能HTTP和反向代理服务器,它使用location指令来处理...通过这些知识点的详细介绍,我们可以更深入地理解Nginx的location指令,从而优化网站的性能,并针对不同的请求情况采取更加高效的配置策略。

    fastdfs-nginx-module-1.24

    《FastDFS-Nginx-Module 1.24:高效文件服务器集成详解》 FastDFS-nginx-module 1.24 是一个针对 FastDFS 文件系统的 Nginx 模块,它使得 Nginx 可以无缝地与 FastDFS 集成,提供了高效的文件上传、下载服务。这一...

    nginx目录路径重定向的方法

    本文将详细介绍四种常见的Nginx目录路径重定向的方法。 1. **修改`root`映射** 修改`root`指令可以改变默认的Web目录,从而达到重定向的目的。例如,如果我们希望访问`dashidan.com/image`时,实际指向`/...

    nginx rewrite规则

    **Nginx Rewrite 规则详解** 在Web服务器领域,Nginx以其高效、轻量级的特性,被广泛用于处理静态内容和反向代理。其中,`rewrite`规则是Nginx的一项重要功能,它允许我们重写URL,实现动态路由、URL美化等目的。与...

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

    location有”定位”的意思, 主要是根据Uri来进行...^~:如果把这个前缀用于一个常规字符串,那么告诉nginx 如果路径匹配那么不测试正则表达式。 2.location如何发挥作用 3.简单实例证明上述图片结论 不带正则表达式的

    NGINX实现一个域名访问多个项目1

    本文将详细介绍如何通过Nginx的`location`模块来实现这一目标。 首先,我们需要了解`location`模块的基本概念和匹配规则。`location`模块是Nginx配置中用于处理HTTP请求的重要部分,它可以根据请求的URI(统一资源...

Global site tag (gtag.js) - Google Analytics