前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >nginx中的location & root & alias & rewrite

nginx中的location & root & alias & rewrite

作者头像
阿dai学长
发布于 2019-04-03 02:26:55
发布于 2019-04-03 02:26:55
2.9K00
代码可运行
举报
文章被收录于专栏:阿dai_linux阿dai_linux
运行总次数:0
代码可运行

location& root & alias 匹配规则

  • 已=开头表示精确匹配 如 A 中只匹配根目录结尾的请求,后面不能带任何字符串。
  • ^~ 开头表示uri以某个常规字符串开头,不是正则匹配
  • ~ 开头表示区分大小写的正则匹配;
  • ~* 开头表示不区分大小写的正则匹配
  • / 通用匹配, 如果没有其它匹配,任何请求都会匹配到
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
location  = / {
  # 精确匹配 / ,主机名后面不能带任何字符串
  [ configuration A ] 
}

location  / {
  # 因为所有的地址都以 / 开头,所以这条规则将匹配到所有请求
  # 但是正则和最长字符串会优先匹配
  [ configuration B ] 
}

location /documents/ {
  # 匹配任何以 /documents/ 开头的地址,匹配符合以后,还要继续往下搜索
  # 只有后面的正则表达式没有匹配到时,这一条才会采用这一条
  [ configuration C ] 
}

location ~ /documents/Abc {
  # 匹配任何以 /documents/ 开头的地址,匹配符合以后,还要继续往下搜索
  # 只有后面的正则表达式没有匹配到时,这一条才会采用这一条
  [ configuration CC ] 
}

location ^~ /images/ {
  # 匹配任何以 /images/ 开头的地址,匹配符合以后,停止往下搜索正则,采用这一条。
  [ configuration D ] 
}

location ~* \.(gif|jpg|jpeg)$ {
  # 匹配所有以 gif,jpg或jpeg 结尾的请求
  # 然而,所有请求 /images/ 下的图片会被 config D 处理,因为 ^~ 到达不了这一条正则
  [ configuration E ] 
}

location /images/ {
  # 字符匹配到 /images/,继续往下,会发现 ^~ 存在
  [ configuration F ] 
}

location /images/abc {
  # 最长字符匹配到 /images/abc,继续往下,会发现 ^~ 存在
  # FG的放置顺序是没有关系的
  [ configuration G ] 
}

location ~ /images/abc/ {
  # 只有去掉 config D 才有效:先最长匹配 config G 开头的地址,继续往下搜索,匹配到这一条正则,采用
    [ configuration H ] 
}

location ~* /js/.*/\.js
  • 顺序(no优先级:) (location =) > (location 完整路径) > (location ^~ 路径) > (location ~,~* 正则顺序) > (location 部分起始路径) > (/)
  • 使用建议
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
所以实际使用中,个人觉得至少有三个匹配规则定义,如下:
#直接匹配网站根,通过域名访问网站首页比较频繁,使用这个会加速处理,官网如是说。
#这里是直接转发给后端应用服务器了,也可以是一个静态首页
# 第一个必选规则
location = / {
    proxy_pass http://tomcat:8080/index
}
# 第二个必选规则是处理静态文件请求,这是nginx作为http服务器的强项
# 有两种配置模式,目录匹配或后缀匹配,任选其一或搭配使用
location ^~ /static/ {
    root /webroot/static/;
}
location ~* \.(gif|jpg|jpeg|png|css|js|ico)$ {
    root /webroot/res/;
}
#第三个规则就是通用规则,用来转发动态请求到后端应用服务器
#非静态文件请求就默认是动态请求,自己根据实际把握
#毕竟目前的一些框架的流行,带.php,.jsp后缀的情况很少了
location / {
    proxy_pass http://tomcat:8080/
}
  • location & root location和root组合相当于在root指定目录下进行location匹配,location所匹配内容必须保证在root指定目录的子目录,否则配置无效,而且location只能向下匹配,不能匹配location指定目录上一级目录中的内容。
  • location & alias location与alias组合,需要保证location匹配目录与alias指定目录级别相同,否则配置无效,与location和root组合相同的是,location所匹配内容也只能向下匹配。

注意: alias只能用于location中(使用alias,目录名后面一定要加“/”),而root可以用在http、server和location中。

rewrite

rewrite功能就是,使用nginx提供的全局变量或自己设置的变量,结合正则表达式和标志位 实现url重写以及重定向。 rewrite只能放在server{},location{},if{}中,并且只能对域名后边的除去传递的参数外的字符串起作用,例如:http://seanlook.com/a/we/index.php?id=1&u=str 只对/a/we/index.php重写。 语法:rewrite regex replacement [flag];

如果相对域名或参数字符串起作用,可以使用全局变量匹配,也可以使用proxy_pass反向代理。

  • rewrite和location的区别: 区别在于rewrite是在同一域名内更改获取资源的路径,而location是对一类路径做控制访问或反向代理,可以proxy_pass到其他机器。 注: 如果要使用rewrite在不同域名之间做重定向,需要保证定向的域名一定都要绑定并解析在同一主机上才能生效。

很多情况下rewrite也会写在location里,它们的执行顺序是:

  1. 执行server块的rewrite指令
  2. 执行location匹配
  3. 执行选定的location中的rewrite指令

如果其中某步URI被重写,则重新循环执行1-3,直到找到真实存在的文件;循环超过10次,则返回500 Internal Server Error错误。

flag标志位
  • last : 相当于Apache的[L]标记,表示完成rewrite
  • break : 停止执行当前虚拟主机的后续rewrite指令集
  • redirect : 返回302临时重定向,地址栏会显示跳转后的地址
  • permanent : 返回301永久重定向,地址栏会显示跳转后的地址

因为301和302不能简单的只返回状态码,还必须有重定向的URL,这就是return指令无法返回301,302的原因了。这里 last 和 break 区别有点难以理解:

  • last一般写在server和if中,而break一般使用在location中
  • last不终止重写后的url匹配,即新的url会再从server走一遍匹配流程,而break终止重写后的匹配
  • break和last都能组织继续执行后面的rewrite指令

参考文章

https://segmentfault.com/a/1190000002797606 http://blog.csdn.net/hellochenlian/article/details/44655547 http://help.wsisp.net/xunizhuji/73.html https://my.oschina.net/u/3497124/blog/1512328 (站内一片关于location和root,alias的文档,遗憾的是自己不小心把图片源删除了)

(adsbygoogle = window.adsbygoogle || []).push({});

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

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

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

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
【愚公系列】2021年12月 二十三种设计模式(二十一)-策略模式(Stragety Pattern)
提示:这里可以添加本文要记录的大概内容: 例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。
愚公搬代码
2022/12/01
2550
【愚公系列】2021年12月 二十三种设计模式(二十一)-策略模式(Stragety Pattern)
python计算工资个税
1 # -*- coding: utf-8 -*- 2 3 total = int(input("税前总计:")) 4 5 #公积金10% 6 Gongjijin = total * 0.1 7 print("公积金个人缴纳:%.2f" %Gongjijin) 8 #养老保险8%,医保2%,失业0.4%,合计10.4% 9 Shebao = total * 0.104 10 yingnashui = total - Gongjijin - Shebao 11 12 print
一枚hammer
2021/01/28
1.2K0
2018新版个税计算器---Python实现
tax_ratio = OrderedDict() tax_ratio[(0, 5000)] = 0 tax_ratio[(5000, 3000)] = 0.03 tax_ratio[(3000, 12000)] = 0.1 tax_ratio[(12000, 25000)] = 0.2 tax_ratio[(25000, 35000)] = 0.25 tax_ratio[(35000, 55000)] = 0.3 tax_ratio[(55000, 80000)] = 0.35 tax_ratio[(80000, float(‘inf’))] = 0.45
葆宁
2022/01/06
4350
Python计算个人所得税
不知道大家有没有细心观察自己工资条上个人所得税呢?很多人都觉得有专门的个人所得税计算器,不用再去复查,但是有的黑心的公司专门利用这种心理,偶尔增加你的扣税额,为了方便大家核查自己的个人所得税,我用Python写了一个简单的个税计算器,大家可以核查下自己的扣税额。
stormwen
2019/08/15
3.7K0
Python系列之四——在北京当房奴的日子~
一、写在前边 不知道亲爱的你身在哪里,从事什么职业,是不是也在为了在诺大的城市有一席之地而在奋斗呢?欢迎在留言区分享属于你的故事噢~ 昨天,小詹同学收到了一笔工资(我希望多给我几个
小小詹同学
2018/04/13
1.2K1
Python系列之四——在北京当房奴的日子~
机器学习理论篇+数学建模作业题目(数据导入结果导出至excel)
下面的这个KNN算法的图片来自于这个B栈的老师—5分钟机器学习,这个视频做的真的是非常好,我们可以通过这个5分钟的介绍,让这个高深的理论知识建立起来一个大致的印象,知道这个算法是解决什么问题的,以及这个算法和我们的这个日产生活之间又是如何建立联系的,有助于我们对于这个算法的了解,我认为对于这些发杂的理论计算以及这个严谨的数学推导,不应该成为我们学习这个数学建模道路上面的这个拦路虎,而是应该以一个更加通俗易懂的方式学习这个算法,然后逐步地进行深入;
阑梦清川
2025/02/24
1040
机器学习理论篇+数学建模作业题目(数据导入结果导出至excel)
R语言在收入不平等指标测度上的应用~
最近在研究个人所得税的收入再分配效应,不是心甘情愿的,毕业论文需要 因为使用了CHIPS的数据库,微观住户调查数据是我见过最变态的数据源,没有之一~ 其中所使用到的理论模型中需要计算很多个人所得税、再分配效应和累进性指标,经过参考各方文献资料,依靠着自己对于R语言的一丁点儿基础,终于把所有的指标计算代码整理完了,因为代码太多,除了预处理和数据清洗的之外,这里分享一下我觉得可能会对学术研究人员有用的几段核心代码! 以下代码一共分为两类,一类是计算个人所得税的代码,一类是衡量收入分配不均等的测度指标。 个人所
数据小磨坊
2018/04/11
1.1K0
R语言在收入不平等指标测度上的应用~
用python分析个人所得税
https://console.cloud.tencent.com/api/explorer?Product=ocr&Version=2018-11-19&Action=DutyPaidProofOCR
mariolu
2024/03/26
2480
【腾讯云 Cloud Studio 实战训练营】GPT+Cloud Studio快速完成Excel工资自动核算
​随着业务规模的不断扩大,工资核算变得更加复杂而重要。然而,仍有许多组织依赖传统的Excel方法进行工资核算,这可能导致效率低下、风险增加以及员工薪资的准确性受到影响。在这个数字化时代,我们面临一个关键问题:如何在面对庞大的数据量和高要求的准确性时,找到一种更智能、更高效的工资核算解决方案?
用户10683187
2023/07/29
2050
【腾讯云 Cloud Studio 实战训练营】GPT+Cloud Studio快速完成Excel工资自动核算
Python系列之零——从零说起!!!
2017年可谓是人工智能元年,要问哪个行业最火,詹小白不敢确定,但要问哪个编程语言最热门,好吧,詹小白还是不敢说太满。但是!至少从舆论Python将被纳入高考这点就可以看出很多东西啦~
小小詹同学
2018/04/13
7790
Python系列之零——从零说起!!!
【编码狂想】深度探索C++编程之旅:“数组、字符串、函数与KMP算法解密“
键盘随机输入 6 个整数,将这些数据保存到数组中,获取数组中的最小值和最大值并输出。
SarPro
2024/02/20
1730
Claude+Cloud Studio念咒编程搭建Excel工资核算
Cloud Studio 是基于浏览器的集成式开发环境(IDE),为开发者提供了一个永不间断的云端工作站。用户在使用CloudStudio 时无需安 装,随时随地打开浏览器就能在线编程。
叶秋学长
2023/07/23
5030
Claude+Cloud Studio念咒编程搭建Excel工资核算
04 . Python入门之条件语句
一、 Python条件语句 Python条件语句是通过一条或多条语句执行结果(True或False)来决定执行的代码块. 可以通过下图简单了解语句的执行过程 Python程序语言指定任何非0
iginkgo18
2020/09/27
4020
04 . Python入门之条件语句
【每周一坑】暴力计算圆周率 +【解答】生成/识别二维码
我们之前有出过一些和概率相关的问题。我讲过,用计算机程序来解编程题有个很有意思的思路,就是暴力解法。就是利用电脑的计算能力,去模拟大量的情况(甚至所有情况),得出统计数据。这种方法虽然从数学角度来说不是绝对和精确的,但可以很方便地应付很多需求,以及作为计算结果的辅助验证。
Crossin先生
2018/11/30
1.3K0
【每周一坑】暴力计算圆周率 +【解答】生成/识别二维码
[腾讯云 Cloud Studio 实战训练营]Claude+Cloud Studio辅助编程搭建Excel工资核算
Cloud Studio 是基于浏览器的集成式开发环境(IDE),为开发者提供了一个永不间断的云端工作站。用户在使用CloudStudio 时无需安 装,随时随地打开浏览器就能在线编程。
用户10216580
2023/10/16
2770
[腾讯云 Cloud Studio 实战训练营]Claude+Cloud Studio辅助编程搭建Excel工资核算
【计算机本科补全计划】CCF计算机职业资格认证 2016-12 试题详解
正文之前 最近练算法,不过最可气的,我写出来的程序一直算法越界!!题目要求到1000个输入都能正常工作,但是我的一般500个就直接越界了!!!咋办!!!咋办!!!???算了,先体会思想,后面再慢慢的琢
用户1687088
2018/05/07
1K0
【计算机本科补全计划】CCF计算机职业资格认证 2016-12 试题详解
Power Query 系列 (13) - 自定义函数
以工资类所得应交个税为例,最新的个税起征点为 5000 并按下表的级次进行缴税(假设没有其它扣除项)。
StoneWM
2021/03/25
1.9K0
如何使用Java + React计算个人所得税?
在报表数据处理中,Excel公式拥有强大而多样的功能,广泛应用于各个业务领域。无论是投资收益计算、财务报表编制还是保险收益估算,Excel公式都扮演着不可或缺的角色。传统的做法是直接依赖Excel来实现复杂的业务逻辑,并生成相应的Excel文件。因此只需在预设位置输入相应参数,Excel公式即可被激活,迅速计算并呈现结果。正因如此,在这类场景中,企业积累了大量用于计算的Excel文件,它们已经成为了无价的财富。
葡萄城控件
2023/10/16
3520
如何使用Java + React计算个人所得税?
【腾讯云Cloud Studio实战训练营】Claude GPT+Cloud Studio完成Excel工资自动核算
2、个税扣除核算方法:**个税扣除 = 基础工资 - 五险一金扣除 - 考勤扣除金额,然后进行以下方式核算:**
devinzhang1994
2023/08/27
4340
【腾讯云Cloud Studio实战训练营】Claude GPT+Cloud Studio完成Excel工资自动核算
【愚公系列】2023年11月 二十三种设计模式(二十一)-策略模式(Stragety Pattern)
设计模式(Design Pattern)是软件开发领域的宝贵经验,是多人反复借鉴和广泛应用的代码设计指导。它们是一系列经过分类和归纳的代码组织方法,旨在实现可重用性、可维护性和可理解性。使用设计模式,我们能够编写高质量的代码,使其更易于他人理解,并提供了代码可靠性的保证。
愚公搬代码
2023/11/21
2060
推荐阅读
相关推荐
【愚公系列】2021年12月 二十三种设计模式(二十一)-策略模式(Stragety Pattern)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验