简单认识Nginx配置块location及rewrite

news2024/11/18 5:46:02

文章目录

  • 一、location配置块
    • 1、分类
    • 2、location 常用的匹配规则
    • 3、location 优先级:
    • 4.location 匹配流程
    • 5、location实际使用规则
      • 1、直接匹配网站根目录首页
      • 2、处理静态文件请求
      • 3、通用规则
  • 二、rewrite配置块
    • 1、简介
    • 2、rewrite跳转实现
    • 3、rewrite 执行顺序
    • 4.rewrite 配置语法格式
      • 语法格式:
      • 常用flag标记位
    • 5.rewrite 应用实例
      • 1、基于域名的跳转
      • 2、基于客户端 IP 访问跳转
      • 3、基于旧域名跳转到新域名后面加目录
      • 4、基于参数匹配的跳转
      • 5、基于目录下所有 php 结尾的文件跳转
      • 6、基于最普通一条 url 请求的跳转


一、location配置块

1、分类

location可以分为三类:
(1)精准匹配:location = / {…}
(2)一般匹配:location / {…}
(3)正则匹配:location ~ / {…}

2、location 常用的匹配规则

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

3、location 优先级:

(1)精确匹配 = /…/…
(2)前缀匹配 ^~ /…/…
(3)按文件中顺序的正则匹配 ~ 或 ~* /…/…
(4)匹配不带任何修饰的前缀匹配 /…/…
(5)通用匹配 /

4.location 匹配流程

如果只有一种匹配满足,互不影响则直接走匹配到的location。
如果存在多个形式的location,则按以下流程匹配:
优先级:
首先是精确匹配,匹配到直接结束
其次是前缀匹配,如果筛选出来是前缀匹配,那就忽略正则匹配;
再次是正则匹配,多个符合,则在配置文件中靠前优先级的大
再次是一般匹配,最长匹配的优先
最后只有在精准、前缀、正则、一般 都没有匹配到的时候才会看通用匹配。

5、location实际使用规则

实际网站使用中,至少有三个匹配规则定义:

1、直接匹配网站根目录首页

通过域名访问网站首页比较频繁,使用这个会加速处理,比如说官网。可以是一个静态首页,也可以直接转发给后端应用服务器

location = / {
    root   html;
	index  index.html index.htm;
}

2、处理静态文件请求

这是nginx作为http服务器的强项,有两种配置模式,目录匹配或后缀匹配,任选其一或搭配使用

location ^~ /static/ {
    root /webroot/static/;
}

/static/
      
location ~* \.(html|gif|jpg|jpeg|png|css|js|ico)$ {
    root /webroot/res/;
}

3、通用规则

比如用来转发带.php、.jsp后缀的动态请求到后端应用服务器,非静态文件请求就默认是动态请求

location / {
    proxy_pass http://tomcat_server;
}

二、rewrite配置块

1、简介

rewrite功能就是,使用nginx提供的全局变量或自己设置的变量,结合正则表达式和标记位实现URL重写以及重定向。
比如:更换域名后需要保持旧的域名能跳转到新的域名上、某网页发生改变需要跳转到新的页面、网站防盗链等等需求。

rewrite只能放在server{},location{},if{}中,并且默认只能对域名后边的除去传递的参数外的字符串起作用
例如 http://www.index.com/abc/bbs/index.php?a=1&b=2 只对/abc/bbs/index.php重写

2、rewrite跳转实现

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

3、rewrite 执行顺序

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

4.rewrite 配置语法格式

语法格式:

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

常用flag标记位

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

5.rewrite 应用实例

1、基于域名的跳转

现在公司旧域名www.ikun.com有业务需求变更,需要使用新域名www.heizi.com代替,但是旧域名不能废除,需要跳转到新域名上,而且后面的参数保持不变。

vim /usr/local/nginx/conf/nginx.conf
server {
	listen       80;
	server_name  www.ikun.com;		#域名修改	
	charset utf-8;
	access_log  /var/log/nginx/www.ikun.com-access.log;		#日志修改
	location / {
	#添加域名重定向
        if ($host = 'www.ikun.com'){						#$host为rewrite全局变量,代表请求主机头字段或主机名
			rewrite ^/(.*)$ http://www.heizi.com/$1 permanent;	#$1为正则匹配的内容,即“域名/”之后的字符串
        }
        root   html;
        index  index.html index.htm;
    }
}


echo "192.168.10.19 www.kgc.com www.benet.com" >> /etc/hosts
nginx -t
systemctl restart nginx

(1)修改配置文件
在这里插入图片描述
(2)检查语法,重启服务
在这里插入图片描述
(3)浏览器访问测试
在这里插入图片描述
请求头中host是ikun的地址,referer则是heizi的地址

2、基于客户端 IP 访问跳转

今天公司业务新版本上线,要求所有 IP 访问任何内容都显示一个固定维护页面,只有公司 IP :192.168.206.8访问正常。

vim /usr/local/nginx/conf/nginx.conf
server {
	listen       80;
	server_name  www.lanqiu.com;		#域名修改	
	charset utf-8;
	access_log  /var/log/nginx/www.lanqiu.com-access.log;		#日志修改

	#设置是否合法的IP标记
    set $rewrite true;							#设置变量$rewrite,变量值为boole值true
    #判断是否为合法IP
	if ($remote_addr = "192.168.206.8"){		#当客户端IP为192.168.10.19时,将变量值设为false,不进行重写
        set $rewrite false;
    }
	#除了合法IP,其它都是非法IP,进行重写跳转维护页面
    if ($rewrite = true){						#当变量值为true时,进行重写
        rewrite (.+) /weihu.html;				#将域名后边的路径重写成/weihu.html,例如www.lanqiu.com/weihu.html
    }
    location = /weihu.html {
        root /var/www/html;						#网页返回/var/www/html/weihu.html的内容
    }
	
	location / {
        root   html;
        index  index.html index.htm;
    }
}

(1)修改配置文件
在这里插入图片描述
(2)创建维护页面,检查语法,重启服务

在这里插入图片描述
(3)访问测试
使用非指定地址访问
在这里插入图片描述

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

现在访问的是 http://bbs.ikun.com/post/,现在需要将这个域名下面的访问都跳转到http://www.heizi.com/bbs/post/

vim /usr/local/nginx/conf/nginx.conf
server {
	listen       80;
	server_name  bbs.ikun.com;		#域名修改	
	charset utf-8;
	access_log  /var/log/nginx/www.ikun.com-access.log;
	#添加
	location /post {
        rewrite (.+) http://www.ikun.com/bbs$1 permanent;		#这里的$1为位置变量,代表/post
    }
	
	location / {
        root   html;
        index  index.html index.htm;
    }
}

(1)修改配置文件
在这里插入图片描述
(2)创建指定页面
在这里插入图片描述
(3)检查语法,重启服务
在这里插入图片描述
(4)浏览器访问测试
在这里插入图片描述
使用浏览器访问 http://bbs.ikun.com/post/1.html 跳转到 http://www.ikun.com/bbs/post/1.html

4、基于参数匹配的跳转

现在访问http://www.ikun.com/100-(100|200)-100.html 跳转到http://www.ikun.com页面

vim /usr/local/nginx/conf/nginx.conf
server {
	listen       80;
	server_name  www.ikun.com;		#域名修改	
	charset utf-8;
	access_log  /var/log/nginx/www.ikun.com-access.log;
	
	if ($request_uri ~ ^/100-(100|200)-(\d+).html$) {
        rewrite (.+) http://www.ikun.com permanent;
    }
	
	location / {
        root   html;
        index  index.html index.htm;
    }
}

(1)修改配置文件

在这里插入图片描述
(2)检查语法,重启服务

(3)浏览器访问测试
在这里插入图片描述
使用浏览器访问 http://www.ikun.com/100-200-100.html 或 http://www.ikun.com/100-100-100.html 跳转到http://www.kgc.com页面。

5、基于目录下所有 php 结尾的文件跳转

要求访问 http://www.ikun.com/upload/123.php 跳转到首页。

vim /usr/local/nginx/conf/nginx.conf
server {
	listen       80;
	server_name  www.ikun.com;		#域名修改	
	charset utf-8;
	access_log  /var/log/nginx/www.ikun.com-access.log;
	
	location ~* /upload/.*\.php$ {
        rewrite (.+) http://www.ikun.com permanent;
    }
    
	location / {
        root   html;
        index  index.html index.htm;
    }
}

(1)修改配置文件
在这里插入图片描述
(2)检查语法,重启服务
在这里插入图片描述
(3)浏览器访问测试
浏览器访问 http://www.ikun.com/upload/123.php 跳转到http://www.ikun.com页面
在这里插入图片描述

6、基于最普通一条 url 请求的跳转

要求访问一个具体的页面如 http://www.ikun.com/abc/123.html 跳转到首页

vim /usr/local/nginx/conf/nginx.conf
server {
	listen       80;
	server_name  www.ikun.com;		#域名修改	
	charset utf-8;
	access_log  /var/log/nginx/www.ikun.com-access.log;
	
    location ~* ^/abc/123.html {
        rewrite (.+) http://www.ikun.com permanent;
    }


	location / {
        root   html;
        index  index.html index.htm;
    }
}

(1)修改配置文件
在这里插入图片描述
(2)检查语法,重启服务
在这里插入图片描述
(3)浏览器访问测试
浏览器访问 http://www.ikun.com/abc/123.html 跳转到http://www.ikun.com页面。
在这里插入图片描述

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

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

相关文章

数据结构——归并排序和计数排序的介绍

文章目录 归并排序归并排序的思想单趟排序的实现归并排序实现非递归版本的实现特性总结 计数排序计数排序的思想计数排序的实现特性总结 归并排序 归并排序&#xff08;MERGE-SORT&#xff09;是建立在归并操作上的一种有效的排序算法,该算法是采用分治&#xff08;Divide and…

【Java】Map和Set

目录 一、搜索树 1、概念 2、操作-查找 3、操作-插入 4、操作-删除&#xff08;难点&#xff09; 6、性能分析 二、搜索 1、概念及场景 2、模型 三、Map 的使用 1、关于Map的说明 2、关于Map.Entry的说明,> 3、Map 的常用方法说明 4、TreeMap的使用案例 四、…

Django之ORM

一、Django模型层之ORM介绍 使用Django框架开发web应用的过程中&#xff0c;不可避免地会涉及到数据的管理操作&#xff08;增、删、改、查&#xff09;&#xff0c;而一旦谈到数据的管理操作&#xff0c;就需要用到数据库管理软件&#xff0c;例如mysql、oracle、Microsoft S…

护航行业安全!安全狗入选2023年度中国数字安全能力图谱(行业版)

近日&#xff0c;数世咨询正式发布了《2023年度中国数字安全能力图谱&#xff08;行业版&#xff09;》。 作为国内云原生安全领导厂商&#xff0c;安全狗也入选多个细项。 厦门服云信息科技有限公司&#xff08;品牌名&#xff1a;安全狗&#xff09;成立于2013年&#xff0c;…

8大service mesh框架大比拼,Istio不是唯一的选择!

文章目录 一、IsitoConsulLinkerdKumaOpen Service MeshMesheryTraefik MeshService Mesh Interface&#xff08;SMI&#xff09; 公众号&#xff1a; MCNU云原生&#xff0c;文章首发地&#xff0c;欢迎微信搜索关注&#xff0c;更多干货&#xff0c;第一时间掌握&#xff01…

Linux bluez蓝牙开发的准备工作

最近为了搞这个蓝牙的事情&#xff0c;忙碌了好几天&#xff0c;我就是想结合 bluez 的代码随便玩一下蓝牙设备&#xff0c;而且能够参考源码写点测试程序来操作这个蓝牙设备。这里只是说明 Linux 下的准备工作而非嵌入式的arm。 1&#xff0c;系统支持 我用的是真机安装的 D…

路由与交换技术(H3C)①——计算机网络基础

系列文章目录 ①——计算机网络基础 路由与交换技术&#xff08;H3C&#xff09;①——计算机网络概述 系列文章目录一 计算机网络概述1.1 计算机网络1.2 计算机网络的基本功能1.2.1 资源共享1.2.2 分布式处理与负载均衡1.2.3 综合信息服务 二 计算机网络的演进2.1 主机互联时…

Unity Editor扩展 实现一个Excel读表窗口

设计 Unity Editor窗口类 public class ExcelEditorWindow : EditorWindow {[MenuItem( "Frameworks/读表配置界面", false, 10 )]private static void Open(){Rect wr new Rect( 0, 0, 500, 500 );ExcelEditorWindow window ( ExcelEditorWindow ) EditorWindow.…

津津乐道设计模式 - 组合模式详解(以餐厅菜单系统举例让你快速掌握)

&#x1f604; 19年之后由于某些原因断更了三年&#xff0c;23年重新扬帆起航&#xff0c;推出更多优质博文&#xff0c;希望大家多多支持&#xff5e; &#x1f337; 古之立大事者&#xff0c;不惟有超世之才&#xff0c;亦必有坚忍不拔之志 &#x1f390; 个人CSND主页——Mi…

基于Python所写的玛丽冒险设计

点击以下链接获取源码资源&#xff1a; https://download.csdn.net/download/qq_64505944/87953199 《玛丽冒险》程序使用说明 在PyCharm中运行《玛丽冒险》即可进入如图1所示的游戏主界面。 图1 游戏主界面 具体的操作步骤如下&#xff1a; &#xff08;1&#xff09;游戏…

数据库监控与调优【十四】—— COUNT语句优化

COUNT语句优化 有关COUNT的几个实验与结论 准备工作 create table user_test_count (id int primary key not null auto_increment,name varchar(45),age int,email varchar(60),birthday date ) engine innodb;insert into user_test_count (id, name, a…

算法设计与分析之回溯法

文章目录 1. 回溯法简介1.1 DFS的基本思想1.2 回溯法的基本思想1.3 回溯法和DFS的区别1.4 剪枝 2. 01背包问题&#xff1a;子集树2.1 问题介绍2.2 解决思路2.3 算法实现2.4 如何优化 3. 旅行商问题TSP&#xff1a;排序树3.1 问题介绍3.2 解决思路3.3 算法框架3.4 算法实现 4. 总…

项目一点点记录

kafka发布通知 kafka是消息队列&#xff0c;kafka采用发布订阅模式进行消息的生产与消费。在项目中&#xff0c;我们采用spring来整合kafka&#xff0c; 通过定义事件event来封装 点赞、关注、评论三类事件&#xff0c;event实体中有 事件主题topic&#xff0c;当前用户id&…

怎么给PDF添加图片水印?其实很简单,看这篇就会了!

许多人都意识到版权问题的重要性&#xff0c;尽管在日常生活中我们可能很少遇到&#xff0c;但在办公和学习中却经常涉及到此类问题。例如&#xff0c;我们辛辛苦苦制作的PDF文件&#xff0c;如何确保不被他人盗用呢?这就涉及到如何为PDF添加图片水印的问题&#xff0c;相当于…

无向图G的广度优先搜索和深度优先搜索以及完整程序

图的遍历算法有两种&#xff1a;广度优先搜索和深度优先搜索 一.广度优先搜索类似于层次遍历&#xff0c;需要借助辅助队列 空间复杂度为O(|V|);空间复杂度由辅助队列大小决定 时间复杂度为O(|V||E|) 为避免同一顶点被多次访问&#xff0c;设计visited[]来标记顶点 二.深度…

MyBatis 从初识到掌握

目录 今日良言&#xff1a;与其抱怨于黑暗&#xff0c;不如提灯向前行 一、初识MyBatis 1.MyBatis定义 2.为什么要学习MyBatis 3.MyBatis的创建 二、MyBatis的相关操作 1.增删改查操作 2.动态SQL使用 今日良言&#xff1a;与其抱怨于黑暗&#xff0c;不如提灯向前行 一…

UE4/5 通过Control rig的FullBody【蜘蛛模型,不用basic ik】

目录 根设置 FullBody IK 额外骨设置 ​编辑 晃动效果 根设置 第一步你需要准备一个蜘蛛模型&#xff0c;不论是官方示例或者是epic上购买的模型 然后我用的是epic上面购买的一个眼球蜘蛛&#xff1a; 第一步&#xff0c;我们从根创建一个空项【这个记得脱离父子级到root之…

SQLServer 2016 R2数据库新建、附加、分离、备份、还原、复制等基本操作

一、打开Microsoft SQL Server Management Studio 在桌面上找到图标&#xff0c;双击运行 打开Microsoft SQL Server Management Studio 17 输入服务器名称&#xff0c;选择SQL Server 身份验证&#xff0c;sa和sa密码&#xff0c;可以勾选记住密码&#xff0c;以便以后的登录…

分享基于安卓项目的单元测试总结

前言&#xff1a; 负责公司的单元测试体系的搭建&#xff0c;大约有一两个月的时间了&#xff0c;从最初的框架的调研&#xff0c;到中期全员的培训&#xff0c;以及后期对几十个项目单元测试的引入和推进&#xff0c;也算是对安卓的单元测试有了一些初步的收获以及一些新的认…

【雕爷学编程】Arduino动手做(131)---跑马灯矩阵键盘模块

37款传感器与执行器的提法&#xff0c;在网络上广泛流传&#xff0c;其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块&#xff0c;依照实践出真知&#xff08;一定要动手做&#xff09;的理念&#xff0c;以学习和交流为目的&am…