Nginx之location与rewrite

Nginx之location与rewrite

一.location

location 对访问的路径做访问控制或者代理转发

1.匹配分类

精准匹配:    location  = / {...}
前缀匹配:    location  ^~ /   {...} 
正则匹配:    location  ~ / {...}    location  ~* / {...}
部分前缀匹配  location 
通用匹配     location / {....}
(location = 完整路径) > (location ^~ 路径) > (location ~,~* 正则顺序) > (location 部分前缀路径) > (location /)

2.匹配规则

符号说明
=进行普通字符精确匹配,也就是完全匹配
^~表示普通字符匹配。使用前缀匹配。如果匹配成功,则不再匹配其它 正则匹配location
~区分大小写的匹配。
~*不区分大小写的匹配
!~区分大小写的匹配取非
!~*不区分大小写的匹配取非

3.location 优先级

首先精确匹配 =
其次前缀匹配 ^~
其次是按文件中顺序的正则匹配 ~或~*
然后匹配不带任何修饰符的一般前缀匹配
最后是交给 / 通用匹配
优先级:精确= > 前缀^~ > 正则~,~* > 一般 > 通用/

4.实际应用

#第一个必选规则
直接匹配网站根目录首页,通过域名访问网站首页比较频繁,使用这个会加速处理,比如说官网。
可以是一个静态首页,也可以直接转发给后端应用服务器
location = /index.html {root   html;index  index.html index.htm;
}#第二个必选规则是处理静态文件请求,这是nginx作为http服务器的强项
有两种配置模式,目录匹配或后缀匹配,任选其一或搭配使用
location ^~ /static/ {root /webroot/;
}location ~* \.(gif|jpg|jpeg|png|css|js|ico)$ {root /webroot/res/;
}#第三个规则就是通用规则,比如用来转发带.php、.jsp后缀的动态请求到后端应用服务器
非静态文件请求就默认是动态请求
location / {proxy_pass http://tomcat_server;
}

5.实验

5.1精准匹配

在这里插入图片描述
在这里插入图片描述

5.2前缀匹配

在这里插入图片描述
在这里插入图片描述

5.3正则匹配

在这里插入图片描述
在这里插入图片描述

5.4一般匹配

在这里插入图片描述
在这里插入图片描述

二.rewrite

rewrite 对访问的域名或者域名内的URL路径地址重写

1.rewrie详解

1.1功能

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

1.2位置

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

1.3跳转实现

Nginx:通过ngx_http_rewrite_module 模块支持URL重写、支持if条件判断,但不支持else
跳转:从一个 location跳转到另一个location,循环最多可以执行10次,超过后nginx将返回500错误
PCRE支持:perl兼容正则表达式的语法规则匹配
重写模块 set 指令:创建新的变量并设其值

1.4执行顺序

(1) 执行 server 块里面的 rewrite 指令。
(2) 执行 location 匹配。
(3) 执行选定的 location 中的 rewrite 指令。

1.5语法格式

rewrite <regex> <replacement> [flag];
regex :表示正则匹配规则。
replacement :表示跳转后的内容。
flag :表示 rewrite 支持的 flag 标记。

1.6flag标记说明

last :本条规则匹配完成后,不终止重写后的url匹配,一般用在 server 和 if 中。
break :本条规则匹配完成即终止,终止重写后的url匹配,一般使用在 location 中。
redirect :返回302临时重定向,浏览器地址会显示跳转后的URL地址。
permanent :返回301永久重定向,浏览器地址栏会显示跳转后的URL地址。

2.rewrite示例

2.1基于域名的跳转

现在公司旧域名www.xjx.com有业务需求变更,需要使用新域名www.tjj.com代替,但是旧域名不能废除,需要跳转到新域名上,而且后面的参数保持不变。
vim /usr/local/nginx/conf/nginx.conf
server {listen       80;server_name  www.xjx.com;		#域名修改	charset utf-8;access_log  /var/log/nginx/www.kgc.com-access.log;		#日志修改location / {#添加域名重定向if ($host = 'www.xjxc.com'){						#$host为rewrite全局变量,代表请求主机头字段或主机名rewrite ^/(.*)$ http://www.tjj.com/$1 permanent;	#$1为正则匹配的内容,即“域名/”之后的字符串}root   html;index  index.html index.htm;}
}echo "192.168.111.35 www.xjx.com www.tjj.com" >> /etc/hosts
systemctl restart nginx
浏览器输入模拟访问 http://www.xjxc.com/test/1.html(虽然这个请求内容是不存在的)
会跳转到www.tjj.com/test/1.html,查看元素可以看到返回301,实现了永久重定向跳转,而且域名后的参数也正常跳转。

在这里插入图片描述

在这里插入图片描述

2.2基于客户端 IP 访问跳转

公司业务新版本上线,要求所有 IP 访问任何内容都显示一个固定维护页面,只有公司 IP :192.168.111.15访问正常。
vim /usr/local/nginx/conf/nginx.conf
server {listen       80;server_name  www.kgc.com;		#域名修改	charset utf-8;access_log  /var/log/nginx/www.xjx.com-access.log;		#日志修改#设置是否合法的IP标记set $rewrite true;							#设置变量$rewrite,变量值为boole值true#判断是否为合法IPif ($remote_addr = "192.168.111.35"){		#当客户端IP为192.168.80.10时,将变量值设为false,不进行重写set $rewrite false;}#除了合法IP,其它都是非法IP,进行重写跳转维护页面if ($rewrite = true){						#当变量值为true时,进行重写rewrite (.+) /weihu.html;				#将域名后边的路径重写成/weihu.html后转发,例如www.kgc.com/weihu.html}location = /weihu.html {root /var/www/html;						#网页返回/var/www/html/weihu.html的内容}location / {root   html;index  index.html index.htm;}
}mkdir -p /var/www/html/
echo "<h1>the web is updating!!</h1>" > /var/www/html/weihu.html
systemctl restart nginx
只有 IP 为 192.168.111.35 能正常访问,其它地址都是维护页面--------------------------------------------------------
如果rewrite (.+) /weihu.html; 换成rewrite (.+) /weihu.html permanent; 的话,若不是 192.168.111.35 的主机访问会使浏览器修改请求访问的 URL 成 http://www.xjx.com/weihu.html 再请求访问,这样就会进入一直在 rewrite 的死循环,访问请求会一直被重写成 http://www.xjx.com/weihu.html 再请求访问
--------------------------------------------------------

在这里插入图片描述
在这里插入图片描述

2.3基于旧域名跳转到新域名后面加目录

现在访问的是 http://bbs.xjx.com/post/,现在需要将这个域名下面的访问都跳转到http://www.xjx.com/bbs/post/
vim /usr/local/nginx/conf/nginx.conf
server {listen       80;server_name  bbs.xjx.com www.kgc.com;		#域名修改	charset utf-8;access_log  /var/log/nginx/www.xjx.com-access.log;#添加location /post {rewrite (.+) http://www.xjx.com/bbs$1 permanent;		#这里的$1为位置变量,代表/post}location / {root   html;index  index.html index.htm;}
}mkdir -p /usr/local/nginx/html/bbs/post
echo "this is post home!"  >> /usr/local/nginx/html/bbs/post/1.html
echo "192.168.111.35 bbs.kgc.com"  >> /etc/hosts
systemctl restart nginx
使用浏览器访问 http://bbs.xjx.com/post/1.html 跳转到 http://www.xjx.com/bbs/post/1.html

在这里插入图片描述
在这里插入图片描述

2.4基于参数匹配的跳转

现在访问http://www.kgc.com/100-(100|200)-100.html 跳转到http://www.xjx.com页面。
vim /usr/local/nginx/conf/nginx.conf
server {listen       80;server_name  www.kgc.com;		#域名修改	charset utf-8;access_log  /var/log/nginx/www.xjx.com-access.log;if ($request_uri ~ ^/100-(100|200)-(\d+).html$) {rewrite (.+) http://www.kgc.com permanent;}location / {root   html;index  index.html index.htm;}
}-------------------------------------------------
$request_uri:包含请求参数的原始URI,不包含主机名,如:http://www.xjx.com/abc/bbs/index.html?a=1&b=2 中的 /abc/bbs/index.php?a=1&b=2
$uri:这个变量指当前的请求URI,不包括任何参数,如:/abc/bbs/index.html
$document_uri:与$uri相同,这个变量指当前的请求URI,不包括任何传递参数,如:/abc/bbs/index.html
-------------------------------------------------systemctl restart nginx
使用浏览器访问 http://www.xjx.com/100-200-100.html 或 http://www.xjx.com/100-100-100.html 跳转到http://www.xjx.com页面。

在这里插入图片描述
在这里插入图片描述

3.rewrite变量
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/351731.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

gismo-3维IGA

文章目录 前言一、简单示例二、gismo-3维IGA3维程序中的几何模型 三、xml文件的理解1、xml文件示例2、gismo中二维示例文件-一个曲面&#xff08;简单&#xff09; 四、三维程序中xml文件的理解三维几何模型边界信息 五、三维程序运行细化四次细化5次 总结 #pic_center 前言 只…

30天从入门到精通TensorFlow1.x 第四天,TensorFlow中的计算图或数据流图

文章目录 一、接前一天二、计算图或数据流图1. 什么是计算图或者数据流图2. 为什么需要计算图或者数据流图3. 执行顺序和延迟加载在tf中的使用 一、接前一天 这几天主要学习了张量的创建方法&#xff0c;以及变量&#xff0c;变量命名域共享变量等概念。今天主要熟悉 数据流图…

通达信l1l2行情接口-十档行情有哪些优势?

据提供系统或用户编制的条件选股公式进行选股选定一个条件选股公式或多个组合条件后&#xff0c;计算机自动帮您选出当时或历史上某一段时间内满足条件的所有股票十档行情 英文&#xff0c;列在行情下载显示窗口&#xff0c;同时可保留成板块。 那通达信l1l2行情接口-十档行情…

ciscn 2023 初赛 pwn shell we go

ciscn 2023 初赛 pwn shell we go 这题go pwn&#xff0c;符号恢复就恢复很长时间了&#xff0c;网上的插件好多都没用 根着流程&#xff0c;可以看到这里有一个验证&#xff0c;以空格来分割&#xff0c;第一个参数会验证是否为nAcDsMicN 如果第一个参数验证通过&#xff0c…

[AHK]获取通达信软件上的股票代码

PC上的股票交易软件的自动止损、自动下单等功能比较弱&#xff0c;不如期货交易软件。 自力更生&#xff0c;程序员都是自己打造工具。 根据IPO模型&#xff08;Input 输入&#xff0c;Process处理&#xff0c;Output输出&#xff09;&#xff0c;为了方便自动化首先要获取当…

(十)服务器K8S集群部署SpringBoot项目实战

1.准备springboot项目 可以在 https://start.spring.io/网站准备一个项目&#xff0c;这里作为k8s的学习所以springboot项目中准备一个简单的访问接口即可。 2.服务器环境准备 安装Jdk 1.更新系统软件包&#xff1a; sudo yum update2.安装 OpenJDK 11&#xff1a; sudo…

毕业三年,自学软件测试到就业,我用了4个月

我转行的经历 17年毕业&#xff0c;普通专科&#xff0c;通信专业。 当初选择这个专业是因为有一个校企合作&#xff0c;承诺学生毕业之后给学生安排就业&#xff0c;在学校里面混了三年之后&#xff0c;学校也是履行了当初安排就业的承诺&#xff0c;给我“发配”到了上海&a…

Python数据攻略-DataFrame的数据计算和整理

大家好&#xff0c;我是Mr数据杨。今天&#xff0c;我们要踏上一场探索Python的旅程&#xff0c;途中我们将讲解算术运算、NumPy和SciPy函数的应用、DataFrame的排序、过滤、统计和遍历等技巧。想象一下如果《三国演义》中的诸葛亮有了Python的帮助&#xff0c;他将如何更有效地…

海睿思分享 | 企业如何加强采购风险控制

企业运营的主要流程&#xff0c;不会因为企业人员规模或者业务规模大小的差异&#xff0c;而出现巨大的差异。千万亿市值的上市公司、不足百人的新兴公司&#xff0c;面对的经营风险本质上不会有明显的区别。今天我们一起分享企业经营管理中常见的风险应对策略。 对于企业而言…

Treadlocal源码实例详解

我们都知道treadlocal维护变量时候&#xff0c;可以为每个线程维护一个独立的副本&#xff0c;改变的是自己线程的数据。 ThreadLocal公用方法有四个&#xff1a;get&#xff0c;set&#xff0c;remove&#xff0c;intiValue 既然threadLocalMap是局部变量&#xff0c;所以他存…

C++学习之旅 - new运算符

C中利用new操作符在堆区开辟数据 堆中开辟的数据由程序员手动开辟&#xff0c;手动释放&#xff0c;释放利用操作符delete 语法new 数据类型 #include <iostream>using namespace std;int *func(){int* p new int(10);return p; }int main() {int* p func();cout <&…

传奇开服教程完整版GOM引擎超详细的单机架设图文教程(小白一看就会)

准备工具 1.传奇版本和补丁2.热血传奇客户端3.DBC20004.绿盟GOM登录器 服务端安装步骤&#xff1a; 1.把下载好的传奇版本解压在你电脑的D盘 2.补丁文件夹直接解压到你的传奇客户端根目录 3.解压好DBC2000开始安装&#xff0c;安装完成后关闭DBC程序 4.打开控制面板&#xff0…

深入理解Linux虚拟内存管理(四)

系列文章目录 Linux 内核设计与实现 深入理解 Linux 内核&#xff08;一&#xff09; 深入理解 Linux 内核&#xff08;二&#xff09; Linux 设备驱动程序&#xff08;一&#xff09; Linux 设备驱动程序&#xff08;二&#xff09; Linux 设备驱动程序&#xff08;三&#xf…

锐捷AC的部署实例

进行锐捷AC部署时&#xff0c;遇到了一些问题&#xff0c;遂记录下来&#xff0c;如若大家在项目过程中遇到类似问题可以对照解决。 写在前面&#xff08;锐捷AC的基础配置&#xff09; ac-controller //配置AC的capwap源地址信息&#xff0c;国家码等…

Nginx配置域名证书

Nginx配置域名证书 1、证书存放路径 2、nginx.conf文件中增加以下配置&#xff0c;注意路径不一样&#xff0c;访问地址目录不一样 server {listen 443 ssl http2;server_name jistest.vwatj.ap.vwg;ssl_certificate D:/home/XXX/ssl/2023/XXX.cer; ssl_certificate_key D…

在线配资平台哪家正规?排名在前的有哪些平台?

在线配资平台哪家正规&#xff1f;排名在前的有哪些平台&#xff1f; 比如有永华证券、联华证券、财盛证券、中信证券、东方证券等等这些平台。也是排名比较靠前的&#xff01; 选择平台需要投资者仔细研究不同的在线配资平台的投资风格、费用、客户服务等因素&#xff0c;并根…

《辉煌优配》科技股强势引领A股反弹 沪深两市日成交额再超万亿元

受美联储再度加息扰动&#xff0c;昨日早盘沪深两市指数低开&#xff0c;随后科技股强势拉升&#xff0c;带动商场回暖。到收盘&#xff0c;上证综指报3286.65点&#xff0c;上涨0.64%&#xff1b;深证成指报11605.29点&#xff0c;上涨0.94%&#xff1b;创业板指报2361.41点&a…

A股管家股票自动交易软件系统,功能完善强大

2013年的时候&#xff0c;有个广东的朋友说再用这款A股管家股票自动系统&#xff0c;我当时比较惊讶&#xff0c;以前想过要是有一款股票自动交易软件能偶尔代替我一下就好了&#xff0c;虽然是职业股民&#xff0c;但也经常遇到太忙的时候&#xff0c;实在没时间。然后就在朋友…

亚马逊云科技出海日,让数字经济出海扩展到更多行业和领域

数字化浪潮之下&#xff0c;中国企业的全球化步伐明显提速。从“借帆出海”到“生而全球化”&#xff0c;中国企业实现了从传统制造业“中国产品”出口&#xff0c;向创新“中国技术”和先导“中国品牌”的逐步升级。 作为全球云计算的开创者与引领者&#xff0c;亚马逊云科技…

JDK11+mybatis-plus+shardingsphere分库分表

1、引入jar dynamic-datasource-spring-boot-starter&#xff1a;2.5.6 sharding-jdbc-spring-boot-starter&#xff1a;4.1.1 <dependency><groupId>com.baomidou</groupId><artifactId>dynamic-datasource-spring-boot-starter</artifactId>&…