Location配置详解

发表时间:2017-10-11 11:26:50 浏览量( 20 ) 留言数( 0 )

学习目标:

1、掌握Location的配置语法

2、了解Location的优先级

3、掌握搭建nginx代理服务器和负载均衡


学习过程:

一、Location的语法介绍

   Nginx 中的 Location 指令 是NginxHttpCoreModule中重要指令。Location 指令,是用来为匹配的 URI 进行配置,URI 即语法中的”/uri/”,可以是字符串或正则表达式。但如果要使用正则表达式,则必须指定前缀。

nginx location语法

 基本语法:location [=|~|~*|^~] /uri/ { … }

1.= 严格匹配。如果这个查询匹配,那么将停止搜索并立即处理此请求。

2.~ 为区分大小写匹配(可用正则表达式)

3.~* 为不区分大小写匹配(可用正则表达式)

4.!~和!~*分别为区分大小写不匹配及不区分大小写不匹配

5.^~ 如果把这个前缀用于一个常规字符串,那么告诉nginx 如果路径匹配那么不测试正则表达式。


二、优先级说明

在nginx的location和配置中location的顺序没有太大关系。正location表达式的类型有关。相同类型的表达式,字符串长的会优先匹配。

以下是按优先级排列说明:

等号类型(=)的优先级最高。一旦匹配成功,则不再查找其他匹配项。

^~ 类型表达式。一旦匹配成功,则不再查找其他匹配项。

正则表达式类型(~ ~*)的优先级次之。如果有多个location的正则能匹配的话,则使用正则表达式最长的那个。

常规字符串匹配类型。按前缀匹配。

location优先级示例

配置项如下:

location = / {

    # 仅仅匹配请求 /

    [ configuration A ]

}


location / {

    # 匹配所有以 / 开头的请求。

    # 但是如果有更长的同类型的表达式,则选择更长的表达式。

    # 如果有正则表达式可以匹配,则优先匹配正则表达式。

    [ configuration B ]


}


location /documents/ {

    # 匹配所有以 /documents/ 开头的请求。

    # 但是如果有更长的同类型的表达式,则选择更长的表达式。

    # 如果有正则表达式可以匹配,则优先匹配正则表达式。

    [ configuration C ]

}


location ^~ /images/ {

    # 匹配所有以 /images/ 开头的表达式,如果匹配成功,则停止匹配查找。

    # 所以,即便有符合的正则表达式location,也不会被使用

    [ configuration D ]

}


location ~* \.(gif|jpg|jpeg)$ {

    # 匹配所有以 gif jpg jpeg结尾的请求。

    # 但是 以 /images/开头的请求,将使用 Configuration D

    [ configuration E ]

}


三、示例

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

#直接匹配网站根,通过域名访问网站首页比较频繁,使用这个会加速处理,官网如是说。

#这里是直接转发给后端应用服务器了,也可以是一个静态首页

# 第一个必选规则

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/

}