day49 nginx的高级设置2-location的实战&&root,alias的方法
day49 nginx的高级的设置2-location实战
nginx location 的高级的实战篇
- location 是核心重要的功能,可以设置网站的访问的路径,一个web server会有多个路径,那么location就得设置多个。
- nginx的location作用是根据用户请求的不同的url执行不同的应用。
- 针对用户请求的网站进行匹配,匹配成功后进行对应的操作。
1.先学习语法,清晰location的匹配的规则
1. 先学懂语法,清晰locaiton的匹配规则
Syntax: location [ = | ~ | ~* | ^~ ] uri { ... }
location @name { ... }
Default: —
Context: server, location
Syntax: location [ = | ~ | ~* | ^~ ] uri { ... }
location @name { ... }
Default: —
Context: server, location
官网用法
location = / {
[ configuration A ]
}
#匹配这个规则的url
http://yzk.com/ A
------------------------------
location / {
[ configuration B ]
}
#匹配B这个url的语法的规则
http://yzk.com/hello B
-------------------------------
location /documents/ {
[ configuration C ]
}
# 匹配C这个url
http://yzk.com/documents/hello.txt C
---------------------------------------
location ^~ /images/ {
[ configuration D ]
}
# 匹配D这个url的语法的规则
http://yzk.com/images/hello.txt D
----------------------------------------
location ~* \.(gif|jpg|jpeg)$ {
[ configuration E ]
}
# 匹配E这个规则的语法
http://yzk.com/hello.jpg E
这个我们会在以后部署的网站中经常的实践和练习
利用这4个符号,匹配不同的url进行后面的操作
1.location = / 这个语法的规则 :限制访问的url,只能是后面的符号是 /
例如 10.0.08/
- location /这个语法的规则: 最低级的匹配,只有其他的location都不符合匹配url的规则,才会进入到这,
也可以说 location / 这个属于最低级的匹配的方式
3,location /documents/ 该规定的限制,访问的url必须是/documents/ 具体的用法是:
10.0.0.9:80/documents/hello.html
4.location ~* /images/ 必须是images卡头的url
例如 10.0.0.9:80/images/hello.html
5.location ~* .(gif|png|jpg)$ 匹配以括号里面的内容结尾url
例如 10.0.0.9:80/hello.jpg
2.location 语法的优先级
优先级从高到低
- 有符号,才有优先级
- 否则都往后
匹配符 | 匹配的规则 | 优先级 |
---|---|---|
= | 定义url和位置的精确的匹配 | 1 |
^~ | 以某个字符开头,不检查正则,(区分大小写) | 2 |
~ | 区分大小写的正则的匹配 | 3 |
~* | 不区分大小写的正则的匹配 | 4 |
4个规则
生成具体的location的匹配的规则
# 配置的内容如下
server{
listen 80;
server_name _;
# 这是最低级的匹配,不符合其他要求的location就来这
#这个的话属于通用的url的规则
location /{
return 200 "location / \n"
}
#优先级最,等于括号后面可以指定具体的url
location =/ {
return 200 "location = / \n"
}
# 以/documents/开头的url,来这里,如有符合的location,则以其他的优先
location /documents/ {
return 200 "location /documents/ \n"
}
#匹配任何 /images/开头的请求,不匹配正则
location ^~ /images/ {
return 200 "location ^~ /images/ \n"
}
# 匹配任何.png结尾的请求,
location ~* \.(gif|png|jpg)${
return 200 "location ~*\.(gif|png|jpg) \n"
}
access_log off;
}
配置好虚拟主机后,进行url的设置的访问,查看结果
精确匹配:
[root@master-61 ~]# curl 10.0.0.9:22333
location = /
[root@master-61 ~]# curl 10.0.0.9:22333/
location = /
-------------------》 相当于去找对应的url
#最低级的匹配,没有location匹配上,直接去找location / 相当于兜底的存在
[root@master-61 ~]# curl 10.0.0.9:22333/hfiuheiwuhf
location /
[root@master-61 ~]# curl 10.0.0.9:22333/hehehheheheh
location /
[root@master-61 ~]# curl 10.0.0.9:22333/我是你爸爸
location /
# 指定url的匹配,指定以/documents/开头的url
# 首先你的客户端url 以/documents/开头的才行
[root@master-61 ~]# curl 10.0.0.9:22333/documents/
location /documents/
[root@master-61 ~]# curl 10.0.0.9:22333/documents/我是你吗
location /documents/
# 匹配,第二个优先级location ^~ 匹配指定的url是/images/
[root@master-61 ~]# curl 10.0.0.9:22333/images/
location ^~ /images/
[root@master-61 ~]# curl 10.0.0.9:22333/images/hello-world
location ^~ /images/
#匹配结尾
[root@master-61 ~]# curl 10.0.0.9:22333/images/hello-world/hello.jpg
location ^~ /images/
[root@master-61 ~]# curl 10.0.0.9:22333/hello-world/hello.jpg
location ~* \.(gif|jpg|jpeg)
你看到优先级了 ,匹配开头的的优先级大于匹配结尾的优先级
#测试不区分大小写
[root@master-61 ~]# curl 10.0.0.9:22333/hello-world/hello.JPG
location ~* \.(gif|jpg|jpeg)
看到这,理解 不区分大小写,以jpg,gif,jpeg结尾的url,
做一个总结
-
区分大小写
-
- 不区分大小写
前言
学习基础的语法,是最重要的,也是比较难的环节,多练,都看,多记
明天开始nginx基础语法就结束了,开始实战型部署,LNMP架构,以练习居多,吸收这些知识点。
location 中的root和alias的实战
1. 明确location是根据用户访问的具体的url来决定做什么事
2,要做的是,返回数据给用户看
(问题是在于,你通过什么语句,把nginx上的数据返回给用户呢)
# 已知的语法
server {
listen 33555;
server_name _;
#你现在需要设置
#访问10.0.0.9:33555/static/yzk.jpg
# 有什么写法可以返回给用户看到呢/
#当前有一个代码的目录,叫做/huya/ 要求静态的数据放在这个目录下。
#有一个图片发在这个目录下 /huya/static/yzk.jpg
#匹配以/static/开头的url
#也就是用户访问10.0.0.9/static/yzk.jpg
方法1用 root 的方法
方法2用 alais 的方法
}
root方法
location ^~ /static/ {
root /huya/;
}
#这个是正确的写法,
root的特点是会将 /static/自动的填充到 /huya/下面
也就是填充到网页的根目录下,认为他是一个目录
-----------------------------------------------------
下面是root的错误的写法
location ^~ /static/ {
root /huya/static/;
}
这个写法就等于你把资源放在:
/huya/static/static/yzk.jpg
#这就相当于再后面自动填充了一个。就错了
1, 明确用户访问的url
10.0.0.9:33555/static/yzk.jpg
2, 明确端口
listen 33555
3,检查location 的配置 是否正确
location ^~ /static/ {
root /huya/;
}
4,自己要明确资源明确的目录的位置
/huya/static/yzk.jpg
alias参数的用法
alias 也就是别名的意思
1. 首先用户访问的依旧是
10.0.0.9:33555/static/yzk.jpg
2.修改nginx的配置的文件
alias 的正确的写法
location ^~ /static/ {
alias /huya/static/;
}
将10.0.0.9:3355/static/
/static/ 替换为 location ^~ /static/
然后就去再/huya/static/ 找到 yzk.jpg
解释
第二种的写法,alias别名的写法
alias的作用,别名将location匹配url
($uri 变量提取的字符串信息) 替换为如下alias设置的目录
重要的是 明确数据是放在/huya/static/yzk.jpg