当前位置: 首页 > news >正文

nginx配置文件中的location详解

location

语法:location [=|~|~*|^~] /uri/ { … } 默认:否

上下文:server

这个指令随URL不同而接受不同的结构。你可以配置使用常规字符串和正则表达式。如果使用正则表达式,你必须使用 ~* 前缀选择不区分大小写的匹配或者 ~ 选择区分大小写的匹配。

确定 哪个location 指令匹配一个特定指令,常规字符串第一个测试。常规字符串匹配请求的开始部分并且区分大小写,最明确的匹配将会被使用(查看下文明白 nginx 怎么确定它)。然后正则表达式按照配置文件里的顺序测试。找到第一个比配的正则表达式将停止搜索。如果没有找到匹配的正则表达式,使用常规字符串的结果。

有两个方法修改这个行为。第一个方法是使用 “=”前缀,将只执行严格匹配。如果这个查询匹配,那么将停止搜索并立即处理这个请求。例子:如果经常发生”/”请求,那么使用 “location = /” 将加速处理这个请求。

第二个是使用 ^~ 前缀。如果把这个前缀用于一个常规字符串那么告诉nginx 如果路径匹配那么不测试正则表达式。

而且它重要在于 NGINX 做比较没有 URL 编码,所以如果你有一个 URL 链接’/images/%20/test’ , 那么使用 “images/ /test” 限定location。

总结,指令按下列顺序被接受: 1. = 前缀的指令严格匹配这个查询。如果找到,停止搜索。 2. 剩下的常规字符串,长的在前。如果这个匹配使用 ^~ 前缀,搜索停止。 3. 正则表达式,按配置文件里的顺序。 4. 如果第三步产生匹配,则使用这个结果。否则使用第二步的匹配结果。

例子:

location = / { # 只匹配 / 查询。 [ configuration A ] } location / { # 匹配任何查询,因为所有请求都已 / 开头。但是正则表达式规则和长的块规则将被优先和查询匹配。 [ configuration B ] } location ^~ /images/ { # 匹配任何已 /images/ 开头的任何查询并且停止搜索。任何正则表达式将不会被测试。 [ configuration C ] } location ~* \.(gif|jpg|jpeg)$ { # 匹配任何已 gif、jpg 或 jpeg 结尾的请求。然而所有 /images/ 目录的请求将使用 Configuration C。 [ configuration D ] }

例子请求:

/ -> configuration A
/documents/document.html -> configuration B /images/1.gif -> configuration C /documents/1.jpg -> configuration D

注意:按任意顺序定义这4个配置结果将仍然一样。

(location =) > (location 完整路径 ) >(location ^~ 路径) >(location ~*, ~ 正则) >(location 部分起始路径) 正则表达式根据配置文件中的前后顺序影响匹配, 前面的优先匹配. 其它则根据匹配长度来优先匹配.

参考: http://wiki.nginx.org/NginxHttpCoreModule#location

转载于:https://www.cnblogs.com/edwardsun/p/3852694.html

相关文章:

  • CakePHP 编程笔记3
  • Floyd模板(详细操作最基础版)
  • Sendmail大全
  • 内核配置备份
  • Query 使用手册
  • 循环冗余校验码CRC,求解步骤
  • 求职中的平常心——Leo网上答疑48
  • 实验三 数据查询(4学时)
  • 北京簋街 美食完全攻略 + 簋街好吃的夜宵去处-----店铺介绍大全
  • 随书赠送的台历样式
  • Interview2---3g
  • 整合Bullet物理引擎到Ogre on iPhone
  • CDMA的定位方式
  • Bullet的3D Max插件
  • 判断字符串中字符最多的那一个及个数
  • download使用浅析
  • iOS 系统授权开发
  • Java程序员幽默爆笑锦集
  • jquery ajax学习笔记
  • XML已死 ?
  • 基于Mobx的多页面小程序的全局共享状态管理实践
  • 前端每日实战:70# 视频演示如何用纯 CSS 创作一只徘徊的果冻怪兽
  • 前端面试之CSS3新特性
  • 手机端车牌号码键盘的vue组件
  • 微信小程序实战练习(仿五洲到家微信版)
  • 在Unity中实现一个简单的消息管理器
  • 如何在招聘中考核.NET架构师
  • ​ 轻量应用服务器:亚马逊云科技打造全球领先的云计算解决方案
  • ​LeetCode解法汇总1410. HTML 实体解析器
  • ​油烟净化器电源安全,保障健康餐饮生活
  • # 学号 2017-2018-20172309 《程序设计与数据结构》实验三报告
  • #QT(串口助手-界面)
  • #每天一道面试题# 什么是MySQL的回表查询
  • (附源码)ssm基于jsp的在线点餐系统 毕业设计 111016
  • (七)c52学习之旅-中断
  • (已解决)vue+element-ui实现个人中心,仿照原神
  • (转)JAVA中的堆栈
  • (转)德国人的记事本
  • (最全解法)输入一个整数,输出该数二进制表示中1的个数。
  • .NET Conf 2023 回顾 – 庆祝社区、创新和 .NET 8 的发布
  • .NET Core WebAPI中使用swagger版本控制,添加注释
  • .NET MVC、 WebAPI、 WebService【ws】、NVVM、WCF、Remoting
  • .NET 中选择合适的文件打开模式(CreateNew, Create, Open, OpenOrCreate, Truncate, Append)
  • .net 重复调用webservice_Java RMI 远程调用详解,优劣势说明
  • .Net环境下的缓存技术介绍
  • .net开发时的诡异问题,button的onclick事件无效
  • .NET中的十进制浮点类型,徐汇区网站设计
  • :not(:first-child)和:not(:last-child)的用法
  • [ IOS ] iOS-控制器View的创建和生命周期
  • [Android Studio 权威教程]断点调试和高级调试
  • [Asp.net MVC]Bundle合并,压缩js、css文件
  • [C]整形提升(转载)
  • [CISCN2019 华北赛区 Day1 Web5]CyberPunk --不会编程的崽
  • [JavaEE系列] wait(等待) 和 notify(唤醒)
  • [NISACTF 2022]join-us