nginx rewrite指令、if指令和301重定向介绍说明 – 21运维
通知: .-...

nginx rewrite指令、if指令和301重定向介绍说明

nginx 21运维 821浏览 0评论

一,nginx正则简单说明以及常用内置变量说明。
1,正则表达式匹配中的文件或目录判断
至于location的正则表达式判断,这里不记录,详细可以查看《nginx location块配置规则、匹配执行顺序、防盗链、缓存过期时间、alias别名设置以及文件禁止下载等总结》,这里只是记录下正则判断用到 的一些文件或目录判断,实际生产环境中我们经常会用到的。

-f 和!-f 用来判断是否存在文件
-d 和!-d 用来判断是否存在目录
-e 和!-e 用来判断是否存在文件或目录  q -x 和!-x 用来判断文件是否可执行

2,nginx内置变量
在 Nginx 配置文件中,有很多内置变量,这些变量经常和 if 指令一起使用。常见的内置变量有如下几种:
$args,此变量与请求行中的参数相等
$document_root,此变量等同于当前请求的 root 指令指定的值
$uri,此变量等同于当前 request 中的 URI
$document_uri,此变量与$uri 含义一样。
$host,此变量与请求头部中“Host”行指定的值一致。
$limit_rate,此变量用来设置限制连接的速率。
$request_method,此变量等同于 request 的 method,通常是“GET”或“POST”。
$remote_addr,此变量表示客户端 IP 地址。
$remote_port,此变量表示客户端端口。
$remote_user,此变量等同于用户名,由 ngx_http_auth_basic_module 认证。
$request_filename,此变量表示当前请求的文件的路径名,由 root 或 alias 和 URI request 组合而成。
$request_uri,此变量表示含有参数的完整的初始 URI。
$query_string,此变量与$args 含义一致。
$server_name,此变量表示请求到达的服务器名。
$server_port,此变量表示请求到达的服务器的端口号。
二 ,rewrite指令用法以及301、302

Nginx通过 ngx_http_rewrite_module模块支持 url重写、支持 if 条件判断,但要使用rewrite功能,需要 PCRE 支持,应在编译 nginx 时指定pcre。rewrite 的使用语法如下:
语法:rewrite regex flag
默认值:none
使用字段:server, location, if
在默认情况下,rewrite 指令默认值为空,可在 nginx 配置文件的 server、location、if 部分使用,rewrite 指令的最后一项参数为 flag 标记,其支持的 flag 标记主要有以下几种:
last, 相当于Apache里的[L]标记,表示完成rewrite之后搜索相应的URI或location。
break,表示终止匹配, 不再匹配后面的规则。
redirect,将返回 302 临时重定向,在浏览器地址栏会显示跳转后的 URL 地址。
permanent,将返回 301 永久重定向,在浏览器地址栏会显示跳转后的 URL 地址。
其中,last 和 break 用来实现 URL 重写,浏览器地址栏中的 URL 地址不变。

用法1,URL根据指定重写:

location ~ ^/best/ {        
   rewrite ^/best/(.*)$ /test/$1  break;     
   proxy_pass  http://www.21yunwei.com; 
 } 

在这个例子中,使用了break标记,可实现将请求为http://proxy.21yunwei.com/best/webinfo.html 的页面重定向到http://www.21yunwei.com/test/webinfo.html 页面而不引起浏览器地址栏中 URL的变化。

用法2,301举例:

server {
               listen       80;
               server_name  proxy.21yunwei.com;
	       rewrite  ^/(.*)$  http://www.21yunwei.com/$1  permanent;

三,if指令用法

语法:if (condition) { „ } 默认值:none
使用字段:server, location
说明:这个if()指令常结合nginx内置变量做一些判断操作。
用法1,if判断文件是否存在

location  ^~ /image  {
	alias   /wwwroot/proxy/pic ;
	if ( !-f $request_filename) {
		return  204;
	}
}

如果请求的文件判断不存在,那么返回204代码,测试效果:

[[email protected]_web03 /]# curl  -I  http://proxy.21yunwei.com/image/2.jpg
HTTP/1.1 204 No Content
Server: nginx/1.12.0
Date: Thu, 16 Nov 2015 08:36:01 GMT
Connection: keep-alive

用法2,域名跳转

  if ($host != 'www.21yunwei.com' ) {
    rewrite ^/(.*)$ http://www.21yunwei.com/$1 permanent;
    }  

作用:针对指定域名或者所有域名做域名判断并跳转。

转载请注明:21运维 » nginx rewrite指令、if指令和301重定向介绍说明

发表我的评论
取消评论
表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址