Nginx Rewrite学习笔记

相关指令有if、rewrite、set、return、break等,其中rewrite是最关键的指令。

1.if指令

语法: if(confition){...}

默认值:none

使用环境:server,location

该指令用于检查一个条件是否符合,如果条件符合,则执行大括号内的语句。if指令不支持嵌套,不支持多个条件&&和||处理。

以下信息可以被指定为条件

(1)变量名,错误的值包括:空字符串“”,或者任何以0开始的字符串

(2)变量比较可以使用“=”(表示等于)和“!=”(表示不等于)运算符

(3)正则表达式模式匹配可以使用“~*”和“~”符号

(4)“~”符号表示区分大小写字母的匹配

(5)“~*”符号表示不区分大小写字母的匹配(例如firefox和FireFox是匹配的)

(6)“!~”和“!~*”符号的作用刚好和“~”、“~*”相反,表示不匹配

(7)“-f”和“!-f”用来判断文件是否存在

(8)“-d”和“!-d”用来判断目录是否存在

(9)“-e”和“!-e”用来判断文件或目录是否存在

(10)“-x”和“!-x”用来判断文件是否可执行

部分正则表达式可以在圆括号“()”内,其值可以通过后面的变量$1至$9访问

2.rewrite指令

rewrite 指令

语法:rewrite regex replacement flag

默认值:none

使用环境:server,location,if

该指令根据表达式来重定向URI,或者修改字符串。指令根据配置文件中的顺序来执行。

注意重写表达式只对相对路径有效。如果你想配对主机名,应该使用if语句,代码如下:

if ($host ~* www\.(.*)){

set $host_without_www $1

rewrite ^(.*)$ http://$host_without_www$1 permanent; #$1 contains

‘/foo‘,not ‘www.mydomain.com/foo‘

}

如果替换串以http://开头,将会采用301或302跳转进行URL重定向。

rewrite指令的最后一项参数为flag标记,支持的flag标记有:

last-----相当于Apache里的[L]标记,表示完成rewrite

break----本条规则匹配完成后,中值匹配,不在匹配后面的规则

last:rewrite匹配后,会再次发起一个请求,只会对location里的规则再次匹配。

break:rewrite匹配后,不会发起请求,也不会匹配后面的规则。

redirect--返回302临时重定向,浏览器地址栏会显示跳转后的URL地址。

permanent-返回301永久重定向,浏览器地址栏会显示跳转后的URL地址

在以上标记中,last和break用来实现URI重写,浏览器地址栏的URL地址不变,但在服务器端

访问的路径发生了变化。redirect和permanent用来实现URL跳转,浏览器地址栏会显示跳转后的URL地址。

last和break标记的实现功能类似,但二者之间有细微查边,使用alias指令时必须用last标记,

使用proxy_pass指令时要使用break标记。last标记则在本条规则匹配完成后会对其所在的

server{...}标签重新发起请求,而break标记则在本条规则匹配完成后,终止匹配,不再匹配后面的规则。例如下面这段规则,必须使用break标记,使用last标记会导致死循环。

location /cms/ {

proxy_pass http://test.youdomain.com;

rewrite "^/cms/(.*)\.html$" /cms/index.html break;

}

3.set指令

set 指令

语法:set variable value

默认值:none

使用环境:server,location,if

该指令用于定义一个变量,并给变量赋值,变量的值可以为文本变量及变量文本的联合

set $varname ‘hello‘;

4.return指令

语法:return code

默认值:none

使用环境:server,location,if

该指令用于结束规则的执行并返回状态吗给客户端。状态码可以是:204,400,402-406,408,410,411,413,416及500~504。此外,非标准状态码444将以不发送任何Header头的方式结束连接。

示例,如果访问的URL以.sh和.bash结尾,则返回状态吗403

location ~ .*\.(sh|bash)?$

{

return 403;

}

5.break指令

语法:break

默认值:none

使用环境:server,location,if

该指令的作用是完成当前的规则集,不再处理rewrite指令。

示例:

if ($slow){

limit_rate 10k;

break;

}

时间: 2024-12-20 17:31:41

Nginx Rewrite学习笔记的相关文章

Nginx中 Rewrite学习笔记

路由重写是Web服务器中的一个很重要的基本功能.通过路由重写,可以结构化URL,更具语义化(对SEO有益).另外,分享出去的URL可能会因程序路由变动而导致URL失效,而路由的重写可以很好的解决这类问题. 适当的使用Rewrite功能,可以更我们带来很多的好处.Nginx中Rewrite的功能是基于perl语言兼容的正则表达式,所以在编译安装nginx之前,需要安装PREC库.Nginx中Rewrite功能实现是基于ngx_http_rewrite_module,所以确保安装了此模块. Rewr

Nginx的学习笔记

为什么使用Nginx: 性能比较好: 第三方模块扩展较多:(开源协议较为宽松) 高可靠性:主控进程和工作进程,一个工作进程出错主进程可以快速另开一个: 低内存消耗:一万个keep-alive连接在Nginx仅消耗2.5MB,支持较高的连接数: 支持热部署:不用停止服务就能版本更新,更新配置文件,更换日志文件,(源于master和worker分开设计) 基本功能: 支持静态的web服务器:能缓存打开的文件 描述符, http smtp pop3协议的反向代理服务器,缓存,负载均衡: 支持FastC

Nginx+Lua学习笔记-环境搭建

使用的OpenResty 具体教程可以参考:http://jinnianshilongnian.iteye.com/blog/2186270 这里只记录下我自己的环境搭建过程 系统使用的是ubuntu-14.04.1-server-amd64.iso 所有操作都使用了sudo提权... 首先参考http://blog.chinaunix.net/uid-8721861-id-2017178.html解决apt-get install时Media change: please insert the

马哥学习笔记二十八——nginx反向代理,负载均衡,缓存,URL重写及读写分离

Nginx反向代理 Nginx通过proxy模块实现反向代理功能.在作为web反向代理服务器时,nginx负责接收客户请求,并能够根据URI.客户端参数或其它的处理逻辑将用户请求调度至上游服务器上(upstream server).nginx在实现反向代理功能时的最重要指令为proxy_pass,它能够将location定义的某URI代理至指定的上游服务器(组)上.如下面的示例中,location的/uri将被替换为上游服务器上的/newuri. location /uri { proxy_pa

一起学ASP.NET Core 2.0学习笔记(一): CentOS下 .net core2 sdk nginx、supervisor、mysql环境搭建

作为.neter,看到.net core 2.0的正式发布,心里是有点小激动的,迫不及待的体验了一把,发现速度确实是快了很多,其中也遇到一些小问题,所以整理了一些学习笔记: 阅读目录 环境说明 安装CentOS7 安装.NET Core SDK for CentOS7 搭建ftp服务器 安装mysql 部署ASP.NET Core应用程序 配置Nginx 配置守护服务(Supervisor) 环境说明 服务器系统:CentOS 7.3 64位 相关工具:putty.Xftp 服务器软件软件:.n

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

nginx docker镜像学习笔记

最近在看nignx,在本地虚拟机使用docker nginx镜像搭建了nginx+php环境 学习笔记如下: 拉取nginx镜像docker pull nginx 创建一个容器,并挂载本地目录docker run --name some-nginx -v /some/content:/usr/share/nginx/html:ro -d nginx挂载的路径权限为只读(:ro),默认权限是读写. 指定端口docker run --name some-nginx -d -p 8080:80 som

V-rep学习笔记:Reflexxes Motion Library 2

VREP中的simRMLMoveToPosition函数可以将静态物体按照设定的运动规律移动到指定的目标位置/姿态.If your object is dynamically enabled, it will not work (since in that case the position of the object is dictated by the physics engine). In that case, make sure to uncheck the Body is dynami

[原创] linux课堂-学习笔记-目录及概况

本学习笔记基于:网易云课堂-linux课堂 课时1Centos 6.4安装讲解46:14 课时2Centos 6.4桌面环境介绍与网络连接04:30 课时3 Linux目录结构介绍及内核与shell分析37:19 课时4 Linux获得帮助_网络配置_合理关机64:23 课时5 Linux文件权限详解45:47 课时6Linux文件权限详解45:47 课时7目录显示个性操作与全局环境变量的使用与注意···43:25 课时8复制与远程复制_文件查找实例_文件内容查看的··57:49 课时9Linu