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的rewrite模块详解
Mar 31 Servers
Nginx+Tomcat实现负载均衡、动静分离的原理解析
Mar 31 Servers
nginx请求限制配置方法
Jul 09 Servers
苹果M1芯片安装nginx 并且部署vue项目步骤详解
Nov 20 Servers
Z-Order加速Hudi大规模数据集方案分析
Mar 31 Servers
Nginx速查手册及常见问题
Apr 07 Servers
Linux下使用C语言代码搭建一个简单的HTTP服务器
Apr 13 Servers
Nginx 安装SSL证书完成HTTPS部署
Apr 28 Servers
nginx 添加http_stub_status_module模块
May 25 Servers
在虚拟机中安装windows server 2008的图文教程
Jun 28 Servers
详解apache编译安装httpd-2.4.54及三种风格的init程序特点和区别
Jul 15 Servers
Flink 侧流输出源码示例解析
Sep 23 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
饭制《星际争霸》Mod:优化游戏机制 增加新单位
2017/07/02 星际争霸
php db类库进行数据库操作
2009/03/19 PHP
百度实时推送api接口应用示例
2014/10/21 PHP
PHP使用fopen与file_get_contents读取文件实例分享
2016/03/04 PHP
PHP生成静态HTML文档实现代码
2016/06/23 PHP
使用PHPExcel导出Excel表
2018/09/08 PHP
javascript 面向对象编程基础:继承
2009/08/21 Javascript
修改jQuery.Autocomplete插件 支持中文输入法 避免TAB、ENTER键失效、导致表单提交
2009/10/11 Javascript
JavaScript window.setTimeout() 的详细用法
2009/11/04 Javascript
将HTMLCollection/NodeList/伪数组转换成数组的实现方法
2011/06/20 Javascript
JavaScript学习笔记记录我的旅程
2012/05/23 Javascript
jquery select多选框的左右移动 具体实现代码
2013/07/03 Javascript
javascript阻止scroll事件多次执行的思路及实现
2013/11/08 Javascript
$("").click与onclick的区别示例介绍
2014/09/25 Javascript
Node.js的Web模板引擎ejs的入门使用教程
2016/06/06 Javascript
浅谈Angular的$q, defer, promise
2016/12/20 Javascript
如何学JavaScript?前辈的经验之谈
2016/12/28 Javascript
jquery实现拖动效果(代码分享)
2017/01/25 Javascript
深入浅析Vue.js计算属性和侦听器
2018/05/05 Javascript
vue v-model动态生成详解
2018/06/30 Javascript
JavaScript实现简单的隐藏式侧边栏功能示例
2018/08/31 Javascript
如何在微信小程序中存setStorage
2019/12/13 Javascript
Vue如何将页面导出成PDF文件
2020/08/17 Javascript
angular共享依赖的解决方案分享
2020/10/15 Javascript
python 使用get_argument获取url query参数
2017/04/28 Python
python万年历实现代码 含运行结果
2017/05/20 Python
python微信跳一跳系列之棋子定位颜色识别
2018/02/26 Python
python实现将文件夹下面的不是以py文件结尾的文件都过滤掉的方法
2018/10/21 Python
python opencv圆、椭圆与任意多边形的绘制实例详解
2020/02/06 Python
python GUI库图形界面开发之PyQt5 MDI(多文档窗口)QMidArea详细使用方法与实例
2020/03/05 Python
解决python便携版无法直接运行py文件的问题
2020/09/01 Python
Python实现小黑屋游戏的完整实例
2021/01/06 Python
街头时尚在线:JESSICABUURMAN
2019/06/16 全球购物
社区敬老月活动总结
2015/05/07 职场文书
如何做好工作总结!
2019/04/10 职场文书
Django rest framework如何自定义用户表
2021/06/09 Python