阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Nginx 之 Location基础理解及实战

145次阅读
没有评论

共计 2214 个字符,预计需要花费 6 分钟才能阅读完成。

由于对 location 不理解,这里总结一下,方便以后查看和学习。

语法规则:location [=|~|~*|^~] /uri/ {…}
= 开头表示精确匹配
^~ 开头表示 uri 以某个常规字符串开头,理解为匹配 url 路径即可。nginx 不对 url 做编码,因此请求为 /static/20%/aa,可以被规则 ^~ /static/ /aa 匹配到(注意是空格)。
~ 开头表示区分大小写的正则匹配
~*  开头表示不区分大小写的正则匹配
!~ 和!~* 分别为区分大小写不匹配及不区分大小写不匹配 的正则 .
/ 通用匹配,任何请求都会匹配到。

多个 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.gif, http://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/ {
# 请求 /static/a.txt 将被映射到实际目录文件: /webroot/res/static/a.txt
root /webroot/res/;
}
location ~* \.(gif|jpg|jpeg|png|css|js|ico)$ {
root /webroot/res/;
}

# 第三个规则就是通用规则,用来转发动态请求到后端应用服务器 #非静态文件请求就默认是动态请求,自己根据实际把握# 毕竟目前的一些框架的流行,带.php,.jsp 后缀的情况很少了。

location / {
proxy_pass http://tomcat:8080/
}以上是基础推荐配置,有一个补充,就是关于转发有一点要注意。例如下面配置,对一个目录转发:
关键在于最后的 /,访问 localhost/outer/in.html,其中 case A 会转发到 tomcat:8080/in.html,而 case B 会转发到 tomcat:8080/outer/in.html,所以务必注意了。

Nginx 的详细介绍:请点这里
Nginx 的下载地址:请点这里

相关阅读

CentOS 6.2 实战部署 Nginx+MySQL+PHP http://www.linuxidc.com/Linux/2013-09/90020.htm

使用 Nginx 搭建 WEB 服务器 http://www.linuxidc.com/Linux/2013-09/89768.htm

搭建基于 Linux6.3+Nginx1.2+PHP5+MySQL5.5 的 Web 服务器全过程 http://www.linuxidc.com/Linux/2013-09/89692.htm

CentOS 6.3 下 Nginx 性能调优 http://www.linuxidc.com/Linux/2013-09/89656.htm

CentOS 6.3 下配置 Nginx 加载 ngx_pagespeed 模块 http://www.linuxidc.com/Linux/2013-09/89657.htm

CentOS 6.4 安装配置 Nginx+Pcre+php-fpm http://www.linuxidc.com/Linux/2013-08/88984.htm

正文完
星哥说事-微信公众号
post-qrcode
 
星锅
版权声明:本站原创文章,由 星锅 2022-01-20发表,共计2214字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中