day49 nginx的高级设置2-location的实战&&root,alias的方法

day49 nginx的高级的设置2-location实战

nginx location 的高级的实战篇

  1. location 是核心重要的功能,可以设置网站的访问的路径,一个web server会有多个路径,那么location就得设置多个。
  2. nginx的location作用是根据用户请求的不同的url执行不同的应用。
  3. 针对用户请求的网站进行匹配,匹配成功后进行对应的操作。



image-20220524154157076

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/

  1. 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 语法的优先级

优先级从高到低

  1. 有符号,才有优先级
  2. 否则都往后
匹配符 匹配的规则 优先级
= 定义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
posted @ 2025-04-19 13:39  国家一级冲浪yzk  阅读(10)  评论(0)    收藏  举报