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
nginx location中多个if里面proxy_pass的方法
Mar 31 Servers
Windows下使用Nginx+Tomcat做负载均衡的完整步骤
Mar 31 Servers
Nginx实现高可用集群构建(Keepalived+Haproxy+Nginx)
May 27 Servers
nginx作grpc的反向代理踩坑总结
Jul 07 Servers
OpenStack虚拟机快照和增量备份实现方法
Apr 04 Servers
Linux下使用C语言代码搭建一个简单的HTTP服务器
Apr 13 Servers
Nginx 匹配方式
May 15 Servers
Windows server 2022创建创建林、域树、子域的步骤
Jun 25 Servers
kubernetes集群搭建Zabbix监控平台的详细过程
Jul 07 Servers
详解apache编译安装httpd-2.4.54及三种风格的init程序特点和区别
Jul 15 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
怎样辨别一杯好咖啡
2021/03/03 新手入门
用PHP创建PDF中文文档
2006/10/09 PHP
色色整理的PHP面试题集锦
2012/03/08 PHP
CentOS安装php v8js教程
2015/02/26 PHP
ZF框架实现发送邮件的方法
2015/12/03 PHP
php使用curl通过代理获取数据的实现方法
2016/05/16 PHP
PHP编译configure时常见错误的总结
2017/08/17 PHP
laravel 数据迁移与 Eloquent ORM的实现方法
2019/04/12 PHP
JS动态调用方法名示例介绍
2013/12/18 Javascript
JS表的模拟方法
2015/02/05 Javascript
深入探讨javascript函数式编程
2015/10/11 Javascript
JavaScript数据结构与算法之集合(Set)
2016/01/29 Javascript
AngularJs  Understanding Angular Templates
2016/09/02 Javascript
bootstrap模态框垂直居中效果
2016/12/03 Javascript
微信小程序 安全包括(框架、功能模块、账户使用)详解
2017/01/16 Javascript
JS中静态页面实现微信分享功能
2017/02/06 Javascript
[03:00]DOTA2-DPC中国联赛1月18日Recap集锦
2021/03/11 DOTA
基于随机梯度下降的矩阵分解推荐算法(python)
2018/08/31 Python
Python2和Python3.6环境解决共存问题
2018/11/09 Python
对json字符串与python字符串的不同之处详解
2018/12/19 Python
Python 使用Numpy对矩阵进行转置的方法
2019/01/28 Python
Python编程快速上手——Excel到CSV的转换程序案例分析
2020/02/28 Python
python实现快递价格查询系统
2020/03/03 Python
python利用Excel读取和存储测试数据完成接口自动化教程
2020/04/30 Python
Keras load_model 导入错误的解决方式
2020/06/09 Python
Python实现小黑屋游戏的完整实例
2021/01/06 Python
numpy实现RNN原理实现
2021/03/02 Python
微软美国官方网站:Microsoft美国
2018/05/10 全球购物
加拿大床上用品、家居装饰、厨房和浴室产品购物网站:Linen Chest
2018/06/05 全球购物
Calphalon美国官网:美国顶级锅具品牌
2020/02/05 全球购物
绿色家庭事迹材料
2014/05/01 职场文书
检讨书范文1000字
2015/01/28 职场文书
语文教师个人工作总结
2015/02/06 职场文书
使用numpy实现矩阵的翻转(flip)与旋转
2021/06/03 Python
Python jiaba库的使用详解
2021/11/23 Python
Pycharm远程调试和MySQL数据库授权问题
2022/03/18 MySQL