Nginx学习笔记17rewrite之(四)last

1.1.1. last

last标志跟break标志的作用差不多,区别在于break标志处理之后,通常将不再匹配其它的location,即能够匹配rewrite目标地址的location中的proxy_pass等不会执行;last标志则会继续对rewrite的目标地址进行其它location的匹配,并执行其中的proxy_pass等动作。

Nginx配置文件:

location / {

root   html;

index  index.html;

}

location ~  ^/hello/ {

proxy_pass  http://tomcat101.coe2coe.me:8080;

proxy_set_header X-Real-IP  $remote_addr;

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

access_log logs/http_hello_access.log  my_access_log;

}

location ~ ^/app/ {

rewrite ^/app/(.*)$  /hello/$1  last;

}

location ~ ^/app2/ {

rewrite ^/app2/(.*)$  /app/$1  last;

}

(1)访问/app/。

运行结果:

使用curl -v  http://ng.coe2coe.me:8000/app/访问时,curl并未显示有任何的HTTP 301或HTTP 302的重定向操作,使用浏览器访问时,地址栏URL无任何变化。

http_error.log错误日志:

2017/07/09 20:07:35 [notice] 3817#0: *97 "^/app/(.*)$" matches "/app/", client: 192.168.197.101, server: ng.coe2coe.me, request: "GET /app/ HTTP/1.1", host: "ng.coe2coe.me:8000"

2017/07/09 20:07:35 [notice] 3817#0: *97 rewritten data: "/hello/", args: "", client: 192.168.197.101, server: ng.coe2coe.me, request: "GET /app/ HTTP/1.1", host: "ng.coe2coe.me:8000"

2017/07/09 20:07:35 [info] 3817#0: *97 client 192.168.197.101 closed keepalive connection

(2)访问/app2/。

运行结果:

curl -v  http://ng.coe2coe.me:8000/app2/,没有重定向操作,浏览器地址栏URL无任何变化。

http_access.log和http_hello_access.log访问日志:

$cat http_access.log

[[email protected]:/opt/nginx/logs]$cat http_hello_access.log

192.168.197.101,-,09/Jul/2017:20:16:50 +0800,GET /app2/ HTTP/1.1,200,3182,-,curl/7.35.0

访问日志中只有/hello/对应的location中定义的访问日志记录了本次对/app2/的访问。

http_error.log错误日志:

[[email protected]:/opt/nginx/logs]$cat http_error.log

2017/07/09 20:16:50 [notice] 3906#0: *106 "^/app2/(.*)$" matches "/app2/", client: 192.168.197.101, server: ng.coe2coe.me, request: "GET /app2/ HTTP/1.1", host: "ng.coe2coe.me:8000"

2017/07/09 20:16:50 [notice] 3906#0: *106 rewritten data: "/app/", args: "", client: 192.168.197.101, server: ng.coe2coe.me, request: "GET /app2/ HTTP/1.1", host: "ng.coe2coe.me:8000"

2017/07/09 20:16:50 [notice] 3906#0: *106 "^/app/(.*)$" matches "/app/", client: 192.168.197.101, server: ng.coe2coe.me, request: "GET /app2/ HTTP/1.1", host: "ng.coe2coe.me:8000"

2017/07/09 20:16:50 [notice] 3906#0: *106 rewritten data: "/hello/", args: "", client: 192.168.197.101, server: ng.coe2coe.me, request: "GET /app2/ HTTP/1.1", host: "ng.coe2coe.me:8000"

2017/07/09 20:16:50 [info] 3906#0: *106 client 192.168.197.101 closed keepalive connection

本文小结:

last标志和break标志有不同点,last不会阻止对rewrite目标地址进行其它location的匹配,而break通常会阻止对其它location的匹配。二者也有相同点,即二者都不会因为rewrite而产生http 301或http302的重定向操作,浏览器地址栏的URL不会产生变化。

这个相同点,也是last、break标志跟permanent、redirect标志的一个区别。

1.1.2. 补充说明

rewrite是ngx_http_rewrite_module模块的功能,完整介绍请参考官方网站相关页面:

http://nginx.org/en/docs/http/ngx_http_rewrite_module.html

时间: 2024-10-13 17:02:39

Nginx学习笔记17rewrite之(四)last的相关文章

马哥学习笔记二十四——分布式复制快设备drbd

DRBD: 主从 primary: 可执行读.写操作 secondary: 文件系统不能挂载 DRBD: dual primay, 双主(基于集群文件系统的高可用集群) 磁盘调度器:合并读请求,合并写请求: Procotol:drbd数据同步协议 A: Async, 异步  数据发送到本机tcp/ip协议栈 B:semi sync, 半同步  数据发送到对方tcp/ip协议 C:sync, 同步  数据到达对方存储设备 DRBD Source: DRBD资源 资源名称:可以是除了空白字符外的任意

义隆单片机学习笔记之(四) 编程及烧录

工具说明: 1.UIDE,编程环境 2.UWriter:烧录软件 下载地址: (见官网) 一 UIDE  1.1 创建工程: 1.2 选择型号: 1.3 编程及编译 二 UWriter 2.1 安装 (Serial number在购买烧录器的时候,从代理经销商处获得!) 2.2 选择目标芯片  2.3 配置选择 (注:由于是OTP,很多功能都是在配置的时候指定,所以这里非常重要.晶振.时钟的选择,延时程序要与之对应: 是否需要保护等,根据自己的需要而定) 编译之后生成的.map文件,详细的描述了

Android学习笔记(十四)——在运行时添加碎片(附源码)

在运行时添加碎片 点击获取源码 将UI分割为多个可配置的部分是碎片的优势之一,但其真正强大之处在于可在运行时动态地把它们添加到活动中. 1.使用上一篇创建的Fragments项目,在main.xml文件中注释掉两个<fragment>元素: 2.在FragmentActivity.java中添加下面的代码: FragmentManager fragmentManager = getSupportFragmentManager();//向活动添加碎片 FragmentTransaction fr

UI学习笔记---第十四天数据持久化

一.沙盒机制 每个应用程序位于文件系统的严格限制部分 每个应用程序只能在为该程序创建的文件系统中读取文件 每个应用程序在iOS系统内斗放在了统一的文件夹目录下 沙盘路径的位置 1. 通过Finder查找程序沙盘相对路径 ~/Library/Application Support/iPhone Simulator 2. 通过代码查找程序沙盘相对路径 NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory directory,NSSearc

【Unity 3D】学习笔记三十四:游戏元素——常用编辑器组件

常用编辑器组件 unity的特色之一就是编辑器可视化,很多常用的功能都可以在编辑器中完成.常用的编辑器可分为两种:原有组件和拓展组件.原有组件是编辑器原生的一些功能,拓展组件是编辑器智商通过脚本拓展的新功能. 摄像机 摄像机是unity最为核心组件之一,游戏界面中显示的一切内容都得需要摄像机来照射才能显示.摄像机组件的参数如下: clear flags:背景显示内容,默认的是skybox.前提是必须在render settings 中设置天空盒子材质. background:背景显示颜色,如果没

APUE学习笔记:第四章 文件和目录

4.1 引言 本章将描述文件的特征和文件的性质 4.2 stat.fstat和lstat函数 #include<sys/stat.h> int stat(const char *restrict pathname,struct stat *restrict buf); int fstat(int filedes,struct stat *buf) int lstat(const char *restrict pathname,struct stat *restrict buf); 三个函数的返

nginx学习笔记之基于端口的虚拟主机基于主机名的虚拟主机root、alias、index配置

nginx学习笔记之基于端口的虚拟主机基于主机名的虚拟主机root.alias.index配置 实验环境: centos 测试节点IP:172.16.3.101 基于端口的虚拟主机: vim /etc/nginx/nginx.conf # 向里面的http {}里面加入如下内容   server { # server定义一个虚拟主机         listen 8080; # 监听本机所有IP端口8080         server_name www.test.com; # 虚拟主机名为:w

汇编入门学习笔记 (十四)—— 直接定址表

疯狂的暑假学习之  汇编入门学习笔记 (十四)-- 直接定址表 参考: <汇编语言> 王爽 第16章 1. 描述单元长度的标号 普通的标号:a,b assume cs:code code segment a:db 1,2,3,4,5,6,7,8 b:dw 0 start: mov si,offset a mov di,offset b mov ah,0 mov cx,8 s: mov al,cs:[si] add cs:[di],ax inc si loop s mov ax,4c00h in

Android学习笔记二十四之ListView列表视图二

Android学习笔记二十四之ListView列表视图二 前面一篇我们介绍了常用的几种适配器的简单实现和ListView的简单使用,这一篇中,我们介绍一下ListView的优化和一些其它的问题. ListView优化方法一 在ListView中,我们最常用的就是自定义Adapter,在我们自定义Adapter中,需要实现两个比较重要的方法getCount()和getView(),前者是负责计算ListView的总Item数,后者是生成Item,有多少个Item就会调用getView()方法多少次