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实现限制某IP短时间访问次数
Mar 31 Servers
Mac环境Nginx配置和访问本地静态资源的实现
Mar 31 Servers
Nginx解决403 forbidden的完整步骤
Apr 01 Servers
利用Nginx代理如何解决前端跨域问题详析
Apr 02 Servers
配置nginx 重定向到系统维护页面
Jun 08 Servers
nginx刷新页面出现404解决方案(亲测有效)
Mar 18 Servers
Apache Hudi的多版本清理服务彻底讲解
Mar 31 Servers
Dashboard管理Kubernetes集群与API访问配置
Apr 01 Servers
服务器间如何实现文件共享
May 20 Servers
zabbix配置nginx监控的实现
May 25 Servers
ubuntu下常用apt命令介绍
Jun 05 Servers
在windows server 2012 r2中安装mysql的详细步骤
Jul 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
虫族 Zerg 魔法科技
2020/03/14 星际争霸
php 什么是PEAR?(第三篇)
2009/03/19 PHP
PHP高级编程实例:编写守护进程
2014/09/02 PHP
php 获取文件行数的方法总结
2016/10/11 PHP
js 页面执行时间计算代码
2009/03/04 Javascript
Javascript 继承机制实例
2009/08/12 Javascript
JQuery动态给table添加、删除行 改进版
2011/01/19 Javascript
js前台分页显示后端JAVA数据响应
2013/03/18 Javascript
加载远程图片时,经常因为缓存而得不到更新的解决方法(分享)
2013/06/26 Javascript
xmlhttp缓存清除的2种解决方法
2013/12/13 Javascript
jquery实现鼠标拖动图片效果示例代码
2014/01/09 Javascript
javascript动态判断html元素并执行不同的操作
2014/06/16 Javascript
JavaScript中实现sprintf、printf函数
2015/01/27 Javascript
jQuery插件multiScroll实现全屏鼠标滚动切换页面特效
2015/04/12 Javascript
仅一个form表单 js实现注册信息依次填写提交功能
2016/06/12 Javascript
js实现砖头在页面拖拉效果
2020/11/20 Javascript
jquery实现点击页面回到顶部
2016/11/23 Javascript
ES6学习之变量的两种命名方法示例
2017/07/18 Javascript
vue 2.8.2版本配置刚进入时候的默认页面方法
2018/09/21 Javascript
vue Cli 环境删除与重装教程 - 版本文档
2020/09/11 Javascript
python和shell变量互相传递的几种方法
2013/11/20 Python
python分析apache访问日志脚本分享
2015/02/26 Python
Python和Java进行DES加密和解密的实例
2018/01/09 Python
Python实现常见的回文字符串算法
2018/11/14 Python
用Python将结果保存为xlsx的方法
2019/01/28 Python
python爬取Ajax动态加载网页过程解析
2019/09/05 Python
Python 中 -m 的典型用法、原理解析与发展演变
2019/11/11 Python
python根据文本生成词云图代码实例
2019/11/15 Python
python实现拉普拉斯特征图降维示例
2019/11/25 Python
Python函数基本使用原理详解
2020/03/19 Python
安装Anaconda3及使用Jupyter的方法
2020/10/27 Python
python实现xml转json文件的示例代码
2020/12/30 Python
是否有自动比较结构的方法
2015/06/03 面试题
高校毕业生自我鉴定
2013/10/27 职场文书
安全生产月宣传标语
2014/10/06 职场文书
深入理解以DEBUG方式线程的底层运行原理
2021/06/21 Java/Android