IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> PHP知识库 -> nginx-location详解 -> 正文阅读

[PHP知识库]nginx-location详解

一、普通匹配

普通location根据使用方法又分为两种,格式如下

1.匹配/

location  / {
	命令序列;
}

解释:括号中定义的表示对当前路径及子路径下的所有对象有效。“优先级最低”
用户所有的请求都能被它匹配到。
location / {   		
	root /bybo;     
}

这说明网页根目录在/bybo
用户所有的请求都能被这个location匹配到

[root@node1 ~]# mkdir /bybo
[root@node1 bybo]# cat index.html 
<h1>bybo.com</h1>

[root@node1 bybo]# cd /usr/local/nginx/conf/vhost/
[root@node1 vhost]# cat bybocom.conf 
server {
	server_name www.bybo.com;
	root  /bybo;
	location / {
		index index.html index.htm;
	}
}

[root@node1 vhost]# nginx -s reload

2.匹配/子路径

例子:
location /bbs {
       root /bybo;
}

这就说明网页根目录是位于  /web/bbs
当用户访问:
	http://127.0.0.1/bbs
	或者
	http://127.0.0.1/bbs/子路径
的时候可以被这个location匹配到
[root@node1 ~]# mkdir /bybo/bbs
[root@node1 ~]# cd /bybo/bbs/
#在/bbs下设置一个默认首页
[root@node1 bbs]# cat index.html 
<h1>bybo/bbs</h1>

#在/bbs下在设置一个存放图片的目录images,然后上传一张图片1.jpg
[root@node1 ~]# mkdir /bybo/bbs/images


#配置nginx
[root@node1 vhost]# cat bybocom.conf 
server {
	server_name www.bybo.com;
	root  /bybo;
	location / {
		index index.html index.htm;
		deny all;  #拒绝所有人访问根
		
	}
	
	location /bbs {  #但是没有限制bbs目录
		index index.html index.htm; 
	}
}

[root@node1 vhost]# nginx -s reload

结果:

访问:
www.bybo.com  403被拒绝

访问:
http://www.bybo.com/bbs/				#成功访问
http://www.bybo.com/bbs/images/1.jpg	#成功访问

例子2:
server {
        server_name www.bybo.com;
        root  /bybo;
        location / {
                index index.html index.htm;
                deny all;

        }

        location /bbs/images {
                index index.html index.htm;

        }
}

[root@node1 vhost]# nginx -s reload

结果:

访问:
	http://www.bybo.com/  		#403 权限被拒绝
	http://www.bybo.com/bbs/	#403 权限被拒绝

访问:
	http://www.bybo.com/bbs/images/1.jpg  #成功访问
	

3.总结

当用户请求的url同时匹配到两段location时,
	最大前缀生效(location /bbs生效)
	如果没有这段(location /bbs) 第一段生效。
	第一段相当于默认策略,因为location / 包含所有的请求,所有的请求都是以  ”/” 开始的

4."=" 匹配

location = /路径 {
	命令序列
}
解释:括号中定义的表示对当前路径有效,子路径不生效(精确匹配指定的路径不包括子路径)。“它的优先级最高。”
一旦匹配到此location ,立即生效。其它location无论是否匹配到请求都不生效。
例子:
location = / {
	rewrite 
}
#只匹配根目录,子路径不匹配
例子1:
server {
        server_name www.bybo.com;
        root  /bybo;
        location  / {
                index index.html index.htm;
        }

        location = / {
                deny all;

        }
}

访问:
	www.bybo.com 				结果:403被拒绝,说明 location = 优先级高
	www.bybo.com/index.html		结果: 正常访问。说明只对当前路径生效
	http://www.bybo.com/a.html	结果: 正常访问。说明只对当前路径生效
	http://www.bybo.com/bbs/images/1.jpg 	结果: 正常访问。说明只对当前路径生效

例子2:
server {
        server_name www.bybo.com;
        root  /bybo;
        location  /bbs {
                index index.html index.htm;
        }

        location = /bbs/ { 
                deny all;
        }
}

 #如果这里这么写location = /bbs 是不生效的
 #如果这里这么写location = /bbs/ 加上了/就生效了,说明它也是限制/bbs/index.html
 
 #访问:
 	http://www.bybo.com/bbs/			#403被拒绝
 	http://www.bybo.com/bbs/index.html	#成功访问
 	http://www.bybo.com/bbs/a.html		#成功访问

总结:

loction = 	限制只限于在浏览器中访问http://www.bybo.com/bbs 路径的时候有作用,只要加了子路径就不生效。

二、正则匹配

1. "~"匹配

~匹配的文件是区分字符 大小写的

location ~ /bbs {
	
}

2. “~*” 匹配

~*匹配的文件是不区分字符大小的

location ~* URI {

}

正则匹配是按照正则location编写的顺序生效的,一旦匹配成功即停止匹配后续的location。

location  ~ /bbs {
	return 400;
}
location ~* /bbs {
	return 500;
}

#网页返回错误信息400


然后将两段配置调换一下位置
location ~* /bbs {
	return 500;
}

location  ~ /bbs {
	return 400;
}
#网页返回错误信息500

三、匹配顺序和生效顺序

匹配顺序和生效顺序是两个概念
当配置中出现多个locaton并且普通和正则都有,那么

1.匹配顺序

(1)先匹配普通location

? 普通location在匹配是按照编辑顺序匹配

(2)在匹配正则location

? 正则location在匹配时按照编辑顺序匹配

但是正则和普通locaiton不按照编辑顺序匹配

2.生效顺序

当普通和正则都存在的情况下,遵循以下原则

(1)如果匹配过程中匹配到了"location =" :nginx会立即生效即停止后续的匹配
(2)如果没有"locaiton =“话
如果匹配到"locatin ^~”。会停止后续的正则匹配
然后最大前缀locaiton生效
最后是location / 生效
(3)如果以上两种location都不存在的话
nginx会匹配所有location后看后续有没有正则locaion
如果后续没有正则locaiton
然后最大前缀locaiton生效
最后是location / 生效

? 如果后续还有正则location
? 一旦匹配成功一条正则locaion,这条会生效,并且会停止后续的正则匹配,还会会覆盖前边的 普通location结果

?

  PHP知识库 最新文章
Laravel 下实现 Google 2fa 验证
UUCTF WP
DASCTF10月 web
XAMPP任意命令执行提升权限漏洞(CVE-2020-
[GYCTF2020]Easyphp
iwebsec靶场 代码执行关卡通关笔记
多个线程同步执行,多个线程依次执行,多个
php 没事记录下常用方法 (TP5.1)
php之jwt
2021-09-18
上一篇文章      下一篇文章      查看所有文章
加:2021-09-14 13:05:46  更:2021-09-14 13:07:58 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 0:42:18-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码