Nginx极客时间:rewrite阶段的rewrite模块:return指令

本文深入探讨了Nginx中的return指令,包括其在SERVER_REWRITE和REWRITE阶段的作用,以及如何进行重定向操作。详细介绍了HTTP 301、302、303、307和308状态码的区别,并展示了return指令与error_page指令的关系。通过示例解释了在不同配置块中return指令的执行顺序,强调了动作类指令不合并的特性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. rewrite模块的return指令:

return指令 是由 rewrite模块提供的 一个非常常用的指令,可以在 SERVER_REWRITE 和 REWRITE 这两个阶段生效,
它可以帮助我们做 重定向 和 一些简单的返回。


如果return指令生效了,则后面所有阶段的HTTP模块是没有机会得到执行的。


2. return指令的用法:

在这里插入图片描述


如图中所示,return指令 有三种用法:

return code [text];
return code URL;
return URL;

举例:

location / {
	return 404 "find nothing!";
}
#	return code [text];

server {
	return 403;
}
#	return code;


HTTP “30X” 状态码的含义:

HTTP 1.0 标准:

301:http 1.0 永久重定向

例如客户端要访问网站A,Nginx返回301和网站B的URL重定向,则客户端会将这一次的重定向结果缓存起来,以后只要遇到要访问网站A的资源时,就自动重定向到网站B上,再也不会去访问网站A;

302:临时重定向,禁止被缓存

例如客户端要访问网站A,Nginx返回302和网站B的URL重定向,那么这一次客户端会重定向的去访问网站B,
但是当下一次客户端又需要访问网站A的资源时,还是会去访问网站A的URL,客户端不会缓存Nginx返回的302指示的重定向结果;


HTTP 1.1 标准:

303:临时重定向,允许改变方法,禁止被缓存

与302功能类似,区别在于允许改变方法,例如访问网站A时使用的是POST方法,在访问重定向后的网站B时可以变为GET方法;

307:临时重定向,不允许改变方法,禁止被缓存

与302功能类似,区别在于不允许改变方法,即重定向前后的两次访问必须使用相同的方法,如果访问网站A的方法是GET,那么重定向后访问网站B也必须是GET方法;

308:永久重定向,不允许改变方法

与301功能类似,区别在于不允许改变改变访问方法。


Nginx 自定义:

444:立刻关闭连接,Nginx不会再给客户端返回任何东西。



3. return指令 与 error_page指令:

在这里插入图片描述

error_page指令 的功能是: 当我们收到一个返回码的时候,我们可以将其重定向为另外一个URI,也可以指定给用户返回不一样的内容,

例如收到404的时候,默认就是给用户返回404,但是某些网站为了给用户更好的体验,可能会返回图片,或者一些独立的页面,


例如:

error_page  404  /404.html;
#当收到404返回码时,给用户返回 /404.html 页面

一个例子说明return与error_page的关系:

在这里插入图片描述

  1. 当return与error_page同时出现,error_page还有被执行的机会吗?
  2. 当return同时出现在 server配置块 和 location配置块 下,两个return指令是否有 合并 关系?

第一个问题,如果return与error_page同时出现,则error_page是得不到执行的;

第二个问题,前面讲到过,return指令属于 “动作类指令”(另一种指令类型是 “值类指令”),动作类指令不能合并。

而在上面的例子中可以看到 return 403; 是出现在 server{} 配置块中,是属于 SERVER_REWRITE 阶段的;
return 404 "find nothing!"; 是出现在 location{} 配置块中,是属于 REWRITE 阶段的,即 SEVER_REWITE 会在 REWRITE 阶段 前先执行,所以后面的return得不到执行,返回值是第一个return的值。


执行效果演示:

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值