【Nginx】Nginx的重定向——location
location 匹配URI
location 匹配的规则和优先级;***重点
nginx常用的变量;要求掌握
rewrite 重定向;掌握/理解
location匹配:***
正则表达式:匹配的是文件内容
常见的正则表达式:
. 匹配任意单个字符,包括汉字
^ 起始位置
$ 结束位置
* 匹配前面的字符0次或者多次
+ 匹配前面的字符1次或者多次
? 匹配前面的字符1次或者0次
\ 转义符;\.==.;\d 匹配纯数字
[a-zA-Z0-9] 匹配所有大小写字符或者任意数字
[a] 匹配单个字符a
{n} 连续重复出现几次
{m,n} 最少出现m次,最多出现n次
() 分组
| 逻辑或
URI:统一资源标识符,是一种字符串标识,用于表示抽象的或者物理资源(文件、图片、视频)
location就是来匹配URI的
1.精确匹配:location= / {...}
2.正则匹配:location~ / {...}
3.通用匹配:location / {...}
匹配规则:
= 精确匹配;完全匹配,必须完全一致
^~ 匹配普通字符,前缀匹配
~ 区分大小写的匹配
~* 不区分大小写的匹配
~$ 结束位置
!~ 取反;区分大小写,取得逻辑非;
!~* 取反;不区分大小写
location的匹配原则:越精确,优先级越高
匹配的优先级:
精确匹配 > 正则匹配 > 通用匹配
location = > location ^~ > location ~* > location /test > location /
配置文件的修改:
vim /usr/local/nginx/conf/nginx.conf修改后:
nginx -t #查看语法是否有问题
systemctl restart nginx #重启nginx服务
生产中location的匹配规则
1.第一个必选规则
location = /
直接匹配根网站,通过域名访问网站首页是最多的;使用精确匹配,可以加快处理速度
2.第二个规则
location ^~ /static/ {}
处理静态文件的请求,目录匹配
3.
location ~* \.(gif|jpg|png|css) {...} #匹配图片用的
4.通用规则
location / {
proxy_pass 指定代理,反向代理,转发动态请求;将.php .jsp的请求发送到后端}location /test/ { #指定匹配}
rewrite 重写,重定向
作用:
rewrite使用nginx的全局变量或者是自己设置的变量,结合正则表达式和标志位实现URL的重写,以及重定向
rewrite只能放在server{},location{},if{}中,并且默认只能对域名后边的除去传递的参数外的字符串起作用
例:
http://www.kgc.com/a/we/index.php?id=1&u=str #只对/a/we/index.php重写。
rewrite执行的顺序:
1.先执行server块当中的rewrite
2.执行location匹配
3.如果location当中还有rewrite,继续执行
不停rewrite,死循环,只能10次,然后报错,状态码:500
rewrite的语法:
rewrite <regex> <replacemnet> [flag]
rewrite 开始重定向
regex 正则匹配的规则
replacemnet 表示跳转后的内容,你要重定向的url
flag 标志位;表示rewrite支持的flag标记permanent 永久重定向;返回码:301
redirect 临时重定向;返回码:302
永久重定向,301;永久性的变更URL,搜索引擎会转移他的权重以及排名到新的URL
临时重定向,302;用于短期变更(例:网站维护,或者升级更新),搜索引擎不会转移权重和排名到新的URL
304 表示获取的是本地的缓存
flag标记说明
last 本条规则匹配完成后,继续向下匹配新的location URI规则。
break 本条规则匹配完成即终止,不再匹配后面的任何规则,且URI不会发生变化。
redirect 返回302临时重定向,浏览器地址会显示跳转后的URL地址。
permanent 返回301永久重定向,浏览器地址栏会显示跳转后的URL地址。
例:
permanent:
location / {rewrite /test/(.*) /ky30/$1 permanent;index index.html index.htm;}mkdir test
echo test > index.html
mkdir ky30
echo ky30 > index.html
返回301,永久重定向
break的作用
是重定向,但是不会改变URI,而且只会请求一次;跳出当前匹配,立即终止
last
本条负责匹配完成后,继续向下匹配,只要有last就继续匹配;配置的时候需要注意,防止进入死循环
死循环的报错:rewrite or internal redirection cycle while processing #写成死循环,一直在匹配location;循环10次后终止,返回码500.
基于域名的跳转
现在公司旧域名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 "192.168.220.10 www.kgc.com www.benet.com" >> /etc/hosts
systemctl restart nginx
permanent: 永久性重定向,请求日志中的状态码为301。
基于IP地址的跳转:页面维护、升级
今天公司业务新版本上线,要求所有 IP 访问任何内容都显示一个固定维护页面,
只有公司 IP :192.168.220.10访问正常。
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#判断是否为合法IPif ($remote_addr = "192.168.220.10"){ #当客户端IP为192.168.220.10时,将变量值设为false,不进行重写set $rewrite false;}#除了合法IP,其它都是非法IP,进行重写跳转维护页面if ($rewrite = true){ #当变量值为true时,进行重写rewrite (.+) /error.html; #重写在访问IP后边插入/error.html,例如192.168.220.22/error.html}location = /error.html {root html; #网页返回html/error.html的内容}location / {root html;index index.html index.htm;}
}systemctl restart nginx#只有 IP 为 192.168.220.10 能正常访问,其它地址都是维护页面systemctl restart nginx.service
基于目录下所有 php 结尾的文件跳转
vim /usr/local/nginx/conf/nginx.conf
server {listen 80;server_name www.test.com; #域名修改 charset utf-8;access_log /var/log/nginx/www.test.com-access.log;location ~* /upload/.*\.php$ {rewrite (.+) http://www.test.com permanent;}location / {root html;index index.html index.htm;}
}
systemctl restart nginx
访问http://www.test.com/upload/123.php,直接跳转到www.test.com
Nginx的内置变量:
$uri
$remote_addr 客户端的IP地址
$remote_port 客户端的端口号
$server_addr 服务器的IP地址
$server_port 服务器的端口号。表示如果没有在其他地方显示设置,content-type的字段,默认响应为text/plan;纯文本格式
text/html 默认的响应类型,也就是我们说的页面
相关文章:
【Nginx】Nginx的重定向——location
location 匹配URI location 匹配的规则和优先级;***重点 nginx常用的变量;要求掌握 rewrite 重定向;掌握/理解 location匹配:*** 正则表达式:匹配的是文件内容 常见的正则表达式:…...
每日一题——滑动窗口的最大值
滑动窗口的最大值 题目链接 暴力解法 最容易想到的当然还是通过两层循环来暴力求解:一层循环用来移动窗口,一层循环用来在窗口内找到最大值。这种做法的时间复杂度为O(kN),会超出时间限制,因此,我们要找到更加高效的…...
【使用go开发区块链】之获取链上数据(03)
上篇文章,我们完成了数据库的连接,本章节,我们将完成ethclient的配置以及初始化 1、ethclient配置 1.1、安装go-ethereum 在命令行终端输入下面代码安装: go get github.com/ethereum/go-ethereum1.2、Ethclient配置 1.2.1、新…...
js 动态设置transformOrigin
transformOrigin属性用于指定元素变换的原点。 // 获取要设置的元素 const element document.getElementById(your-element-id);// 设置transformOrigin属性 element.style.transformOrigin 50% 50%; // 以元素中心为原点// 或者使用变量来设置 const x 0; // x坐标 const …...
docker使用tab无法自动补全命令
本文参考链接 一、安装bash-complete 在线安装 yum install -y bash-completion二、刷新文件 source /usr/share/bash-completion/completions/docker source /usr/share/bash-completion/bash_completion...
既然jmeter也能做接口自动化,为什么还需要pytest自己搭框架?
今天这篇文章呢,我会从以下几个方面来介绍: 1、首先介绍一下pytest框架 2、带大家安装Pytest框架 3、使用pytest框架时需要注意的点 4、pytest的运行方式 5、pytest框架中常用的插件 一、pytest框架介绍 pytest 是 python 的第三方单元测试框架&a…...
Objective-C获取变量类型的方法
在Objective-C中,要获取一个对象的类型,可以使用[object class]方法。这将返回一个Class对象,表示该对象的类型。 另外,typeid是C中的关键字,用于获取一个变量的类型信息。在Objective-C中,typeid并不适用于…...
相机可见区域,使用鼠标拖拽模型
知识点 向量射线检测坐标转换 思路 使用射线检测获取射线检测点与模型对象之间的偏移量 (世界空间)使用相机的坐标转换获取检测点与鼠标位置之间的偏移量 (屏幕空间)拖拽时,更新模型位置 代码示例 using UnityEng…...
Vue 2 与 Vue 3 的全面比较
Vue 2 与 Vue 3 的全面比较 1. 性能提升 Vue 3 的性能得到了显著提升。虚拟 DOM 已经重写,使补丁过程更快。 对比: Vue 3 使用了基于 Proxy 的新观察者机制,取代了 Vue 2 的基于 Object.defineProperty 的观察者。 Object.definePropert…...
Unity学习笔记--如何优雅简便地利用对象池生成游戏对象(进阶版)LRU + 对象池
前言 之前写过一篇关于对象池的文章,现在来看写的并不是很好,所以来考虑优化下。 现在来看一年前写的代码,越看越不能入目hhh Unity学习笔记–如何优雅简便地利用对象池生成游戏对象 前置知识 Unity学习笔记–使用 C# 开发一个 LRU 代码实…...
【Spring专题】Bean的声明周期流程图
前言 我向来不主张【通过源码】理解业务,因为每个人的能力有限,甚至可能会因为阅读错误导致出现理解上的偏差,所以我决定,还是先帮大家【开天眼】,先整体看看流程图,好知道,Spring在写源码的过…...
C++实现俄罗斯方块(源码+详解)
👂 Take me Hand Acoustic - Ccile Corbel - 单曲 - 网易云音乐 源码Debug工具 (1)cppreference.com (主) (2)必应 (bing.com) (3)GPT(主) &#…...
01:STM32点灯大师和蜂鸣器
目录 一:点亮1个LED 1:连接图 2:函数介绍 3:点灯代码 二:LED闪烁 1:函数介绍 2:闪烁代码 三:LED流水灯 1:连接图 2:函数介绍 3:流水灯代码 四:蜂鸣器 1:连接图 2:蜂鸣器代码 一:点亮1个LED 1:连接图 因为IO口与LED负极相连所以IO口输出低电频,点亮LED (采用的是低…...
linux pwn 基础知识
环境搭建 虚拟机安装 镜像下载网站为了避免环境问题建议 22.04 ,20.04,18.04,16.04 等常见版本 ubuntu 虚拟机环境各准备一份。注意定期更新快照以防意外。虚拟机建议硬盘 256 G 以上,内存也尽量大一些。硬盘大小只是上界&#…...
Unity Poisson分布 【由ChatGPT生成】
Unity Poisson分布 【由ChatGPT生成】 前言项目Unity场景布置代码编写添加并设置脚本运行效果总结 前言 在Unity游戏开发中,数学和统计学的概念常常用于解决各种问题,从资源分配到游戏机制的设计。本文将探讨Poisson分布在Unity游戏开发中的实际应用和作…...
permission denied while trying to connect to the Docker daemon socket 错误
安装 docker 执行错误如下: $ docker pspermission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get “http://%2Fvar%2Frun%2Fdocker.sock/v1.24/containers/json”: dial unix /var/run/docker.sock: connect:…...
pytorch nn.ModuleList和nn.Sequential的用法笔记
有部分内容转自: pytorch小记:nn.ModuleList和nn.Sequential的用法以及区别_慕思侣的博客-CSDN博客 但是有部分内容做了修改调整, 在构建网络的时候,pytorch有一些基础概念很重要,比如nn.Module,nn.ModuleList,nn.Sequential,这些类我们称为为容器(containers),可…...
SQL | 高级数据过滤
5-高级数据过滤 通过组合WHERE子句,建立功能更强的检索语句。 5.1-组合WHERE子句 前面写的都是单一条件下的WHERE子句,SQL语句允许给出多个WHERE子句来组合检索,这些WHERE子句通过AND子句或者OR子句进行连接。 操作符(operato…...
ARM架构银河麒麟docker,源码编译安装GDAL
docker中安装依赖 sudo apt-get update sudo apt-get install build-essential autoconf automake libtool sudo apt-get install libproj-dev libgeos-dev libjson-c-dev libpng-dev libjpeg-dev sudo apt-get install python3-dev sudo apt-get install python3.11-dev去官网…...
(3)原神角色数据分析-3
绘图类 在名为“WRITEPHOT.py”的文件中,定义如下绘图方式,则在主页面(app.py)文件中,可通过如下方式调用: from WRITEPHOTO import WriteScatter,WriteFunnel,WriteBarData,WritePie,WriteLineBar 代码如下: "…...
51c自动驾驶~合集58
我自己的原文哦~ https://blog.51cto.com/whaosoft/13967107 #CCA-Attention 全局池化局部保留,CCA-Attention为LLM长文本建模带来突破性进展 琶洲实验室、华南理工大学联合推出关键上下文感知注意力机制(CCA-Attention),…...
DAY 47
三、通道注意力 3.1 通道注意力的定义 # 新增:通道注意力模块(SE模块) class ChannelAttention(nn.Module):"""通道注意力模块(Squeeze-and-Excitation)"""def __init__(self, in_channels, reduction_rat…...
dedecms 织梦自定义表单留言增加ajax验证码功能
增加ajax功能模块,用户不点击提交按钮,只要输入框失去焦点,就会提前提示验证码是否正确。 一,模板上增加验证码 <input name"vdcode"id"vdcode" placeholder"请输入验证码" type"text&quo…...
最新SpringBoot+SpringCloud+Nacos微服务框架分享
文章目录 前言一、服务规划二、架构核心1.cloud的pom2.gateway的异常handler3.gateway的filter4、admin的pom5、admin的登录核心 三、code-helper分享总结 前言 最近有个活蛮赶的,根据Excel列的需求预估的工时直接打骨折,不要问我为什么,主要…...
令牌桶 滑动窗口->限流 分布式信号量->限并发的原理 lua脚本分析介绍
文章目录 前言限流限制并发的实际理解限流令牌桶代码实现结果分析令牌桶lua的模拟实现原理总结: 滑动窗口代码实现结果分析lua脚本原理解析 限并发分布式信号量代码实现结果分析lua脚本实现原理 双注解去实现限流 并发结果分析: 实际业务去理解体会统一注…...
SiFli 52把Imagie图片,Font字体资源放在指定位置,编译成指定img.bin和font.bin的问题
分区配置 (ptab.json) img 属性介绍: img 属性指定分区存放的 image 名称,指定的 image 名称必须是当前工程生成的 binary 。 如果 binary 有多个文件,则以 proj_name:binary_name 格式指定文件名, proj_name 为工程 名&…...
保姆级教程:在无网络无显卡的Windows电脑的vscode本地部署deepseek
文章目录 1 前言2 部署流程2.1 准备工作2.2 Ollama2.2.1 使用有网络的电脑下载Ollama2.2.2 安装Ollama(有网络的电脑)2.2.3 安装Ollama(无网络的电脑)2.2.4 安装验证2.2.5 修改大模型安装位置2.2.6 下载Deepseek模型 2.3 将deepse…...
springboot整合VUE之在线教育管理系统简介
可以学习到的技能 学会常用技术栈的使用 独立开发项目 学会前端的开发流程 学会后端的开发流程 学会数据库的设计 学会前后端接口调用方式 学会多模块之间的关联 学会数据的处理 适用人群 在校学生,小白用户,想学习知识的 有点基础,想要通过项…...
python爬虫——气象数据爬取
一、导入库与全局配置 python 运行 import json import datetime import time import requests from sqlalchemy import create_engine import csv import pandas as pd作用: 引入数据解析、网络请求、时间处理、数据库操作等所需库。requests:发送 …...
【无标题】湖北理元理律师事务所:债务优化中的生活保障与法律平衡之道
文/法律实务观察组 在债务重组领域,专业机构的核心价值不仅在于减轻债务数字,更在于帮助债务人在履行义务的同时维持基本生活尊严。湖北理元理律师事务所的服务实践表明,合法债务优化需同步实现三重平衡: 法律刚性(债…...
