Nginx中的Location配置总结

【前言】

在项目中使用到了Nginx来作负载,今天就跟大家聊一聊配置文件中的location规则的一些知识点。

【正文】

一、location匹配命令

~      #波浪线表示执行一个正则匹配,区分大小写
~*    #表示执行一个正则匹配,不区分大小写
^~    #^~表示普通字符匹配,如果该选项匹配,只匹配该选项,不匹配别的选项,一般用来匹配目录
=      #进行普通字符精确匹配
@     #"@" 定义一个命名的 location,使用在内部定向时,例如 error_page, try_files

二、location 匹配的优先级(与location在配置文件中的顺序无关)

= 精确匹配会第一个被处理。如果发现精确匹配,nginx停止搜索其他匹配。
普通字符匹配,正则表达式规则和长的块规则将被优先和查询匹配,也就是说如果该项匹配还需去看有没有正则表达式匹配和更长的匹配。
^~ 则只匹配该规则,nginx停止搜索其他匹配,否则nginx会继续处理其他location指令。

最后匹配理带有"~"和"~*"的指令,如果找到相应的匹配,则nginx停止搜索其他匹配;当没有正则表达式或者没有正则表达式被匹配的情况下,那么匹配程度最高的逐字匹配指令会被使用。

三、location优先级官方文档(中英文对照)

1. Directives with the = prefix that match the query exactly. If found, searching stops.

2. All remaining directives with conventional strings, longest match first. If this match used the ^~ prefix, searching stops.

3. Regular expressions, in order of definition in the configuration file.

4. If #3 yielded a match, that result is used. Else the match from #2 is used.

=前缀的指令严格匹配这个查询。如果找到,停止搜索。
所有剩下的常规字符串,最长的匹配。如果这个匹配使用^〜前缀,搜索停止。
正则表达式,在配置文件中定义的顺序。
如果第3条规则产生匹配的话,结果被使用。否则,使用第2条规则的结果。

四、举例

,有如下匹配规则:
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
}

那么产生的效果如下:
1.访问根目录/, 比如http://localhost/ 将匹配规则A
2.访问 http://localhost/login 将匹配规则B,http://localhost/register 则匹配规则H
3.访问 http://localhost/static/a.html 将匹配规则C
4.访问 http://localhost/a.gif, http://localhost/b.jpg 将匹配规则D和规则E,但是规则D顺序优先,规则E不起作用,而 http://localhost/static/c.png 则优先匹配到规则C
5.访问 http://localhost/a.PNG 则匹配规则E,而不会匹配规则D,因为规则E不区分大小写。
6.访问 http://localhost/a.xhtml 不会匹配规则F和规则G,http://localhost/a.XHTML不会匹配规则G,因为不区分大小写。规则F,规则G属于排除法,符合匹配规则但是不会匹配到,所以想想看实际应用中哪里会用到。
7.访问 http://localhost/category/id/1111 则最终匹配到规则H,因为以上规则都不匹配,这个时候应该是nginx转发请求给后端应用服务器,比如FastCGI(php),tomcat(jsp),nginx作为方向代理服务器存在。

ps:访问规则中如果是存在一个斜杠则表示为模糊匹配,在模糊匹配后面可以写其他路径,例如http://localhost/login123,同样可以匹配到规则B;如果是使用两条斜杠时则表示是精确匹配,规则C便是精确匹配。

所以实际使用中,个人觉得至少有三个匹配规则定义,如下:
#直接匹配网站根,通过域名访问网站首页比较频繁,使用这个会加速处理,官网如是说。
#这里是直接转发给后端应用服务器了,也可以是一个静态首页
# 第一个必选规则
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/
}

【结语】

location只是匹配规则中的一部分,配置文件中后续规则后面将跟大家分享。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 14
    评论
### 回答1: Nginxlocation配置是通过在nginx配置文件定义location块来实现的。在location,您可以配置该路径下的各种请求处理方式。 语法如下: ``` location [ = | ~ | ~* | ^~ ] uri { … } ``` - `=` 号表示精确匹配,即请求路径与location后的uri完全一致时才会使用该location配置。 - `~` 号表示正则匹配,用于匹配大小写敏感的正则表达式。 - `~*` 号表示正则匹配,用于匹配大小写不敏感的正则表达式。 - `^~` 号表示前缀匹配,如果请求路径以location后的uri为前缀,则使用该location配置,并且不再继续匹配其他location。 例如,下面的配置将请求路径为/static/的请求转发到/data/www目录下: ``` location /static/ { root /data/www; } ``` 更多信息,您可以参考nginx官方文档:http://nginx.org/en/docs/http/ngx_http_core_module.html#location ### 回答2: Nginx是一种开源的高性能HTTP服务器和反向代理服务器,在配置Nginx时,Location指令用于匹配请求的URL,并定义相应的行为。 Nginxlocation指令有两种常见的配置格式:前缀匹配和正则表达式匹配。 前缀匹配是通过设置具体的URL前缀来匹配请求的URL。例如,当请求的URL以/api/开头时,可以使用以下配置进行前缀匹配: ``` location /api/ { // 配置相关指令 } ``` 正则表达式匹配是通过正则表达式来匹配请求的URL。例如,当请求的URL以/user/后面跟着数字时,可以使用以下配置进行正则表达式匹配: ``` location ~ /user/\d+ { // 配置相关指令 } ``` 除了匹配URL,location指令还可以定义其他相关的配置指令,例如proxy_pass用于反向代理,root用于指定静态文件的根目录等。 另外,Nginxlocation指令还支持多个location块的嵌套,这意味着可以对不同的URL设置不同的行为。在多个location,可以通过特定的顺序来确定匹配的优先级,一旦匹配成功,Nginx将使用该location定义的行为。 总的来说,配置Nginxlocation可以根据具体的需求采取不同的匹配方式,并通过相关的配置指令来定义请求URL的行为。合理的location配置能够有效地提高Nginx服务器的性能和安全性。 ### 回答3: 在nginxlocation用于匹配请求URL,并根据匹配结果执行相应的操作,如重定向、代理转发、缓存等。配置location主要包括以下几步: 1. 语法: 在nginx配置文件,添加location语句块,并指定要匹配的URL模式和要执行的操作。语法如下: ``` location 匹配模式 { 要执行的操作; } ``` 2. 匹配模式: 匹配模式可以是精确匹配、前缀匹配或正则匹配。常用的匹配模式有: - 精确匹配:使用“=”符号,如`location = /path`,表示精确匹配/path; - 前缀匹配:使用“^~”符号,如`location ^~ /path`,表示匹配以/path开头的URL; - 正则匹配:使用“~”或“~*”符号,如`location ~ \.php$`,表示匹配以.php结尾的URL。 3. 执行操作: 根据匹配结果,可以执行不同的操作,如: - proxy_pass:将请求转发到指定的代理服务器; - rewrite:重写URL; - return:返回指定的HTTP状态码; - try_files:按顺序尝试访问不同的文件或目录,直到找到匹配的内容。 4. 优先级: nginx根据location的顺序进行匹配,优先匹配到的location生效。可以使用"="、"^~"或"~"等符号改变优先级。 总结: 通过配置nginxlocation,可以实现对请求URL的精确匹配、前缀匹配或正则匹配,并根据匹配结果执行相应的操作。合理配置location能够实现URL的转发、重定向等功能,提高网站的性能和灵活性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值