[转帖]Nginx rewrite 规则 与 proxy_pass 实现 Nginx rewrite 规则 与 proxy_pass 实现

Nginx rewrite 规则 与 proxy_pass 实现

 
https://www.cnblogs.com/jicki/p/5546916.html

Nginx rewrite 规则  与 proxy_pass 实现

 
 
------------------------------------------------------------------------------------------------------
~         大小写敏感匹配
~*        大小写不敏感匹配
!~        大小写敏感不匹配
!~*       大小写不敏感不匹配
------------------------------------------------------------------------------------------------------
 
 
------------------------------------------------------------------------------------------------------
-f        检测文件存在
-d        检测目录存在
-e        检测文件,目录或者符号链接存在
-x        检测文件可执行
------------------------------------------------------------------------------------------------------
 
 
------------------------------------------------------------------------------------------------------
break     –  停止rewrite检测,也就是说当含有break flag的rewrite语句被执行时,该语句就是rewrite的最终结果。
last      –  停止rewrite检测,但是跟break有本质的不同,last的语句不一定是最终结果。
redirect  –  返回302临时重定向,一般用于重定向到完整的URL(包含http:部分)
permanent –  返回301永久重定向,一般用于重定向到完整的URL(包含http:部分)
------------------------------------------------------------------------------------------------------
 
 
一些实际例子
 
 
 
if($http_host = www.qq.com)                  
{
 rewrite (.*) http://www.baidu.com$1 permanent;
 }
 

// 如果请求的url是 www.qq.com  则永久重定向到 www.baidu.com

 
 
 
 
 
 
rewrite ^/([0-9]+).html$ /user/id=$1 last;
 
 

// 如果 www.qq.com/user/id=123456   则显示为 www.qq.com/123456.html

 
 
 
 
 
 location ^~ /qq/
 {
    proxy_pass http://www.qq.com/;
 }
 

//如果请求目录为 /qq/  则代理到 www.qq.com     如果www.qq.com/qq/  则代理到 www.qq.com

 
 
 
 
location ~ ^/data
{
 deny all;
}
 

// 禁止 data 目录下所有文件的请求

 
 
 
 
 
 
if (!-f $request_filename)
{
 break;
 proxy_pass  http://www.qq.com;
}
 

// 如果请求的文件名不存在 则代理到 www.qq.com

 
 
 
 
 
 
if (-d $request_filename)
{
rewrite ^/(.*)([^/])$ http://$host/$1$2/ permanent;
}
 

// 如果请求的目录存在  则自动增加 / 符号  

禁止访问 /svn/ git  cvs 这几个目录...防止 svn 文件下载··源码泄漏

  location ~ .*\.(svn|git|cvs)

  {

   deny all;

  }

Nginx rewrite 规则  与 proxy_pass 实现

 
 
------------------------------------------------------------------------------------------------------
~         大小写敏感匹配
~*        大小写不敏感匹配
!~        大小写敏感不匹配
!~*       大小写不敏感不匹配
------------------------------------------------------------------------------------------------------
 
 
------------------------------------------------------------------------------------------------------
-f        检测文件存在
-d        检测目录存在
-e        检测文件,目录或者符号链接存在
-x        检测文件可执行
------------------------------------------------------------------------------------------------------
 
 
------------------------------------------------------------------------------------------------------
break     –  停止rewrite检测,也就是说当含有break flag的rewrite语句被执行时,该语句就是rewrite的最终结果。
last      –  停止rewrite检测,但是跟break有本质的不同,last的语句不一定是最终结果。
redirect  –  返回302临时重定向,一般用于重定向到完整的URL(包含http:部分)
permanent –  返回301永久重定向,一般用于重定向到完整的URL(包含http:部分)
------------------------------------------------------------------------------------------------------
 
 
一些实际例子
 
 
 
if($http_host = www.qq.com)                  
{
 rewrite (.*) http://www.baidu.com$1 permanent;
 }
 

// 如果请求的url是 www.qq.com  则永久重定向到 www.baidu.com

 
 
 
 
 
 
rewrite ^/([0-9]+).html$ /user/id=$1 last;
 
 

// 如果 www.qq.com/user/id=123456   则显示为 www.qq.com/123456.html

 
 
 
 
 
 location ^~ /qq/
 {
    proxy_pass http://www.qq.com/;
 }
 

//如果请求目录为 /qq/  则代理到 www.qq.com     如果www.qq.com/qq/  则代理到 www.qq.com

 
 
 
 
location ~ ^/data
{
 deny all;
}
 

// 禁止 data 目录下所有文件的请求

 
 
 
 
 
 
if (!-f $request_filename)
{
 break;
 proxy_pass  http://www.qq.com;
}
 

// 如果请求的文件名不存在 则代理到 www.qq.com

 
 
 
 
 
 
if (-d $request_filename)
{
rewrite ^/(.*)([^/])$ http://$host/$1$2/ permanent;
}
 

// 如果请求的目录存在  则自动增加 / 符号  

禁止访问 /svn/ git  cvs 这几个目录...防止 svn 文件下载··源码泄漏

  location ~ .*\.(svn|git|cvs)

  {

   deny all;

  }

猜你喜欢

转载自www.cnblogs.com/jinanxiaolaohu/p/11684986.html