前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Nginx location匹配规则

Nginx location匹配规则

作者头像
北国风光
发布于 2019-04-11 07:25:40
发布于 2019-04-11 07:25:40
2.2K00
代码可运行
举报
文章被收录于专栏:PHPer 进击PHPer 进击
运行总次数:0
代码可运行

1、语法

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
location [=|~|~*|^~|@] /uri/ {
  ...
} 

2、说明

从上面的语法出发,可以了解到 location 可以区分为三个部分,接下来一个一个的研究一下。

1) [=|~|~*|^~|@]
  • = : 表示精确匹配后面的url
  • ~ : 表示正则匹配,但是区分大小写
  • ~* : 正则匹配,不区分大小写
  • ^~ : 表示普通字符匹配,如果该选项匹配,只匹配该选项,不匹配别的选项,一般用来匹配目录
  • @ : "@" 定义一个命名的 location,使用在内部定向时,例如 error_page

上面定义了几个不同的符号,表示不同的匹配规则,那么先后顺序呢?

  1. = 前缀的指令严格匹配这个查询。如果找到,停止搜索;
  2. 所有剩下的常规字符串,最长的匹配。如果这个匹配使用 ^~ 前缀,搜索停止;
  3. 正则表达式,在配置文件中定义的顺序;
  4. 如果第 3 条规则产生匹配的话,结果被使用。否则,使用第 2 条规则的结果。
测试示例1:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
location = /world {
    return 600;
}

location = /hello {
    return 600;
}

location ~ /hellowo {
    return 602;
}

location ^~ /hello {
    return 601;
}
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
- 请求 localhost/world 返回600
- 请求 localhost/world2 localhost/test/world 返回其他
- 请求 localhost/hello  返回600
- 请求 localhost/hello/123 返回601
- 请求 localhost/hellow 返回601
- 请求 localhost/hellowo 返回601
- 请求 localhost/test/hellowo  返回602
- 请求 localhost/test/hello 返回其他

因此可以知道:

  • = 是精确完整匹配,且优先级最高;
  • 正则匹配时,如果 ~ 和 ^~ 同时匹配规则,则 ^~ 优先;
  • ^~ 这个规则不会匹配请求 url 中后面的路径,如上面的 /test/hello 没有匹配上
  • ^~ 不支持正则,和 = 相比,范围更广,hellowo 是可以被 ^~ 匹配,但是 = 不会匹配;
  • ~ 路径中只要包含就可以匹配,如上面的 /test/hellowo 返回了 602
测试示例2:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
location ~ /hello {
  return 602;
}

location ~ /helloworld {
  return 601;
}
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
- 请求 localhost/world/helloworld 返回 602
- 请求 localhost/helloworld 返回 602

调整上面的顺序

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
location ~ /helloworld {
  return 601;
}

location ~ /hello {
  return 602;
}
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
- 请求 localhost/helloworld 返回601
- 请求 localhost/world/helloworld 返回601
- 请求 localhost/helloWorld 返回602

所以同时正则匹配时

  • 放在前面的优先匹配
  • 注意如果不区分大小写时,使用 ~*
  • 尽量将精确匹配的放在前面
测试示例3:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
location ^~ /hello/ {
  return 601;
}

location /hello/world {
  return 602;
}

这种场景中,存在一个没有符合的路由规则,那么实际的测试是怎样呢?

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
- http://localhost/hello/wor 返回601
- http://localhost/hello/world 返回602
- http://localhost/hello/world23 返回602
- http://localhost/hello/world/123 返回602

从上面的示例可以看出

  • 没有符合时,全匹配是优先 ^~ 的
2) [uri]

这里主要填的是需要匹配的 path 路径,根据前面的符号,这里可以填写精确到 path 路径,也可以填正则表达式,下面则主要针对正则进行说明

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
. : 匹配除换行符以外的任意字符
? : 重复0次或1+ : 重复1次或更多次
* : 重复0次或更多次
\d :匹配数字
^ : 匹配字符串的开始
$ : 匹配字符串的介绍
{n} : 重复n次
{n,} : 重复n次或更多次
[c] : 匹配单个字符c
[a-z] : 匹配a-z小写字母的任意一个
小括号()之间匹配的内容,可以在后面通过$1来引用,$2表示的是前面第二个()里的内容。正则里面容易让人困惑的是\转义特殊字符。

路由转发

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
请求 path 匹配只是第一步,匹配完成之后,如何将请求转发给其它的 web 服务呢?

1、反向代理

通常可见的一种使用姿势就是使用 nginx 代理请求,转发到内部的其它 web 服务上

主要通过 prixy_pass 来实现

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
location ^~ /webs {
    proxy_pass http://127.0.0.1:8080/webs;
}

上面规则的含义是,将所有以 webs 开头的请求,转发到 8080 端口的 web 服务上。

上面是直接写死转发到一个 ip 上,如果是多个机器提供服务,可以这样配置

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
## 下面放在http的括号内,作为第一层
upstream test.online {
    server 47.106.81.116:8080 weight=1;
    server 47.106.81.117:8080 weight=1;
}

location ^~ /webs {
    proxy_pass http://test.online;
    proxy_redirect default;
}

2、Rewrite 命令

rewrite功能就是,使用nginx提供的全局变量或自己设置的变量,结合正则表达式和标志位实现url重写以及重定向。

rewrite只能放在server{},location{},if{}中,并且只能对域名后边的除去传递的参数外的字符串起作用, 如

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
http://blog.muzixizao.com/a/we/index.php?id=1&u=str

只对/a/we/index.php重写。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
语法: rewrite regex replacement [flag];

示例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
location ^~ /hexo {
  root '/Users/yihui/GitHub/';
}

location ~ /hello {
  rewrite ^(/hello).*$ /hexo/public/index.html last;
  return 603;
}

将hello开头的,全部转发到/hexo/public/index.html

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018-10-24 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
SAP最佳业务实践:FI–总账(156)-5显示、对账
4.6 S_ALR_87012289显示简要凭证日记帐 简要凭证日记帐以表的形式为所选凭证显示凭证抬头和项目中最重要的数据。该清单可用作简要日记帐,并且与科目余额进行对帐(会计对帐)。 所选期间的凭证已过帐。 角色:总帐会计 会计核算 - 财务会计 -总账- 信息系统 -总帐报表 (新) - 凭证-常规-简要凭证日记账 1. 在 简要凭证日记帐 屏幕上,进行以下输入: 字段名称用户操作和值注释公司代码1000 会计年度<会计年度>例如:本年度分类帐0L选择您感兴趣的分类帐;如果未输入任何内容,则会
SAP最佳业务实践
2018/03/28
3K0
SAP最佳业务实践:FI–总账(156)-5显示、对账
SAP最佳业务实践:FI–总账(156)-3记账
4 流程步骤 4.1 FB50过帐总帐会计科目凭证 您收到了必须在 SAP 系统中手动过帐的总帐科目凭证。 角色:总帐会计 会计核算 -财务会计 -总账 - 单据录入- 输入总帐科目凭证 1.
SAP最佳业务实践
2018/03/28
2.4K0
SAP最佳业务实践:FI–总账(156)-3记账
SAP最佳业务实践:FI–总账(156)-6冲销
4.9 冲销凭证 本业务情景描述了冲销 FI 凭证的步骤。在这个过程中,系统将生成会计凭证、向现有凭证添加信息,并更新受影响的分类帐中的业务额。 系统支持下列类型的冲销: 单独冲销 批量冲销 FI 凭证已过帐,且必须进行冲销。 4.9.1 FB08冲消凭证 – 单个冲消 您可以冲销在财务会计中所创建的凭证。 凭证已过帐。 角色:总帐会计 会计核算 -财务会计 -总账 -凭证 -冲销 -单一冲销 1. 在 冲销凭证:抬头数据屏幕上,进行以下输入: 字段名称用户操作和值注释凭
SAP最佳业务实践
2018/03/28
2K0
SAP最佳业务实践:FI–总账(156)-6冲销
SAP最佳业务实践:FI–总账(156)-8清帐
4.13 F.13帐户维护:自动清算 您可以在该步骤中定期清算未清的总帐科目项目。 系统包含可清算的未清项目。这说明未清项目必须匹配事务 F.13 文档中描述的标准: 根据标准公司代码、科目编号和货
SAP最佳业务实践
2018/03/28
3.1K0
SAP最佳业务实践:FI–总账(156)-8清帐
SAP最佳业务实践:FI–总账(156)-2流程概览
1 用途 总帐会计主要用于提供外部会计核算和科目的综合情况。在与公司所有其他操作范围相集成的软件系统中,记录所有的业务交易(初始过帐和内部会计核算中的结算),从而确保会计核算数据的完整性和准确性。 SAP FI 总帐会计具有以下特点: 自由选择级别:集团公司或公司 自动并同步过帐相应的“总帐会计”科目(对帐科目)中所有的子分类帐项目 同步更新“总帐会计”和成本会计区域 实时评估和报告当前的会计数据、科目显示形式、财务报表(含不同的财务报表版本和附加分析)。 最重要的是“总帐会计”可以完整记录所有业务事
SAP最佳业务实践
2018/03/28
1.4K0
SAP最佳业务实践:FI–总账(156)-4更改
4.4 FAGLL03显示并更改行项目 显示并更改总帐科目中的行项目。 已在定制中维护行布局变量、总计变量和选择字段。 角色:总帐会计 1. 在 总帐科目行项目显示 总帐视图 屏幕上,进行下列
SAP最佳业务实践
2018/03/28
1.5K0
SAP最佳业务实践:FI–总账(156)-4更改
从SAP最佳业务实践看企业管理(184)-FI-156总账
FI156总账 总帐会计主要用于提供外部会计核算和科目的综合情况。在与公司所有其他操作范围相集成的软件系统中,记录所有的业务交易(初始过帐和内部会计核算中的结算),从而确保会计核算数据的完整性和准确性。 SAPFI总帐会计具有以下特点: · 自由选择级别:集团公司或公司 · 自动并同步过帐相应的“总帐会计”科目(对帐科目)中所有的子分类帐项目 · 同步更新“总帐会计”和成本会计区域 · 实时评估和报告当前的会计数据、科目显示形式、财务报表(含不同的财务报表版本和附加分析)。 最重要的是“总帐会计”可以完整记
SAP最佳业务实践
2018/03/27
7020
SAP最佳业务实践:FI–资产会计(162)-19定期处理-AFAB折旧过帐运行
4.7.3 AFAB折旧过帐运行 起初过帐至固定资产会更改资产会计中的计划折旧。然而,资产负债表和损益表的累计折旧科目和折旧科目并不会立即更新。直到执行定期折旧过帐运行时,总计划折旧才会过帐至财务会计(仅创建汇总凭证)。 折旧过帐应定期运行(每年、每半年、每季度或每月)。执行更新运行时,必须从后台启动程序。 系统按照定制中指定的过帐周期为每个折旧范围和科目组创建过帐凭证。对于过帐日期,系统使用 正常期间的期间最后一天(无特定期间) 特定期间的会计年度最后一天 在定制中已定义用于过帐折旧的凭证类型 AF。在
SAP最佳业务实践
2018/03/30
3.9K0
SAP最佳业务实践:FI–资产会计(162)-19定期处理-AFAB折旧过帐运行
SAP最佳业务实践:FI–凭证分割(165)-2业务处理
在线拆分随新增的总帐会计一起提供。通过参考科目分配对象拆分原始过帐来使用附加科目分配对象增强凭证或完成附加过帐。可实时完成过帐(在线)。
SAP最佳业务实践
2018/07/31
3.6K0
SAP最佳业务实践:FI–凭证分割(165)-2业务处理
SAP最佳业务实践:FI–资产会计(162)-9 ABZU增价
4.5.3 ABZU增价 增价 一般被理解为对资产评估的后续更改(折旧冲销)。增价使固定资产的帐面值得以提高。当与基于帐面净值的折旧方法一起使用时,增价会提高计划折旧。在会计年度更改过程中,直到年末前过帐的增价使用折旧金额进行平衡。 增价仅为累计折旧(即上一年的折旧)而创建。同时为增价配置各种标准事务类型。根据待更正的折旧类型(例如:普通折旧或特殊折旧)和待过帐的折旧范围(例如:仅帐面折旧),这些事务类型互不相同。 相当于冲销以前年度的折旧。 您可以选择功能范围 并为每个折旧范围输入不同的增价金额。 在下
SAP最佳业务实践
2018/03/30
3.4K0
SAP最佳业务实践:FI–资产会计(162)-9 ABZU增价
SAP最佳业务实践:FI–总账(156)-1业务概览
用途 此业务情景描述了财务会计核算和帐务处理的主要功能。 优点 所有业务交易都可以和总账集成并更新总账记录,从而确保会计账务数据的完整性和准确性 处理流程中涉及的公司角色: 总帐会计 财务主管 包含的关键处理流程: 总帐记账 显示凭证日记帐 显示总帐余额(清单) 执行周期性业务记账 帐户维护:自动和手动结算 总账 总帐会计主要用于处理财务会计核算和科目管理。公司所有运营业务交易会记录在系统中,并实时与总账同步更新(包括内部核算业务影响总账的部分),从而确保会计核算数据的完整性和准确性。 SAP
SAP最佳业务实践
2018/03/28
1.3K0
SAP最佳业务实践:FI–总账(156)-1业务概览
SAP最佳业务实践:FI–应收帐款(157)-4 FB70过账客户发票
4.5 过帐客户发票 客户发票可从销售与分销模块(SD) 或财务模块(FI)创建. SAP BestPractices 解决方案中, 若销售与分销模块(SD)在实施范围内,则客户发票由销售与分销模块(SD)创建;若销售与分销模块(SD)不在实施范围内,则客户发票由财务模块(FI)创建。 若销售与分销模块(SD)在实施范围内,进行步骤 用销售与分销模块的开票功能过帐客户发票。这样就保证了销售模块与财务/控制会计的一体性和整合性。 若销售与分销模块(SD)不在实施范围内,进行步骤 从财务会计模块过帐客户发票。
SAP最佳业务实践
2018/03/28
2.8K0
SAP最佳业务实践:FI–应收帐款(157)-4 FB70过账客户发票
SAP最佳业务实践:FI–应收帐款(157)-20 FD10N客户余额
4.21 FB03显示客户会计凭证 显示客户会计(FI) 凭证。 存在会计凭证。 角色:应收会计 会计核算-财务会计-应收账款-凭证®显示 1. 仅适用于SAP图形用户界面 (SAP GUI)
SAP最佳业务实践
2018/03/29
3.2K0
SAP最佳业务实践:FI–应收帐款(157)-20 FD10N客户余额
SAP最佳业务实践:FI–资产会计(162)-8 ABNAN后资本化
4.5.2 ABNAN后资本化 后资本化是指对固定资产的购置和生产成本 (APC)进行后续更正。例如:如果您在正结算的会计年度中忘记将与资产购置或装配有关的费用和成本添加到它的 APC,则需要此种类型的更正。此示例适用于部分资产和整个复杂固定资产。 下面的示例是以整个复杂固定资产为基础的。 请使用符合以下标准的固定资产: 资产分类所有资产分类, 除了95020资本化日期以前年度接管价值无交易代码AS01 (细节可参见 业务情景 155.02 ),选择 资本化记账 会计核算 -财务会计-固定资产-过帐-记帐资
SAP最佳业务实践
2018/03/30
4.4K0
SAP最佳业务实践:FI–应付账款(158)-6 FB65供应商贷项凭证
4.6 FB65参考发票输入供应商贷项凭证 收到有关交货不足的供应商贷项凭证。该贷项凭证必须在 SAP 系统中手动过帐。 角色:应付会计 会计核算-财务会计-应付账款- 单据录入- 贷项凭证 1. 如果还没有在系统中将其设置为缺省值,则输入下列数据: 字段名称用户操作和值注释公司*1000 2. 选择 回车。 3. 在 输入供应商贷方备注:公司代码1000 屏幕上,进行以下输入: 基本数据: 字段名称用户操作和值注释供应商*300005凭证日期*例如:当天日期过帐日期*例如:当天日期参照(
SAP最佳业务实践
2018/03/28
2.7K0
SAP最佳业务实践:FI–应付账款(158)-6 FB65供应商贷项凭证
SAP最佳业务实践:FI–资产会计(162)-17定期处理-AIAB在建资产结算
4.7 定期处理 4.7.1 AIAB在建资产的结算 执行本步骤,在建资产将按照结算规则进行结算。 您必须为您想结算的在建资产维护结算规则。 在某些特定的情况下,您可能需要在全部供应商提供其结算发票之前资本化在建资产。这可能有一点难度,尤其是直到会计年度在在建资产资本化之后才过帐结算发票,而预付款已过帐到在建资产时。 通常是先过帐预付款。如果接着在会计年度末但在接收结算发票前需要资本化在建资产,则对预期发票的总金额过帐准备金。直接将这些准备金过帐到资本化资产(有供应商且事务类型为 100 的外部购置)
SAP最佳业务实践
2018/03/30
1.8K0
SAP最佳业务实践:FI–资产会计(162)-17定期处理-AIAB在建资产结算
SAP最佳业务实践:FI–应收帐款(157)-9 F-28手动过帐客户收款
4.10 F-28手动过帐客户收款** 该活动过帐客户的收款。 未清项目已过帐(如果没有发现未清项目,请先用FB70 过账一张发票)。 角色:应收会计 会计核算-财务会计-应收账款- 单据录入- 收款 1. 在 收款记帐:抬头数据 屏幕中,进行以下输入: 字段名称用户操作和值注释凭证日期输入凭证日期例如,当天日期公司代码1000 货币CNY 科目选择要过帐的银行总帐科目。部分银行总帐科目 10020109金额*选择客户发票的金额 例如,7000起息日指定起息日。例如,当天日期未清项选择
SAP最佳业务实践
2018/03/28
5K0
SAP最佳业务实践:FI–应收帐款(157)-9 F-28手动过帐客户收款
SAP最佳业务实践:MM–实际库存/库存盘点和调整(137)-3盘点
4.3 执行库存盘点 仓库主管定期执行库存盘点(手动操作)。 4.4 MI04输入库存盘点 在库存盘点前,使用事务 MMBE 检查物料的库存状况。 角色:仓库主管 后勤-后勤执行-内部仓库处理-库存盘
SAP最佳业务实践
2018/03/28
3.9K0
SAP最佳业务实践:MM–实际库存/库存盘点和调整(137)-3盘点
SAP最佳业务实践:FI–资产会计(162)-6 FB50资产处置-清理
4.4.2 FB50固定资产清理收入 在本步骤中,您可以手工过帐财务凭证或客户发票以记录固定资产清理相关收入。并记录由固定资产清理造成的损益。 会计核算 -财务会计 -总账 - 单据录入-输入总帐科目凭证 1. 在输入公司代码对话框中,如果系统没有进行默认设置,则输入下列数据: 字段名称用户操作和值注释公司代码1000 2. 选择 回车。 3. 在 输入总帐科目凭证:公司代码1000 屏幕上,进行以下输入: 字段名称用户操作和值注释凭证日期<当前日期>例如:当天过帐日期<当前日期>例
SAP最佳业务实践
2018/03/29
1.5K0
SAP最佳业务实践:FI–资产会计(162)-6 FB50资产处置-清理
SAP最佳业务实践:FI–资产会计(162)-4资产购置
4.3 资产购置 外部资产购置是指因向业务合作伙伴购置资产而产生的业务事务(与内部购置 相反)。可以使用以下多种不同方式过帐外部资产的购置: 在与应付帐款 (FI-AP) 集成的资产会计 (FI-AA) 中 在没有与应付帐款集成的资产会计中(过帐至清算科目 – 含或不含清算)。有两种业务情景: a) 接收发票之前购置资产。自动过帐抵销分录。 b) 接收发票之后购置资产。将发票作为未清项目过帐到清算科目。此业务情景在这里不做进一步的描述。有关更多信息,请参阅“应付帐款会计文档 - 158”。 采购低值
SAP最佳业务实践
2018/03/29
2.5K0
SAP最佳业务实践:FI–资产会计(162)-4资产购置
推荐阅读
相关推荐
SAP最佳业务实践:FI–总账(156)-5显示、对账
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验