Nginx的重定向

URI:统一资源标识符,是一种字符串标识,主要是用于标识抽象的或者是物理资源(主要是指一些文件视频等等)

常用的Nginx正则表达式

^    匹配输入字符串的起始位置(以......开头)

$    匹配输入字符串的结束位置(以......结尾)

*    匹配前面的字符零次或多次

+    匹配前面的字符一次或多次

?    匹配前面的字符零次或一次

.    匹配除“\n”之外的任何单个字符,若要匹配包括“\n”在内的任意字符,需要用“[.\n]”

\    将后面接着的字符标记为一个特殊字符或一个原义字符或一个向后引用(转义字符)

\d    匹配纯数字【0-9】

{n}    重复n次

{n,}    重复n次或更多次

{n,m}    重复n到m次

[ ]    定义匹配的字符范围

[c]    匹配单个字符c

[a-z]    匹配a-z小写字母的任意一个

[a-zA-Z0-9]    匹配所有大小写字母或数字

()    表达式的开始和结束位置

|    或运算符

location匹配规则和优先级(重点!!!)

location匹配方式

                1.精确匹配         location = / {.....}

                2.正则匹配         location ~ / {......}

                3.一般匹配         location / {.......} 

location匹配规则

                =:精确匹配,完全匹配,必须是完全一致的

                ^~:匹配普通的字符,前缀匹配

                ~:区分大小写匹配

                ~*:不区分大小写匹配

                !~:区分大小写匹配 并且取反

                !~*:不区分大小写匹配 并且取反

location 匹配优先级

注:越精准越匹配        一旦匹配成功,便不再向下匹配

精准匹配 (=)  大于  正则匹配 (~)  大于 通用匹配  (/)

优先级  location =  >>  location ^~  >> location ~*  >>  location /指定的路径  >>  location /

nginx常用变量(必须掌握)

使用nginx的全局变量,或者是自己设置的变量,结合正则而表达式和标志位来实现url的重定向

nginx的内置变量

$uri: 请求的URI,不包含主机和查询参数。

$request_uri: 请求的URI,包含主机和查询参数。

$args: 查询参数部分,即?后面的内容。

$query_string: 整个查询字符串,包含?。

$host: 请求的主机名。

$http_user_agent: 请求的User-Agent头信息,用于表示请求的客户端浏览器和操作系统。

$http_referer: 请求的Referer头信息,表示当前页面的来源URL

常用

$remote_addr: 客户端的IP地址

$remote_port: 客户端的端口号

$server_addr: 服务器的IP地址

$server_port: 服务器的端口号

$request_method: 请求的HTTP方法,如GET、POST、等

$content_type: 请求的Content-Type头信息,表示请求体的MIME类型

$content_length: 请求的Content-Length头信息,表示请求体的长度

$scheme: 请求的协议,通常是http或https

$request_filename: 请求的文件名,用于指定请求的实际文件路径

$document_root: 当前请求的根目录

$server_name: 服务器名称,用于匹配server块的server_name指令

  

x_forwarded_for:用于获取HTTP请求头中的X-Forwarded-For字段的值

X-Forwarded-For是一个常见的HTTP请求头,通常由代理服务器添加,用于指示原始客户端的IP地址

proxy_set_header X-Forwarded-For $remote_addr; 这个是传给后端

X-Real-IP:头部为客户端真实IP地址

proxy_set_header X-Real-IP $remote_addr;

proxy_set_header指令来设置X-Real-IP头部的值为$remote_addr,即客户端的真实IP地址

这样,Nginx会将客户端的真实IP地址作为X-Real-IP头部的值传递给后端服务器

匹配示例

 location / {
            root   html;
            index  index.html index.htm;
            default_type text/plain;
            return 200 "way:$request_method";
        } 

default_type test/plain;

表示如果没有其他地方显示设置:contenr-type字段,默认响应test/plain;纯文本格式

text/html:默认的响应类型,也就是我们说的页面。

test/plain:纯文本文件,类似于.txt文件

test/css:CSS样式表的类型 .css

test/javascipt:java脚本,js脚本,也可以说是前端文件,也可以理解为java解析的是程序文件

注:nginx默认支持很多的类型,但是如果不声明,只是展示默认的html类型,其他的类型会自动下载下来展示

location = / {
    [ configuration A ]
}

精确匹配,=为精确匹配 / ,主机名后面不能带任何字符串

比如访问 / 和 /data,则 / 匹配,/data 不匹配 就不可以进行匹配

location / {
    [ configuration B ]
}

因为所有的地址都以 / 开头,所以这条规则将匹配到所有请求

比如访问 / 和 /data, 则 / 匹配, /data 也匹配,越匹配越精确,越精确优先级越高

location /documents/ {
    [ configuration C ]
}

匹配任何以 /documents/ 开头的地址,匹配符合以后,还要继续往下搜索其它 location

只有其它 location后面的正则表达式没有匹配到时停止匹配

location ^~ /images/ {
    [ configuration D ]
}

匹配任何以 /images/ 开头的地址

location ~* \.(gif|jpg|jpeg)$ {
    [ configuration E ]
}

匹配所有以 gif、jpg或jpeg 结尾的请求

然而,所有请求 /images/ 下的图片会被 location ^~ /images/ 处理,因为 ^~ 的优先级更高

生产上如何进行匹配

#第一个必选规则
直接匹配网站根,(通过域名访问网站首页比较频繁,使用精确匹配可以加快处理速度)
可以是一个静态首页,也可以直接转发给后端应用服务器
location = / {
    root   html;
    index  index.html index.htm;
}
 
#第二个必选规则

处理静态文件请求,这是nginx作为http服务器的强项
有两种配置模式,目录匹配或后缀匹配,任选其一或搭配使用
location ^~ /static/ {
    root /webroot/static/;
}
 
location ~* \.(html|gif|jpg|jpeg|png|css|js|ico)$ {
    root /webroot/res/;
}
 
#第三个规则

就是通用规则,比如用来转发带.php、.jsp后缀的动态请求到后端应用服务器
非静态文件请求就默认是动态请求
location / {
    proxy_pass http://tomcat_server;
}

rewrite:重定向功能(掌握理解) 

rewrite简介

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

比如: 更换域名后需要保持旧的域名能跳转到新的域名上、某网页发生改变需要跳转到新的页面、网站防盗链等等需求。

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

http://www.kgc.com/abc/bbs/index.php?a=1&b=2 只对/abc/bbs/index.php重写

rewrite跳转实现

Nginx: 通过ngx_http_rewrite_module 模块支持URL重写、支持if条件判断,但不支持else

 跳转: 从一个 location跳转到另一个location,循环最多可以执行10次,超过后nginx将返回500错误

PCRE支持: perl兼容正则表达式的语法规则匹配。另外该模块需要 PCRE 支持,应在编译 Nginx 时指定 PCRE 支持,默认已经安装

重写模块 set 指令: 创建新的变量并设其值

  1. 使用rewrite进行匹配跳转

  2. 使用if匹配全局变量后跳转

  3. 使用location匹配在跳转

  4. rewrite放在server{}、if{}、location{}段中

  5. location只对域名后边的除去传递参数外的字符串起作用

rewrite执行顺序

1.先执行server块中的rewrite的

2.执行loaction匹配

3.如果loaction当中还有rewrite,继续执行

不停rewrite,死循环,只能10次,然后服务端报错,并且日志中会表面

报错的状态码:500

rewrite语法

rewrite <正则表达式regex><replacement>[flag]

rewrite表示开始重定向

regex:正则匹配的规则

replacement:表示跳转后的内容,你要重定向url

flag:标志位

重点!!!会问

permanent:永久重定向;返回状态码301(永久性的变更url,搜索引擎会转移权重以及排名到新的url)

redirect:临时重定向;返回状态码302(主要用于短期变更,或者升级更新,这个时候搜索引擎并不会转移权重和排名到新的url)

304表示获取的本地的缓存

break:是重定向,但是不会改变url,而且只会请求一次;跳出当前匹配,即刻终止

last:本条规则配置完成之后,继续向下匹配,只要有last,就会继续匹配,匹配的时候需要注意,防止死循环但是nginx只能匹配10次

注意:当日志出现rewrite or internal redirection cycle while processing #写成死循环,一直在匹配location,10次,返回码500.

rewrite 实例

基于域名的跳转

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

vim /usr/local/nginx/conf/nginx.conf
server {
    listen       80;
    server_name  www.kgc.com;                                       #域名修改    
    #charset utf-8;
    #access_log  /var/log/nginx/kgc.com-access.log;                  #日志修改
    location / {
    #添加域名重定向
        if ($host = 'www.kgc.com'){                                #$host为rewrite全局变量,代表请求主机头字段或主机名
            rewrite ^/(.*)$ http://www.benet.com/$1 permanent;       #在重定向时,$1表示请求的URL
        }
        root   html;
        index  index.html index.htm;
    }
}

echo "本机IP www.kgc.com www.benet.com" >> /etc/hosts
systemctl restart nginx

基于客户端 IP 访问跳转

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

 

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

    #设置是否合法的IP标记
    set $rewrite true;                             #设置变量$rewrite,变量值为boole值true
    
    #判断是否为合法IP
    if ($remote_addr = "20.0.0.70"){          #当客户端IP为20.0.0.70时,将变量值设为false,不进行重写
        set $rewrite false;
    }
                                                   #除了合法IP,其它都是非法IP,进行重写跳转维护页面
    if ($rewrite = true){                          #当变量值为true时,进行重写
        rewrite (.+) /error.html;                   #重写在访问IP后边插入/error.html,例如20.0.0.60/error.html
    }
    location = /error.html {
        root html;                                 #网页返回html/error.html的内容
    }
    
    location / {
        root   html;
        index  index.html index.htm;
    }
}

systemctl restart nginx

 

 

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

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

相关文章

FreeRTOS( 任务与中断优先级,临界保护)

资料来源于硬件家园&#xff1a;资料汇总 - FreeRTOS实时操作系统课程(多任务管理) 目录 一、中断优先级 1、NVIC基础知识 2、FreeRTOS配置NVIC 3、SVC、PendSV、Systick中断 4、不受FreeRTOS管理的中断 5、STM32CubeMX配置 二、任务优先级 1、任务优先级说明 2、任务…

【LeetCode】144. 二叉树的前序遍历、94. 二叉树的中序遍历、145. 二叉树的后序遍历

作者&#xff1a;小卢 专栏&#xff1a;《Leetcode》 喜欢的话&#xff1a;世间因为少年的挺身而出&#xff0c;而更加瑰丽。 ——《人民日报》 144. 二叉树的前序遍历 144. 二叉树的前序遍历 题目&#xff1a; 给你二叉树的根节点 root &…

保姆级Arcgis安装图文安装教程

参考视频&#xff1a;【钟老师arcGIS从放弃到入门】02软件下载与安装_哔哩哔哩_bilibili 安装包在视频简介中有 注释&#xff1a;安装过程中有犯错误&#xff0c;请耐心看完一遍再跟着操作 &#xff08;一&#xff09;安装包下载 下载视频中分享的压缩包(压缩包密码&#x…

window下部署Yapi接口管理系统部署总结

window下部署Yapi接口管理系统部署总结 YApi 是高效、易用、功能强大的 api 管理平台&#xff0c;旨在为开发、产品、测试人员提供更优雅的接口管理服务。可以帮助开发者轻松创建、发布、维护 API&#xff0c;YApi 还为用户提供了优秀的交互体验&#xff0c;开发人员只需利用平…

后端开发8.品牌模块

概述 简介 效果图 数据库设计 DROP TABLE IF EXISTS `goods_brand`;CREATE TABLE `goods_brand` ( `goodsBrandId` int(11) NOT NULL AUTO_IN

04-4_Qt 5.9 C++开发指南_时间日期与定时器

文章目录 1. 时间日期相关的类2. 源码2.1 可视化UI设计2.2 dialog.h2.3 dialog.cpp 1. 时间日期相关的类 时间日期是经常遇到的数据类型&#xff0c;Qt 中时间日期类型的类如下。 QTime:时间数据类型&#xff0c;仅表示时间&#xff0c;如 15:23:13。 QDate:日期数据类型&…

【资料分享】全志科技T507-H工业核心板规格书

1 核心板简介 创龙科技SOM-TLT507是一款基于全志科技T507-H处理器设计的4核ARM Cortex-A53全国产工业核心板&#xff0c;主频高达1.416GHz。核心板CPU、ROM、RAM、电源、晶振等所有元器件均采用国产工业级方案&#xff0c;国产化率100%。 核心板通过邮票孔连接方式引出MIPI C…

QGIS开发五:使用UI文件

前面我们说了在创建项目时创建的是一个空项目&#xff0c;即不使用 Qt 提供的综合开发套件 Qt Creator&#xff0c;也不使用 Qt Visual Studio Tools 这类工具。 但是后面发现&#xff0c;如果我想要有更加满意的界面布局&#xff0c;还是要自己写一个UI文件&#xff0c;如果不…

深度对话|如何设计合适的网络经济激励措施

近日&#xff0c;我们与Mysten Labs的首席经济学家Alonso de Gortari进行了对话&#xff0c;讨论了如何在网络运营商和参与者之间找到激励措施的平衡&#xff0c;以及Sui的经济如何不断发展。 是什么让您选择将自己的经济学背景应用于区块链和Web3领域&#xff1f; 起初&…

微信个人小程序申请 (AppID 和 AppSecret)

1. 登录微信公众平台 https://mp.weixin.qq.com/cgi-bin/loginpage?url%2Fcgi-bin%2Fhome%3Ft%3Dhome%2Findex%26lang%3Dzh_CN%26token%3D47421820 2. 右上角立即注册 3. 注册类型选择小程序 4. 账号信息 5. 邮箱激活 6. 小程序发布流程 7. 小程序信息 (前往填写) 8. 获取小程…

【一】初步认识数据库

数据库概览数据库 缘起表(Table)的理解用表来定义数据库数据库系统的理解概念层次的理解实例层次的理解 数据库管理系统的理解从用户角度看从系统实现角度看典型的数据库管理系统 数据库语言数据库定义、操纵、控制语言数据库语言 VS 高级语言 内容回顾练习 数据库概览 走马观…

QT笔记——QT自定义事件

我们有时候想发送自定义事件 1&#xff1a;创建自定义事件&#xff0c;首先我们需要知道它的条件 1&#xff1a;自定义事件需要继承QEvent 2&#xff1a;事件的类型需要在 QEvent::User 和 QEvent::MaxUser 范围之间&#xff0c;在QEvent::User之前 是预留给系统的事件 3&#…

前端先行模拟接口(mock+expres+json)

目录 mock模拟数据&#xff1a;data/static.js 路由&#xff1a;index.js 服务器&#xff1a;server.js yarn /node 启动服务器&#xff1a;yarn start 客户端&#xff1a;修改代理路径(修改设置后都要重启才生效) 示例 后端框架express构建服务器 前端发起请求 静态数…

smtplib.SMTPHeloError: (500, b‘Error: bad syntax‘)

如果你编写邮件收发工具的时候,有可能会遇到这个问题。这里直接给出解决办法。 目录 1、检查系统版本 2、点击右侧的更改适配器选项

0基础学C#笔记08:插入排序法

文章目录 前言一、过程简单描述&#xff1a;二、代码总结 前言 我们在玩打牌的时候&#xff0c;你是怎么整理那些牌的呢&#xff1f;一种简单的方法就是一张一张的来&#xff0c;将每一张牌插入到其他已经有序的牌中的适当位置。当我们给无序数组做排序的时候&#xff0c;为了…

十九、docker学习-Dockerfile

Dockerfile 官网地址 https://docs.docker.com/engine/reference/builder/Dockerfile其实就是我们用来构建Docker镜像的源码&#xff0c;当然这不是所谓的编程源码&#xff0c;而是一些命令的集合&#xff0c;只要理解它的逻辑和语法格式&#xff0c;就可以很容易的编写Docke…

为什么DNS协议运行在UDP之上?

DNS (Domain Name System) 运行在 UDP (User Datagram Protocol) 上主要是出于以下原因&#xff1a; 简单性和效率&#xff1a;UDP 是无连接的&#xff0c;这意味着与建立和维护 TCP 连接相比&#xff0c;UDP 有更少的开销。当 DNS 查询被发送时&#xff0c;它只需要一个小的请…

[ MySQL ] — 数据库环境安装、概念和基本使用

目录 安装MySQL 获取mysql官⽅yum源 安装mysql yum 源 安装mysql服务 启动服务 登录 方法1&#xff1a;获取临时root密码 方法2&#xff1a;无密码 方法3&#xff1a;跳过密码认证 配置my.cnf 卸载环境 设置开机启动(可以不设) 常见问题 安装遇到秘钥过期的问题&…

创建型设计模式:4、建造者模式(Builder Pattern)

目录 1、建造者模式含义 2、建造者模式的讲解 3、使用C实现建造者模式的实例 4、建造者模式的优缺点 5、建造者模式VS工厂模式 1、建造者模式含义 The intent of the Builder design pattern is to separate the construction of a complex object from its representatio…

时序预测 | MATLAB实现CNN-BiGRU-Attention时间序列预测

时序预测 | MATLAB实现CNN-BiGRU-Attention时间序列预测 目录 时序预测 | MATLAB实现CNN-BiGRU-Attention时间序列预测预测效果基本介绍模型描述程序设计参考资料 预测效果 基本介绍 MATLAB实现CNN-BiGRU-Attention时间序列预测&#xff0c;CNN-BiGRU-Attention结合注意力机制时…