LOGO OA教程 ERP教程 模切知识交流 PMS教程 CRM教程 开发文档 其他文档  
 
网站管理员

Nginx重定向设置方法简介

admin
2025年6月29日 15:1 本文热度 51

Nginx可以通过return和rewrite两种方式来实现重定向,下面通过几个例子简单演示下,如有错误,还望指正

一、使用return来实现重定向
return配置位置:

  • server:作用域为全局
  • location:作用域为location中
  • if :作用域为if{}中

return参数有三种方式:

  • return code url重定向
  • return url重定向 #临时重定向,返回302
  • return code “文本内容” 返回状态码以及文本

本例子中使用Nginx和Jenkins来作为演示,他们都部署在同一台机器上,端口分别为80和8080
1.1、下面例子使用第一种参数将url永久重定向到jenkins页面,如图:
注意:return后面的http地址结尾有没有”/”都没关系,因为只要匹配了路径/jenkins就会请求过来
接下来通过http://10.9.2.247/jenkins来请求,可以看到已经重定向到jenkins页面,如图:
1.2 、下面例子是使用第二种参数将url重定向到百度页面,如图:
此时通过浏览器访问http://10.9.2.247/url/ 将重定向到百度页面,查看返回状态码,如图:
1.3、下面例子是使用第三种参数,返回状态码和文本,如图:
通过浏览器访问http://10.9.2.247/test 将下载test文件,查看此文件内容如下:
注意:return后面只有是200的时候才会下载,其余的不会
return在server和if中用法基本差不多,过多演示
二、使用rewirte实现重定向
rewirte配置位置:

  • server:作用域为全局
  • location:作用域为location中
  • if :作用域为if{}中

语法如下:
rewrite regex replacement [flag]

  • regex:正则表达式

  • replacement:重写的内容,也就是跳转后的内容

  • flag:rewrite的标记

常用的flag标记如下:

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

演示例子之前我们先通过yum安装一个httpd,然后修改端口为88,并修改默认界面内容如下:
vim /var/www/html/index.html    #this is a httpd pag
启动httpd后,通过浏览器访问,如下:

本例子中Nginx和httpd都在同一台机器,端口分别为80和88,下面举几个例子演示下,更多用法可查官方文档或自行网络查找研究
rewrite放在location{}中
1、下面例子中,请求路由为/,也就是默认根路由,如图:

此时通过浏览器访问http://10.9.2.247,可以看到已经跳转到httpd,如图:

在不改变上图中rewrite规则情况下,无论location中路由变成什么,最终都是重定向到httpd的默认页面
2、在httpd默认界面/var/www/html目录下创建test目录,添加index.html文件,内容如下:
mkdir -p /var/www/html/testecho "this is a test page about httpd!!!" > /var/www/html/test/index.html
修改location和rewrite规则,如图:

通过浏览器访问http://10.9.2.247/test ,查看浏览器响应结果如下:

从上图看出,当请求路由为/test,实际是跳转到了httpd根路径下的test目录的index.html文件,为什么会这样呢?因为rewrite中的正则(.*) 前面并无其他内容,因此此时匹配的就是上面的路由test,而$1正好对应的是(.*)的内容,因此实际请求路径就变成了10.9.2.247:88/test
注意:在rewrite的正则中,如果有$1、$2,那么实际匹配的是()中的内容,比如:
# $1、$2....只能匹配括号内容,记住,只能匹配括号内容rewrite /(abc)/(def) https://example.com/$1/$2 #匹配路径为https://example.com/abc/defrewrite /abc/(def)  https://example.comf/$1    #匹配路径为https://example.com/def
3、修改上述rewrite规则,添加一段路径,如图:

此时通过浏览器请求http://10.9.2.247/test/index.html,将跳转到httpd默认路径下的index.html,因为$1只能匹配括号的内容,此时(.*)匹配的内容就是index.html,因此实际重定向的路径就是http://10.9.2.247:88/index.html,^/test表示匹配以test开头的路由,location中是test,这里匹配的开头也要是test,不能所以写,会报错

注意:上面的location中路由是/test还是/test/对结果都没有影响,$1只匹配括号里的
4、修改rewrite规则,增加一个路径abcd,再次查看结果,如图:

浏览器中输入http://10.9.2.247/test/abcd/index.html,实际重定向的路径是http://10.9.2.247:88/index.html,因为$1匹配的只是()中的内容,如图:

注意:rewrite中的路由有test,location中路由也有test,此时rewrite中的test会覆盖location中test

5、修改location路由和rewrite规则,如图:


从上图看出location路由和rewrite路由不同,此时请求的时候需要将rewrite路由一起加上,请求路径http://10.9.2.247/test/def/abcd/index.html将重定向到http://10.9.2.247:88/index.html,如图:

注意看,上面的rewrite的/abcd/前面是没有”^”的,如果加了这个”^”后,再按照上面的路径请求就会异常,因为”^”表示匹配开头,加了后表示请求路由以abcd开头,那么请求路径就会变成http://10.9.2.247/abcd/index.html,但是location中也没有abcd这个,所以请求也不会成功,因此要么不加”^”,在请求的时候直接将rewrite路由加在location路由后面,要不就像上面2.4中的那样,把location的路由也写在rewrite中,并加前缀”^”匹配
6、下面例子使用$1和$2获取两个参数,如图:

浏览器请求http://10.9.2.247/test/def/abc/abc.html,结果如下:

上图中的rewrite有两个括号内容,那么将分别对应$1和$2,因此实际请求将匹配到http://10.9.2.247:88/abc/abc.html
rewrite放在if{}中
修改上面的nginx配置文件,如下:

  • 41行:定义两个域名

  • 44行:如果请求域名为www.abc.com,那么将通过rewrite重定向否则直接请求nginx的根路径文件

  • 45行:重定向到httpd路径下

  • 47行:默认的Nginx根路径

通过浏览器访问www.def.com,可以看到跳转到了Nginx的默认界面,如图:

通过浏览器访问www.abc.com,可以看到重定向到httpd页面,如图:

rewrite放在server{}中
修改Nginx配置文件,将rewrite放在server中,如图:

上图中将rewrite放在server中,那么此时这个重定向将对全局生效,此时通过域名访问将重定向到httpd的默认界面,如图:

阅读原文:原文链接


该文章在 2025/7/1 23:21:01 编辑过
关键字查询
相关文章
正在查询...
点晴ERP是一款针对中小制造业的专业生产管理软件系统,系统成熟度和易用性得到了国内大量中小企业的青睐。
点晴PMS码头管理系统主要针对港口码头集装箱与散货日常运作、调度、堆场、车队、财务费用、相关报表等业务管理,结合码头的业务特点,围绕调度、堆场作业而开发的。集技术的先进性、管理的有效性于一体,是物流码头及其他港口类企业的高效ERP管理信息系统。
点晴WMS仓储管理系统提供了货物产品管理,销售管理,采购管理,仓储管理,仓库管理,保质期管理,货位管理,库位管理,生产管理,WMS管理系统,标签打印,条形码,二维码管理,批号管理软件。
点晴免费OA是一款软件和通用服务都免费,不限功能、不限时间、不限用户的免费OA协同办公管理系统。
Copyright 2010-2025 ClickSun All Rights Reserved