Nginx 跳转

article/2025/11/5 16:21:37

目录

  • 一.Nginx常见模块
    • 1.http
    • 2.server
    • 3.location
  • 二.location
    • 1.一般分为普通和正则
    • 2.location 常用的匹配规则
    • 3.location 示例
    • 4.location优先级排列说明
  • 三.REWRITE模块
    • 1.功能
    • 2.跳转场景
    • 3.跳转实现
    • 4.执行顺序
    • 5.语法格式
    • 6.实例
      • 6.1域名跳转
      • 6.2基于客户端IP 访问跳转
      • 6.3基于旧域名跳转到新域名后面加目录
      • 6.4基于参数匹配的跳转
      • 6.5基于目录下所有的php文件
      • 6.6基于普通的一条url

一.Nginx常见模块

1.http

http块是Nginx服务器配置中的重要部分,代理、缓存和日志定义等绝大多数的功能和第三方模块的配置都可以放在这模块中。作用包括:文件引入、MIME-Type定义、日志自定义、是否使用sendfile传输文件、连接超时时间、单连接请求数上限等。

2.server

server块,虚拟主机(虚拟服务器)。作用:使得Nginx服务器可以在同一台服务器上只要运行一组Nginx进程,就可以运行多个网站。

3.location

location块是server块的一个指令。作用:基于Nginx服务器接收到的请求字符串,虚拟主机名称(ip,域名)、url匹配,对特定请求进行处理。

二.location

1.一般分为普通和正则

常用的正则表达式

字符含义
.匹配任意单个字符,可以是一个汉字
^行首锚定, 用于模式的最左侧
$行尾锚定,用于模式的最右侧
*匹配前面字符任意次(包括0次)
?0或1次
+1次或多次(1次或以上)
\转义符
\d只匹配数字
{n}重复n次
{n,}至少n次(n次货以上)
{n,m}n到m次
[ ]定义匹配字符的范围,只匹配一次
[c]单个字符
[a-z]匹配任意小写字母
[a-zA-Z0-9]匹配任意字母和数字
()表达式的开始和结束位置
|或运算符a|b

2.location 常用的匹配规则

规则表达式规则含义
=进行普通字符精确匹配。也就是完全匹配
^~表示普通字符匹配。使用前缀匹配。如果匹配成功,则不再匹配其他 location
~表示执行一个正则匹配,区分大小写
~*表示执行一个正则匹配,不区分大小写
!~表示执行一个正则匹配,区分大小写不匹配
!~*表示执行一个正则匹配,不区分大小写不匹配

3.location 示例

1)精确匹配

location = / {}
=为精确匹配 / , 主机名后不能携带任何字符串,比如 / 和 /data ,则/匹配,/data不匹配

2)一般匹配/通用匹配

location  / {}
代表已/开头,所以这条规则将匹配所有的请求  location  /documents/ {}
匹配任何已/documents/开头的地址,匹配符合后,还会继续往下搜索其他 location,只有其它location后面的正则表达式没有匹配到时,才会用这一条
  1. 正则匹配
location ^~ /images/ {} 
匹配任何已/images/ 开头的地址,匹配符合后,停止往下搜索,采用这一条location ~* \.(gif|jpg|jpeg)$ {} 
匹配所有 gif jpg 或 jepg 结尾的请求
如果 有上面的location ^~ /images/ {}匹配  则会先匹配上一请求,所以到不了这一条。

4.location优先级排列说明

  1. 等号类型(=)的优先级最高。一旦匹配成功,则不再查找其他匹配项。
  2. ^~类型表达式。一旦匹配成功,则不再查找其他匹配项。
  3. 正则表达式类型(*)的优先级次之。常规字符串匹配类型(不带任何修饰符的匹配),按前缀匹配。/test
  4. 通用匹配(/),如果没有其它匹配,任何请求都会匹配到。

location 优先级总结
如果是匹配路径:
(location = 完整路径) > (location ^~ 完整路径) > (location ~* 完整路径) >(location ~ 完整路径) > (location /)通用匹配
用目录做匹配访问某个文件
(location =目录)>(location~目录/)> (location~目录)>(location ~*目录)>(location目录)>(location /)

[root@localhost conf]# vim nginx.conf
[root@localhost conf]# pwd
/usr/local/nginx/conf

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

[root@localhost conf]# mkdir -p /wuqi/plane
[root@localhost conf]# vim /wuqi/plane/index.html

在这里插入图片描述
但是打开主页仍然不是我们想要的页面
在这里插入图片描述
所以证实了在精准匹配没加后缀前级别还不如普通匹配

[root@localhost wuqi]# vim /usr/local/nginx/conf/nginx.conf

在这里插入图片描述
在这里插入图片描述
重启服务后

[root@localhost wuqi]# nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
[root@localhost wuqi]# service nginx restart

在域名后加上后缀,精准匹配就生效了,而不再是主页了
在这里插入图片描述
实际网站使用中,至少有三个匹配规则定义

第一个规则
直接匹配网站根,通过域名访问网站首页比较频繁,使用这个会加速处理,比如说官网。
可以是一个静态首页,也可以直接转发给后端应用服务器
第二个规则
是处理静态文件请求,这是nginx作为http服务器的强项有两种配置模式,目录匹配或后缀匹配,任选其一或搭配使用
第三个规则
就是通用规则,比如用来转发带.php、.jsp后缀的动态请求到后端应用服务器。

三.REWRITE模块

现在 Nginx 已经成为很多公司作为前端反向代理服务器的首选,在实际工作中往往会
遇到很多跳转(重写 URL)的需求。比如更换域名后需要保持旧的域名能跳转到新的域名
上、某网页发生改变需要跳转到新的页面、网站防盗链等等需求。如果在后端使用的 Apache
服务器,虽然也能做跳转,规则库也很强大,所以用 Nginx 跳转效率会更高。

1.功能

rewrite功能就是,使用nginx提供的全局变量或自己设置的变量,结合正则表达式和标记位实现URL重写以及重定向。比如:更换域名后需要保持旧的域名能跳转到新的域名上、某网页发生改变需要跳转到新的页面、网站防盗链等等需求
rewrite 只能在
server {}
location {}
if {}
中,并且默认只能对域名后边的除去传递的参数外的字符串起作用

2.跳转场景

Rewrite 跳转场景主要包括以下几种

  1. 可以调整用户浏览的 URL,看起来更规范,合乎开发及产品人员的需求
  2. 为了让搜索引擎搜录网站内容及用户体验更好,企业会将动态 URL 地址伪装成静态地址提供服务
  3. 网址换新域名后,让旧的访问跳转到新的域名上。例如,访问京东的 360buy.com会跳转到 jd.com
  4. 根据特殊变量、目录、客户端的信息进行 URL 调整等。

3.跳转实现

Nginx 是通过 ngx_http_rewrite_module 模块支持 url 重写、支持 if 条件判断,但不支
持 else。
另外该模块需要 PCRE 支持,应在编译 Nginx 时指定 PCRE 支持,默认已经安装。
根据相关变量重定向和选择不同的配置,从一个 location 跳转到另一个 location,不过这样
的循环最多可以执行 10 次,超过后 Nginx 将返回 500 错误。
同时,重写模块包含 set 指令,来创建新的变量并设其值,这在有些情景下非常有用的,如记录条件标识、传递参数到其他location、记录做了什么等等。

4.执行顺序

rewrite执行顺序如下:

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

5.语法格式

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

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

6.实例

6.1域名跳转

从一个网址跳转至另一个域名

[root@localhost ~]# cd /usr/local/nginx/html
[root@localhost html]# mkdir zy
root@localhost html]# ls
123.png  50x.html  index.html  zy
[root@localhost html]# cd zy
[root@localhost zy]# vim index.html

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
打开客户机

[root@www ~]# vim /etc/hosts

在这里插入图片描述
打开浏览器,输入“www.zy.com”
在这里插入图片描述
但是网页打开的却是“www.fxy.com”
在这里插入图片描述

6.2基于客户端IP 访问跳转

输入IP地址进行跳转到目标地址

[root@localhost ~]# cd /usr/local/nginx/conf
[root@localhost conf]# vim nginx.conf

在这里插入图片描述

在这里插入图片描述
创建一个页面

[root@localhost nginx]# cd /usr/local/nginx/html
[root@localhost weihu]# vim weihu.html

在这里插入图片描述
打开客户端,输入“192.168.133.100”或者“www.zy.com”
在这里插入图片描述
在这里插入图片描述

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

在原目标地址中间增加一个目录

[root@localhost ~]# cd /usr/local/nginx/conf
[root@localhost conf]# vim nginx.conf

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

[root@localhost conf]# cd /usr/local/nginx/html/
[root@localhost html]# mkdir -p bbs/luntan
[root@localhost html]# ls
123.png  50x.html  bbs  index.html
[root@localhost html]# cd bbs
[root@localhost bbs]# ls
luntan
[root@localhost bbs]# cd luntan/
[root@localhost luntan]# vim test.html

在这里插入图片描述

[root@localhost luntan]# nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
[root@localhost luntan]# service nginx restart

开启客户端 在网页里输入“www.zy.com/luntan”
在这里插入图片描述
会跳到新地址
在这里插入图片描述

6.4基于参数匹配的跳转

匹配参数可以直接跳转

[root@localhost ~]# cd /usr/local/nginx/conf/
[root@localhost conf]# vim nginx.conf

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

开启客户端
输入网址这里200后的数可以随便输入任意数
在这里插入图片描述
跳转至主页
在这里插入图片描述

6.5基于目录下所有的php文件

只要是.php结尾的都可以跳转主页

[root@localhost ~]# cd /usr/local/nginx/conf/
[root@localhost conf]# vim nginx.conf

在这里插入图片描述
在这里插入图片描述
打开客户端
输入网址后加上“upload…/.php"结尾
在这里插入图片描述
网页会自动跳转到主页
在这里插入图片描述

6.6基于普通的一条url

从目标地址跳转至主页

[root@localhost ~]# cd /usr/local/nginx/conf
[root@localhost conf]# vim nginx.conf

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

[root@localhost conf]# nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
[root@localhost conf]# service nginx restart

开启客户端
输入www.zy.com/abc/123.html
在这里插入图片描述
跳至主页
在这里插入图片描述


http://chatgpt.dhexx.cn/article/8C0CYfHN.shtml

相关文章

pyqt5的页面跳转

前言&#xff1a; 正在学习python&#xff0c;学到了文件读取操作&#xff0c;想用pyqt5实现一下&#xff0c;发现我对于pyqt5还是不够了解。 现在记录一下我用pyqt5实现页面跳转的过程 方便以后查阅 pycharm使用pyqt5的话建议解释器用python3.7 由于目前我的水平还是太菜&…

div链接跳转

1、先建立一个div 2、给div写个id&#xff0c;直接写个go吧&#xff0c;再写个class&#xff0c;就叫go1吧 3、给它里面写个你要跳转的网址名称 4、给它设置个样式&#xff0c;弄个黑色背景什么的 5、然后把字体调成白色&#xff0c;文字居中 6、这是目前这个div的样子 7、接着…

layui页面跳转

//模拟单页跳转 $(document).ready(function(){ $(“dd>a”).click(function (e) { e.preventDefault(); $("#iframeMain").attr(“src”,$(this).attr(“href”)); }); }); 逻辑&#xff1a;通过jq拿a的href值放到iframe的src属性上 解释&#xff1a; e.preventD…

html-超链接跳转-外部和内部页面跳转

a标签表示超链接 1、通过a标签来表示超链接&#xff0c;点击超链接文本可以跳转到绑定的网站地址 1表示外部的地址 2表示内部的页面的访问地址&#xff0c;不是填写内部页面&#xff0c;内部页面访问地址

AS页面跳转

在MyAdapter中定义如下接口,模拟ListView的OnItemClickListener&#xff1a; //define interface public static interface OnItemClickListener { void onItemClick(View view , int position); } 1 2 3 4 声明一个这个接口的变量&#xff1a; private OnItem…

页面跳转的两种方式(转发和重定向)区别详解:

转发和重定向的路径问题(重点) 1&#xff09;使用相对路径在重定向和转发中没有区别 2&#xff09;重定向和请求转发使用绝对路径时&#xff0c;根/路径代表了不同含义 重定向response.sendRedirect(“xxx”)是服务器向客户端发送一个请求头信息&#xff0c;由客户端再请求一次…

go语言web开发系列之八:gin框架中用go-redis缓存数据

一&#xff0c;安装需要用到的库 1,安装go-redis liuhongdiku:~$ go get -u github.com/go-redis/redis 说明&#xff1a;刘宏缔的go森林是一个专注golang的博客&#xff0c; 网站&#xff1a;https://blog.imgtouch.com 原文: go语言web开发系列之八:gin框架中用go-redis缓…

go语言web开发系列之二十一:用go-qrcode库生成二维码

一&#xff0c;安装用到的库 1,go-qrcode库的地址 GitHub - skip2/go-qrcode: :sparkles: QR Code encoder (Go) 2&#xff0c;安装go-qrcode库 liuhongdiku:~$ go get -u github.com/skip2/go-qrcode/... 3,resize库的地址&#xff08;在二维码中间放icon时太大时需要缩放…

go语言web开发出错

2019独角兽企业重金招聘Python工程师标准>>> err listen tcp :8080: bind: Only one usage of each socket address (protocol/network address/port) is normally permitted. 原因&#xff1a;开了两个服务器&#xff0c;造成监听端口冲突 转载于:https://my.osc…

go语言有哪些web框架

前言 由于工作需要&#xff0c;这些年来也接触了不少的开发框架&#xff0c;Golang的开发框架比较多&#xff0c;不过基本都是Web”框架”为主。这里稍微打了个引号&#xff0c;因为大部分”框架”从设计和功能定位上来讲&#xff0c;充其量都只能算是一个组件&#xff0c;需要…

go语言服务器代码,Go语言开发简单web服务器

欢迎&#xff0c;来自IP地址为&#xff1a;182.103.254.107 的朋友 Go语言由于其方便的并发通信机制以及强大的网络支持&#xff0c;常常被用于服务器软件的开发。本文将示例使用Go语言来开发简单的Web服务器。 HTTP协议是应用层协议&#xff0c;协议模型位于TCP之上&#xff0…

Go语言WEB开发[html/template包]

Go语言Web开发 Go语言提供了html/template包来支持模板渲染。Go提供的html/template包对HTML模板提供了丰富的模板语言&#xff0c;主要用于Web应用程序。 模板中的变量 模板中的变量通过{{.}} 来访问。 {{.}} 称为管道和root。 在模板文件内&#xff0c;{{.}}代表当前变量&…

Go语言web开发

一. HTTP Http:无状态协议,是互联网中使用Http实现计算机和计算机之间的请求和响应 Http使用纯文本方式发送和接收协议数据,不需要借助专门工具进行分析就可以知道协议中数据 Http报文(message)组成部分 请求行(request-line)请求头(head)请求体(body)响应头响应体 HTTP 1.1 实…

Go进阶:Go语言最热门的开源Web开发框架总结

注意&#xff1a;后续技术分享&#xff0c;第一时间更新&#xff0c;以及更多更及时的技术资讯和学习技术资料&#xff0c;将在公众号CTO Plus发布&#xff0c;请关注公众号&#xff1a;CTO Plus Go语言是近年来备受关注的一种编程语言&#xff0c;它以其高效、安全、简洁的特…

Go语言五大主流web框架

以下 star数截止2023年7月份 1.Gin&#xff08;69.7K&#xff09; 项目简介&#xff1a;Gin 是一个用 Go (Golang) 编写的 HTTP Web 框架。 它具有类似 Martini 的 API&#xff0c;但性能比 Martini 快 40 倍。 仓库地址&#xff1a;https://github.com/gin-gonic/ginhttps:…

Go语言web开发入门

创建两个文件main.go 和hello.txt main.go package mainimport ("fmt""io/ioutil""net/http" )func sayHello(w http.ResponseWriter, r *http.Request) {b, _ : ioutil.ReadFile("D:/桌面/goprojects/gin框架快速入门/gin框架与Go语言模…

GO 语言 Web 开发实战一

xdm&#xff0c;咱今天分享一个 golang web 实战的 demo go 的 http 包&#xff0c;以前都有或多或多的提到一些&#xff0c;也有一些笔记在我们的历史文章中&#xff0c;今天来一个简单的实战 HTTP 编程 Get 先来一个 小例子&#xff0c;简单的写一个 Get 请求 拿句柄 设置…

goweb开发实战笔记(一)

目录 &#x1f9e1;Gin简介 &#x1f9e1;Gin特性 &#x1f9e1;Gin环境搭建 &#x1f9e1;HTTP请求和参数解析 创建Engine Handle方法处理 Engine分类处理 表单实体绑定 ShouldBindQuery ShouldBind JSON 多数据格式返回请求结果 []byte切片 string JSON HTML…

golang学习之go web 开发

文章目录 一、hello world二、请求处理1、url参数处理2、form参数处理3、header参数处理 三、响应处理1、ResponseWriter 四、cookie五、session实现1、session id2、session的存储3、session过期4、实现代码1、session 操作代码2、web服务3、登录页面4、session数据展示页面 一…

FlexSlider图片轮播切换jQuery插件

下载地址 flexSlider是一款强大的图片轮播插件。参数说明animation: "slide", // String: ["fade"|"slide"]&#xff0c;动画效果easing: "swing", // String: 滚动动画计时函数direction: "horizonta…