nginx rewrite配置
Rewrite压缩功能依赖于ngx_http_upstream_module
模块,是nginx提供重定向服务的重要功能之一。
if指令
if (condition) {...}
- 如果变量的值为空字符串或以0开头的任意字符串,if指令认为条件为false,其他情况认为true
- 使用
=
和!=
来比较变量和字符串是否相等,这里的字符串不需要加引号。
if ($request_method = POST) {
return 405;
}
- 正则表达式之间使用
~
,~*
,!~
,!~*
连接 ~
:对大小写敏感~*
:对大小写不敏感!~
和!~*
:匹配失败时,认为是true- 在正则表达式中,可以使用小括号对变量进行截取,在花括号中使用$1 $2引用截取的值。
if ($http_cookie ~* "id=([^;]+)(?:;|$)") {
# 这里有了$1和$2两个变量
}
- 判断请求的文件是否存在,可以使用
-f
和!-f
来判断 - 判断请求的目录是否存在,可以用
-d
和!-d
来判断。当使用!-d
时,如果请求的目录不存在,但是该目录的上级目录存在,if指令认为条件为true,如果该目录和上级目录都不存在,则为flase,如果目录存在,也为false。 - 判断请求的文件或目录是否存在使用
-e
和!-e
判断,用法见-f
break指令
- 用于中断当前作用域中其他nginx的配置。
- return直接向客户端返回响应状态码
rewrite指令
rewrite regex replacement [flag]
- 其中
flag
的取值为last,break,redirect,permanent
的其中一个。 last
:终止继续在本location块中处理接收到的URLI,并将此重写的URI作为一个新的URI,使用各location块进行处理。break
:将此处重写的URI作为一个新的URI,在本块中继续进行处理。该标志将重写后的地址在当前的location块中执行,不会将新的URI转向其他的location块。redirect
:将重写的URI返回给客户端,状态代码为302。permanent
:将重写后的URI返回给客户端,状态代码为301。
rewrite域名跳转
server {
# 域名跳转
listen 80;
server_name jump.myweb.name;
rewrite ^/ http://www.myweb.info/;
}
server {
# 多域名跳转
listen 80;
server_name jump.myweb.name jump.myweb.info;
if ($host ~ myweb\.info) {
rewrite ^(.*) http://jump.myweb.name$1 permanent;
}
}
server {
#三级域名跳转
listen 80;
server_name jump1.myweb.name jump2.myweb.name;
if ($http_host ~* ^(.*)\.myweb\.name$) {
rewrite ^(.*) http://jump.myweb.name$1;
break;
}
}
域名镜像
server {
listen 80;
server_name mirror1.myweb.name;
rewrite ^(.*) http://jump1.myweb.name$1 last;
}
server {
listen 81;
server_name mirror2.myweb.name;
rewrite ^(.*) http://jump2.myweb.name$1 last;
}
防盗链
server {
listen 80;
server_name www.myweb.name;
location ~* ^.+\.(gif|jpg|png|swf|flv|rar|zip)$ {
valid_referers none blocked server_name *.myweb.name;
if ($invalid_referer) {
rewrite ^/ http://www.myweb.com/images/forbidden.png;
# return 403
}
}
}
server {
listen 80;
server_name www.myweb.name;
location /file/ {
root /server/file/;
valid_referers none blocked server_names *. myweb.name;
if ($invalid_referer) {
rewrite ^/ http://www.myweb.com/images/forbidden.png;
# return 403
}
}
}