location匹配和rewrite重定向

目录

location 匹配

location匹配的分类和优先级

优先级细分

实际网站中的使用规则

1.用精确匹配来实现网站的首页

访问网站的首页 (= /)

2.用正则匹配来实现静态请求的页面和图片

匹配静态页面

访问图片或者指定的后缀名

3.用一般匹配转发.php 、.js为后缀的动态请求到后端服务器(数据库)

转发后端请求和负载均衡

rewrite 重定向

nginx的变量

标志位

flag

rewrite的执行顺序

rewrite的语法

常用实验

基于域名进行跳转

基于客户端的ip进行跳转


location 匹配

location匹配的就是后面的uri

location匹配的分类和优先级

1.精确匹配

location = / 对字符串进行完整匹配,必须完全符合

2.正则匹配

location ^~前缀匹配,以什么为开头

~ 区分大小写的匹配

~* 不区分大小写的匹配

!~ 区分大小写的取反

!~* 不区分大小写的取反

3.一般匹配

location / 字符串

优先级:精确匹配 > 正则匹配 > 一般匹配

优先级细分

location = 必须是完整路径(完全相同)

location ^~

location ~   location ~*

location /部分起始位置

location /

实际网站中的使用规则

1.用精确匹配来实现网站的首页

访问网站的首页 (= /)

location = / {

  root html;

  index index.html index.htm index.php;

}

2.用正则匹配来实现静态请求的页面和图片

匹配静态页面

location ^~ /static/ {

  root /web/static/;

  index index.html index.html;

}

访问图片或者指定的后缀名

location ~* \.(jpg.gif | png | jpeg | css | php)$ {

  root /web/picturs/;

 index index.html index.htm;

}

3.用一般匹配转发.php 、.js为后缀的动态请求到后端服务器(数据库)

转发后端请求和负载均衡

location / {

  proxy_pass

}

rewrite 重定向

rewrite就是把当前访问的页面跳转到其他页面。

rewrite的工作方式:通过nginx的全局变量或者自定义变量,结合正则表达式和标志位实现URL的重定向

nginx的变量

$uri 客户端请求的uri的地址

$host 请求的主机名

$http_user_agent 客户端请求的浏览器和操作系统

$http_referer 请求头的referer信息,表示当前页面来源的url

$remote_addr 客户端的ip地址

$remote_port 客户端的端口号

$server_addr 服务端的ip地址

$server_port 服务端的端口号

$request_method 获取客户端请求的方法

$scheme 请求的协议,要么是http那么是https

x_forwarded_for 用来获取请求头当中客户端的真是ip地址,使用代理服务器添加,在代理服务器当中指示客户端的ip地址

X-Real-IP 客户端真实的ip地址

在nginx.conf添加

proxy_set_header X-Real-IP $remote_addr;

加上这个字段,客户端的真实ip地址就会传递给后端服务器

变量的使用

结果

标志位

flag

1.permanent  永久重定向 ,返回码是301,在浏览器地址栏会显示跳转后的URL地址

2.redirect 临时重定向,返回码是302,在浏览器地址栏会显示跳转后的URL地址

3.break 永久重定向,返回码是301,但是它匹配到规则之后不会再向下匹配其他规则,URL也不会发生变化

4.last 重定向,但是会继续向下匹配其他的location规则

实验

访问test1会跳转到xy102

rewrite的执行顺序

1.server模块的rewrite优先级最高

2.匹配location的规则

3.执行选定的location规则

rewrite的语法

rewrite 正则表达式  跳转后的内容 标志位;

500报错日志:

rewrite or internal redirection cycle while processing

在重定向的过程中,使用last方式进行重定向,但是没有结束语,陷入死循环,nginx会自动循环10次,fast匹配最多只能执行10次,超过10次没有结束,就会停止,然后报错500。

解决方法:添加break

常用实验

基于域名进行跳转

(老的不用了,但是依然能够访问,统统跳转到新的域名)

^/(.*)$ 以什么为开头以什么为结尾,就是获取全部内容

做映射

结果:访问www.xy102.com 会跳转到www.cj.com

基于客户端的ip进行跳转

(公司有新业务上线,属于测试阶段,其他的ip只能显示维护中,只有192.168.233.10能正常访问)

结果

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【qt】TCP的监听 (设置服务器IP地址和端口号)

TCP监听是在自己的IP地址上进行的。 当一个TCP服务器程序启动时,它会绑定到一个特定的IP地址和一个端口号上,以便可以接收来自该IP地址和端口号的传入连接请求. 所以我们要先来获取主机的IP地址和设置端口号. 注意: 服务器程序无法任意设置IP地址&…

数据结构学生信息顺序表

主程序 #include "fun.h" int main(int argc, const char *argv[]) { seq_p Screate_seq(); stu data; printf("请问要输入几个学生的数据:"); int n; scanf("%d",&n); while(n--) { prin…

cloudflare tunnels tcp

这里是官网的说明Cloudflare Tunnel Cloudflare Zero Trust docs 根据实际情况安装环境 tunnels除了http,https协议是直接暴露公网,tcp是类似ssh端口转发。 在需要内网穿透的局域网找一条机子部署代理 我这边是window cloudflared tunnel login #生成一个身份校…

防火墙概述

1、防火墙 防火墙顾名思义就是防止火灾发生时,火势烧到其它区域,使用由防火材料砌的墙。在网络安全中,防火墙的作用就是保护本地网络不受到外部网络或恶意程序的伤害。 防火墙的核心任务是控制和防护,即通过安全策略识别流量并做…

【周末闲谈】AI“抢饭碗”?绝对不是危言耸听

AI是在帮助开发者还是取代他们? 在软件开发领域,生成式人工智能(AIGC)正在改变开发者的工作方式。无论是代码生成、错误检测还是自动化测试,AI工具正在成为开发者的得力助手。然而,这也引发了对开发者职业前景和技能需求变化的讨论。AI究竟是在帮助开发者还是取代他们?…

【论文阅读】-- Visual Analytics for Model Selection in Time Series Analysis

时间序列分析中模型选择的可视化分析 摘要1 引言2 相关工作3 问题表征3.1 Box-Jenkins 方法论3.2 ARIMA 和季节性 ARIMA 模型3.3 模型规范3.4 模型拟合3.5 模型诊断 4 需求分析5 VA 用于时间序列分析中的模型选择5.1 VA选型流程说明5.2 TiMoVA 原型5.2.1 实施选择5.2.2 图形用户…

【JavaSE复习】数据结构、集合

JavaSE 复习 1.数据结构1.1 查找1.1.1 基本查找1.1.2 二分查找1.1.3 插值查找1.1.4 斐波那契查找1.1.5 分块查找1.1.6 分块查找的扩展(无规律数据) 1.2 排序1.2.1 冒泡排序1.2.2 选择排序1.2.3 插入排序1.2.4 快速排序 2. 集合2.1 基础集合2.1.1 集合和数…

MyBatis中二级缓存的配置与实现原理

大家好,我是王有志,一个分享硬核 Java 技术的金融摸鱼侠,欢迎大家加入 Java 人自己的交流群“共同富裕的 Java 人”。 上一篇文章《MyBatis中一级缓存的配置与实现原理》中,我们已经掌握了 MyBatis 一级缓存的配置(虽然…

使用AOP思想实现开闭原则下的流水日志输出

主要实现思想: 通过实现Convert接口来抽取公共组件,获取想要的标准模型。 现在有两个订单场景,一个保存订单,一个为更新订单。构造如下的服务类: import org.springframework.stereotype.Service;Service public clas…

pwm 呼吸灯(如果灯一直亮或者一直灭)

(这个文章收藏在我的csdn keil文件夹下面) 如果这样设置预分频和计数周期,那么算出来的pwm频率如下 人眼看起来就只能是一直亮或者灭,因为pwm的频率太高了,但是必须是频率够高,才能实现呼吸灯的缓慢亮缓慢…

Django之项目开发(一)

一、项目的生命周期介绍 传统Web 项目的生命周期指的是从开始构建一个网站到该网站完成并维护的整个过程。通常情况下,Web 项目的生命周期包括以下几个阶段 需求分析阶段:在这个阶段,项目组会与客户进行沟通,确定网站的功能、内容和设计。 主要由产品经理参与产出思路与方案…

ChatGPT-4o大语言模型优化、本地私有化部署、从0-1搭建、智能体构建等高级进阶

目录 第一章 ChatGPT-4o使用进阶 第二章 大语言模型原理详解 第三章 大语言模型优化 第四章 开源大语言模型及本地部署 第五章 从0到1搭建第一个大语言模型 第六章 智能体(Agent)构建 第七章 大语言模型发展趋势 第八章 总结与答疑讨论 更多应用…

Nginx auth 的权限验证

基本流程 整个流程为;以用户视角访问API开始,进入 Nginx 的 auth 认证模块,调用 SpringBoot 提供的认证服务。根据认证结果调用重定向到对应的 API 接口或者 404 页面。 查看版本保证有 Nginx auth 模块 由于 OpenAI 或者本身自己训练的一套…

数据结构(其一)--基础知识篇

1. 数据结构三要素 1.1 数据结构的运算 即,增删改查 1.2 数据结构的存储结构 2. 数据类型,抽象数据类型 数据类型: (1). 原子类型:bool、int... (2). 结构类型:类、…

Linux多线程(中)

Linux多线程(中) 1.Linux线程互斥1.1互斥量的接口1.1.1初始化互斥量1.1.2销毁互斥量1.1.3互斥量加锁和解锁 1.2修改代码1.3互斥量实现原理 2.可重入VS线程安全3.死锁4.Linux线程同步5.生产者消费者模型 🌟🌟hello,各位…

Java 自定义集合常量

文章目录 Java 自定义集合常量一、普通方法自定义集合常量信息1、定义 Map 集合信息(1)方法一:使用静态代码块(2)方法二:简单定义 Map 常量 2、定义 List 集合信息3、定义 Set 集合信息 二、通过 Collectio…

用win的控制台去远程连接虚拟机linux的终端

以Ubuntu为例,首先确保Ubuntu已经安装了ssh服务 sudo apt-get install openssh-server输入密码 安装完毕后查看ssh状态是否开启 sudo systemctl status ssh 显示绿色激活状态,可以关闭或开启 对应start和stop winr打开win端控制台 输入 ssh -p 22 …

python-22-零基础自学python-数据分析基础 打开文件 读取文件信息

学习内容:《python编程:从入门到实践》第二版 知识点: 读取文件 、逐行读取文件信息等 练习内容: 练习10-1:Python学习笔记 在文本编辑器中新建一个文件,写几句话来总结一下你至此学到的Python知识,其中…

ASCII码对照表(Matplotlib颜色对照表)

文章目录 1、简介1.1 颜色代码 2、Matplotlib库简介2.1 简介2.2 安装2.3 后端2.4 入门例子 3、Matplotlib库颜色3.1 概述3.2 颜色图的分类3.3 颜色格式表示3.4 内置颜色映射3.5 xkcd 颜色映射3.6 颜色命名表 4、Colorcet库5、颜色对照表结语 1、简介 1.1 颜色代码 颜色代码是…

声明队列和交换机 + 消息转换器

目录 1、声明队列和交换机 方法一:基于Bean的方式声明 方法二:基于Spring注解的方式声明 2、消息转换器 1、声明队列和交换机 方法一:基于Bean的方式声明 注:队列和交换机的声明是放在消费者这边的,这位发送的人他…