nginx 配置指令之location使用详解


Posted in Servers onMay 25, 2022

Nginx是支持世界上所有网站三分之一的Web服务器。因为轻巧,模块化,用户友好的配置格式以强大的反向代理能力,Nginx迅速取代其他Web服务器成了互联网上最常用Web服务器之。作为一个门户和对外暴露的入口,Nginx也是Web服务在保障企业服务在性能和安全方面功不可没,虽然Nginx也暴露过一些漏洞(比如CVE-2013-4547,CVE-2017-7529,CVE-2018-16843/16844,CVE-2019-9516和CVE-2020-12440等),但是基本上都无法直接(难于)利用。但是没有漏洞,不等于不能被利用(同样有漏洞,不等于可以利用)。Nginx最大的安全问题并不是其安全漏洞,而是在运维上面,尤其是错误配置导致的问题。本文我们就介绍nginx 配置指令之location使用。

前言

location 指令是http模块中非常重要的配置指令之一,Location是Nginx中的块级指令(block directive),通过配置Location指令块,可以决定客户端发过来的请求URI如何处理(是映射到本地文件还是转发出去)及被哪个location处理

server { 
	listen 80; 
	server_name localhost; 
	location / { 
	}
	location /abc{
	}
	 ... 
 }

location

用来设置请求的 URI

nginx 配置指令之location使用详解

配置策略

  • uri变量是待匹配的请求字符串,可以不包含正则表达式,也可以包含正则表达式;
  • nginx服务器在搜索匹配location的时候,是先使用不包含正则表达式进行匹配,找到一个匹配度最高的一个,然后在通过包含正则表达式的进行匹配;
  • 如果能匹配到直接访问,匹配不到,就使用刚才匹配度最高的那个location来处理请求;

具体属性介绍

1、不带符号

要求必须以指定模式开始

server {
	listen 80;
	server_name 127.0.0.1;
	location /abc {
		default_type text/plain;
		return 200 "access success";
	}
}

在这种情况下,只要是以 /abc开头的都能被匹配到,以下访问都是正确的

http://IP/abc
http://IP/abc?p1=TOM
http://IP/abc/
http://IP/abcdef

nginx 配置指令之location使用详解

2、“= ”

= :用于不包含正则表达式的uri前,必须与指定的模式精确匹配

server {
	listen 80;
	server_name 127.0.0.1;
	location = /abc {
		default_type text/plain;
		return 200 "access success";
	}
}

在这种情况下,访问的路径必须是以 /abc开头才能正确被访问,如下是正常的,

nginx 配置指令之location使用详解

 但是如果换成其他的路径,就不对了

nginx 配置指令之location使用详解

3、“~ ”

  • ~ : 用于表示当前uri中包含了正则表达式,并且区分大小写 ~*: 用于表示当前uri中包含了正则表达式,并且不区分大小写;
  • 换句话说,如果uri包含了正则表达式,需要用上述两个符合来标识;

配置案例

server {
	listen 80;
	server_name 127.0.0.1;
	location ~^/abc\w$ {
		default_type text/plain;
		return 200 "access success";
	}
}
server {
	listen 80;
	server_name 127.0.0.1;
	location ~*^/abc\w$ {
		default_type text/plain;
		return 200 "access success";
	}
}

^~: 用于不包含正则表达式的 uri 前,功能和不加符号的一致,唯一不同的是,如果模式匹配,那么就停止搜索其他模式了。

到此这篇关于nginx 配置指令之location使用的文章就介绍到这了!


Tags in this post...

Servers 相关文章推荐
nginx反向代理时如何保持长连接
Mar 31 Servers
Filebeat 采集 Nginx 日志的方法
Mar 31 Servers
Nginx Rewrite使用场景及配置方法解析
Apr 01 Servers
nginx配置虚拟主机的详细步骤
Jul 21 Servers
Nginx部署vue项目和配置代理的问题解析
Aug 04 Servers
Nginx隐藏式跳转(浏览器URL跳转后保持不变)
Apr 07 Servers
阿里云日志过滤器配置日志服务
Apr 09 Servers
CentOS安装Nginx并部署vue
Apr 12 Servers
idea下配置tomcat避坑详解
Apr 12 Servers
Windows Server 2012 修改远程默认端口3389的方法
Apr 28 Servers
Windows Server 2019 域控制器安装图文教程
Apr 28 Servers
Linux中文件的基本属性介绍
Jun 01 Servers
zabbix配置nginx监控的实现
May 25 #Servers
nginx 添加http_stub_status_module模块
May 25 #Servers
docker 制作mysql镜像并自动安装
May 20 #Servers
阿里云服务器Ubuntu 20.04上安装Odoo 15
May 20 #Servers
Apache SeaTunnel实现 非CDC数据抽取
May 20 #Servers
apache ftpserver搭建ftp服务器
May 20 #Servers
服务器间如何实现文件共享
May 20 #Servers
You might like
php中取得文件的后缀名?
2012/02/20 PHP
PHP实现数组递归转义的方法
2014/08/28 PHP
Zend Framework教程之MVC框架的Controller用法分析
2016/03/07 PHP
PHP实现的简单对称加密与解密方法实例小结
2017/08/28 PHP
javascript操作cookie_获取与修改代码
2009/05/21 Javascript
深入理解JavaScript系列(14) 作用域链介绍(Scope Chain)
2012/04/12 Javascript
jquery bind(click)传参让列表中每行绑定一个事件
2014/08/06 Javascript
常用的JavaScript WEB操作方法分享
2015/02/28 Javascript
JavaScript实现横向滑出的多级菜单效果
2015/10/09 Javascript
Javascript中神奇的this
2016/01/20 Javascript
浅谈jQuery中的$.extend方法来扩展JSON对象
2017/02/12 Javascript
原生JS+Canvas实现五子棋游戏实例
2017/06/19 Javascript
微信小程序图片选择区域裁剪实现方法
2017/12/02 Javascript
Vue入门之数量加减运算操作示例
2018/12/11 Javascript
微信小程序五子棋游戏的悔棋实现方法【附demo源码下载】
2019/02/20 Javascript
使用JQuery自动完成插件Auto Complete详解
2019/06/18 jQuery
react国际化化插件react-i18n-auto使用详解
2020/03/31 Javascript
Vue-cli打包后部署到子目录下的路径问题说明
2020/09/02 Javascript
Python的函数的一些高阶特性
2015/04/27 Python
使用pandas对矢量化数据进行替换处理的方法
2018/04/11 Python
pandas 数据实现行间计算的方法
2018/06/08 Python
Python从文件中读取指定的行以及在文件指定位置写入
2019/09/06 Python
Python接口测试文件上传实例解析
2020/05/22 Python
Python脚本实现Zabbix多行日志监控过程解析
2020/08/26 Python
FILA斐乐中国官方商城:意大利运动品牌
2017/01/25 全球购物
美国NBA官方商店:NBA Store
2019/04/12 全球购物
Currentbody德国站:健康与美容技术专家
2020/04/05 全球购物
新媒传信软件测试面试题
2013/02/24 面试题
董事长秘书职责
2014/01/31 职场文书
经典的毕业生自荐信范文
2014/04/14 职场文书
安全生产大检查方案
2014/05/07 职场文书
关于建议书的格式范文
2014/05/20 职场文书
2015年秋季运动会前导词
2015/07/20 职场文书
2016年政治理论学习心得体会
2016/01/25 职场文书
《和时间赛跑》读后感3篇
2019/12/16 职场文书
Python TypeError: ‘float‘ object is not subscriptable错误解决
2022/12/24 Python