当前位置 主页 > 服务器问题 > nginx问题汇总 >

    Nginx服务器中的location配置详解

    栏目:nginx问题汇总 时间:2019-02-25 16:24

    这篇文章主要介绍了Nginx服务器中的location配置详解,包括location的匹配顺序等基本概念,需要的朋友可以参考下

    语法
    location  [=|~|~*|^~] /uri/  {...}

    规则
    = : 表示精确的URI匹配(有兴趣的同学可以看一下url和uri的区别)
    ~: 表示区分大小写的正则匹配
    ~*:表示不区分大小写的正则匹配
    !~ && !~*:表示区分大小写不匹配的正则和不区分大小写的不匹配的正则
    /:通用匹配,任何请求都会匹配到

    location匹配目标
    location匹配测试只使用请求URI的部分,而不使用参数部分。(原因:参数的写法太多,无法精确匹配)

    location匹配顺序
    多个location配置的前提下,location的匹配顺序(未验证,嘿嘿,google上搜的)
    1.首先匹配=
    2.其次匹配^~
    3.再其次按照配置文件的顺序进行正则匹配、
    4.最后是交给/进行通用匹配
    注意:
    当有匹配成功时,立刻停止匹配,按照当前匹配规则处理请求

    演示实例

    nginx 配置文件,自下到上分为三种层次分明的结构:
     |    http block        the protocol level
     |    server block        the server level
     V    location block        the requested URI

    Nginx 允许用户定义 Location block ,并指定一个匹配模式(pattern)匹配特定的 URI。除了简单的字符串(比如文件系统路径),还允许使用更为复杂的匹配模式(pattern)。
    Location block 的基本语法形式是:

      location [=|~|~*|^~|@] pattern { ... }

    [=|~|~*|^~|@] 被称作 location modifier ,这会定义 Nginx 如何去匹配其后的 pattern ,以及该 pattern 的最基本的属性(简单字符串或正则表达式)。

    关于 location modifier

    1. =

    这会完全匹配指定的 pattern ,且这里的 pattern 被限制成简单的字符串,也就是说这里不能使用正则表达式。
    Example:

    server {  server_name jb51.net;  location = /abcd {  […]  }}

    匹配情况:
        http://jb51.net/abcd        # 正好完全匹配
        http://jb51.net/ABCD        # 如果运行 Nginx server 的系统本身对大小写不敏感,比如 Windows ,那么也匹配
        http://jb51.net/abcd?param1?m2    # 忽略查询串参数(query string arguments),这里就是 /abcd 后面的 ?param1?m2
        http://jb51.net/abcd/    # 不匹配,因为末尾存在反斜杠(trailing slash),Nginx 不认为这种情况是完全匹配
        http://jb51.net/abcde    # 不匹配,因为不是完全匹配

    2. (None)
    可以不写 location modifier ,Nginx 仍然能去匹配 pattern 。这种情况下,匹配那些以指定的 patern 开头的 URI,注意这里的 URI 只能是普通字符串,不能使用正则表达式。
    Example:

    server {  server_name website.com;  location /abcd {  […]  }}

    匹配情况: