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实现反向代理
Sep 20 Servers
nginx搭建图片服务器的过程详解(root和alias的区别)
Mar 31 Servers
fastdfs+nginx集群搭建的实现
Mar 31 Servers
扩展多台相同的Web服务器
Apr 01 Servers
Nginx下配置Https证书详细过程
Apr 01 Servers
apache基于端口创建虚拟主机的示例
Apr 22 Servers
nginx配置虚拟主机的详细步骤
Jul 21 Servers
nginx安装以及配置的详细过程记录
Sep 15 Servers
Nginx下SSL证书安装部署步骤介绍
Dec 06 Servers
Windows Server 2016 配置 IIS 的详细步骤
Apr 28 Servers
利用Apache Common将java对象池化的问题
Jun 16 Servers
CentOS7 minimal 最小化安装网络设置过程
Dec 24 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之apc
2013/05/15 PHP
PHP中数据库单例模式的实现代码分享
2014/08/21 PHP
wamp安装后自定义配置的方法
2014/08/23 PHP
php使用post数组的键值创建同名变量并赋值的方法
2015/04/03 PHP
PHP时间戳格式全部汇总 (获取时间、时间戳)
2016/06/13 PHP
Laravel5.5新特性之友好报错以及展示详解
2017/08/13 PHP
PHP进阶学习之Geo的地图定位算法详解
2019/06/19 PHP
PHP7新特性
2021/03/09 PHP
同一个表单 根据要求递交到不同页面的实现方法小结
2009/08/05 Javascript
JavaScript高级程序设计 扩展--关于动态原型
2010/11/09 Javascript
javascript实现数字+字母验证码的简单实例
2014/02/10 Javascript
分享Javascript实用方法二
2015/12/13 Javascript
JavaScript生成带有缩进的表格代码
2016/06/15 Javascript
引用jquery框架后出错的解决方法
2016/08/09 Javascript
JavaScript性能优化之函数节流(throttle)与函数去抖(debounce)
2016/08/11 Javascript
js实现图片360度旋转
2017/01/22 Javascript
JavaScript变量Dom对象的所有属性
2020/04/30 Javascript
Python中用于转换字母为小写的lower()方法使用简介
2015/05/19 Python
Python命令启动Web服务器实例详解
2017/02/23 Python
pandas将numpy数组写入到csv的实例
2018/07/04 Python
python使用tcp实现局域网内文件传输
2020/03/20 Python
Python Matplotlib 基于networkx画关系网络图
2019/07/10 Python
Python解压 rar、zip、tar文件的方法
2019/11/19 Python
matlab、python中矩阵的互相导入导出方式
2020/06/01 Python
python的json包位置及用法总结
2020/06/21 Python
css3中的calc函数浅析
2018/07/10 HTML / CSS
Nike瑞士官网:Nike CH
2021/01/18 全球购物
历史系自荐信范文
2013/12/24 职场文书
母亲节感恩寄语
2014/02/21 职场文书
暖通工程师岗位职责
2014/06/12 职场文书
民政局个人整改措施
2014/09/24 职场文书
离婚协议书范文2016
2016/03/18 职场文书
2019通用版新员工入职培训方案!
2019/07/11 职场文书
22句经典语录:送给优柔寡断和胡思乱想的朋友们
2019/12/13 职场文书
Python入门之基础语法详解
2021/05/11 Python
详解Java线程池是如何重复利用空闲线程的
2021/06/26 Java/Android