网站首页 > 技术教程 正文
rewrite模块中如果执行了 return指令,那么后面的阶段都没有机会执行。
那么return指令的语法是怎么样的?
主要有3种:
return code [text];
return code URL;
return URL;
444 这个状态码,浏览器是收不到这个code的。这是Nginx自定义的状态码。
表示Nginx立刻关闭连接,不再向用户返回任何内容。
/* Our own HTTP codes */
/* The special code to close connection without any response */
#define NGX_HTTP_CLOSE 444
#define NGX_HTTP_NGINX_CODES 494
#define NGX_HTTP_REQUEST_HEADER_TOO_LARGE 494
#define NGX_HTTPS_CERT_ERROR 495
#define NGX_HTTPS_NO_CERT 496
return指令与error_page
我们经常用看到Nginx配置中有error_page。
error_page的意思实际上是 当收到某一个返回码的时候,可以重定向为另外一个uri,也可以指定给用户返回不一样的内容。
可以出现的范围http,server, location, if
常见案例:404页面,找不到该页面的时候,我们想返回给用户一些用户体验较好的页面,比如寻找走失儿童或者保护环境等。
rewrite指令
语法:
rewrite regex replacement [flag];
作用:
1. 匹配上正则表达式regex的url 替换成replacement(新的url ) ,flag 是表示行为。
2. 当replacement以http:// 或 https://或 $schema开头,则直接返回302重定向
3. 替换后的url根据flag指定的方式进行处理
flag 的选项:
--last:用replacement这个新的URI 重新在我们的location中进行匹配。
--break: break指令停止当前脚本指令的执行。
--redirect:返回302重定向
--permanent:返回301重定向
为了巩固一下 我们来看一个例子:
html下有3个目录, 并放入3个文件。内容分别是 test1 test2 test3。
cd html mkdir first second third
echo "test1" > html/first/1.txt
echo "test2" > html/second/2.txt
echo "test3" > html/third/3.txt
nginx.conf如下
server {
server_name rewrite.local.com;
rewrite_log on;
error_log logs/rewrite_error.log notice;
root html/;
location /first {
rewrite /first(.*) /second$1 last;
return 200 'first!\n';
}
location /second {
rewrite /second(.*) /third$1;
return 200 'second!\n';
}
location /third {
return 200 'third!\n';
}
}
此时 我们请求会返回什么呢?
curl return.local.com/first/3.txt
结果是
原因是因为
在匹配到/first的时候 被rewrite 成了second flag是last,就到上层去重新匹配了。
此时匹配到了第二个location /second,进来又被rewrite了,但是没有last,也没有break。于是继续执行return 200 'second!\n';
在第二个location里都已经return了。 第三个location就没有机会执行了。
那么我们再变化一下将第二个location变成以下
location /second {
rewrite /second(.*) /third$1 last;
return 200 'second!\n';
}
此时 我们请求会返回什么呢?
curl return.local.com/first/3.txt
结果是
这个想必大家都知道结果了。最后被匹配到第三个location里了。
那么我们再变化一下将第二个location变成以下 区别一下break和 last的区别
location /second {
rewrite /second(.*) /third$1 break;
return 200 'second!\n';
}
此时 我们请求会返回什么呢?
curl return.local.com/first/3.txt
结果是
这是因为在location /second里被rewrite后,flag为break 就不执行下面的return; 也不返回重新匹配localtion 而是停止了 直接请求third/3.txt了。
好了,今天就先到这里了,明天我们继续学习http请求处理的 find_config阶段。
猜你喜欢
- 2024-10-09 面试题 HTTP及web服务相关(nginx apache)
- 2024-10-09 Nginx实现认证登录(nginx登录验证)
- 2024-10-09 Nginx 是如何处理 HTTP 头部的?(女飞行员余旭遗体头部图)
- 2024-09-08 nginx 安装教程(详解)(nginx安装与配置详解)
- 2024-09-08 学习Nginx,跟着阿里大牛走,一套精心整理的Nginx(PDF文档)
- 2024-09-08 nginx实现内外网访问限制(nginx 内网)
- 2024-09-08 nginx的多域http、https同时访问配置及http重定向https
- 2024-09-08 nginx httpstatus 408 研究(404 not found nginx是什么意思)
- 2024-09-08 Nginx完全指南--内容解析(三)(nginx 详解)
- 2024-09-08 Nginx http 强转https(http://cas.tjgl.teacheredu.cn)
你 发表评论:
欢迎- 最近发表
-
- Win11学院:如何在Windows 11上使用WSL安装Ubuntu
- linux移植(Linux移植freemodbus)
- 独家解读:Win10预览版9879为何无法识别硬盘
- 基于Linux系统的本地Yum源搭建与配置(ISO方式、RPM方式)
- Docker镜像瘦身(docker 减小镜像大小)
- 在linux上安装ollama(linux安装locale)
- 渗透测试系统Kali推出Docker镜像(kali linux渗透测试技术详解pdf)
- Linux环境中部署Harbor私有镜像仓库
- linux之间传文件命令之Rsync傻瓜式教程
- 解决ollama在linux中安装或升级时,通过国内镜像缩短安装时长
- 标签列表
-
- 下划线是什么 (87)
- 精美网站 (58)
- qq登录界面 (90)
- nginx 命令 (82)
- nginx .http (73)
- nginx lua (70)
- nginx 重定向 (68)
- Nginx超时 (65)
- nginx 监控 (57)
- odbc (59)
- rar密码破解工具 (62)
- annotation (71)
- 红黑树 (57)
- 智力题 (62)
- php空间申请 (61)
- 按键精灵 注册码 (69)
- 软件测试报告 (59)
- ntcreatefile (64)
- 闪动文字 (56)
- guid (66)
- abap (63)
- mpeg 2 (65)
- column (63)
- dreamweaver教程 (57)
- excel行列转换 (56)
本文暂时没有评论,来添加一个吧(●'◡'●)