注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

itoedr的it学苑

记录从IT文盲学到专家的历程

 
 
 

日志

 
 

proxy_redirect的理解与使用方法  

2014-09-19 06:54:55|  分类: nginx编程 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |


proxy_redirect
语法:proxy_redirect [ default|off|redirect replacement ] 
默认值:proxy_redirect default 
使用字段:http, server, location 
      如果需要修改从被代理服务器传来的应答头中的"Location"和"Refresh"字段,可以用这个指令设置。
假设被代理服务器返回Location字段为: http://localhost:8000/two/some/uri/
这个指令:
proxy_redirect http://localhost:8000/two/ http://frontend/one/;
将Location字段重写为http://frontend/one/some/uri/。
在代替的字段中可以不写服务器名:
proxy_redirect http://localhost:8000/two/ /;
这样就使用服务器的基本名称和端口,即使它来自非80端口。
如果使用“default”参数,将根据location和proxy_pass参数的设置来决定。
例如下列两个配置等效:
location /one/ {
proxy_pass http://upstream:port/two/;
proxy_redirect default;
}
location /one/ {
proxy_pass http://upstream:port/two/;
proxy_redirect http://upstream:port/two/ /one/;
}
在指令中可以使用一些变量:
proxy_redirect   http://localhost:8000/    http://$host:$server_port/;
这个指令有时可以重复:
proxy_redirect   default;
proxy_redirect http://localhost:8000/ /;
proxy_redirect http://www.example.com/ /;
参数off将在这个字段中禁止所有的proxy_redirect指令:
proxy_redirect   off;
proxy_redirect default;
proxy_redirect http://localhost:8000/ /;
proxy_redirect http://www.example.com/ /;
利用这个指令可以为被代理服务器发出的相对重定向增加主机名:
proxy_redirect   /   /;

*****************
另一则例子
*****************
客户关发起了访问请求:“http://mtpc.sohu.com/yum/Server”

proxy_redirect如下配置:
 location ^~ /yum

{

            proxy_pass http://192.168.1.1/;

            proxy_redirect http://mtpc.sohu.com/ /yum/; 

           #表示告诉客户端这个回复报文来源于http://mtpc.sohu.com/yum/Server/,与原来请求报文对应.

}

#即:就会301到http://mtpc.sohu.com/yum/Server/

#增加了/

**********************

应用理解之二

**********************

NGINX中proxy_redirect功能 作用在于发送给客户端的URL(包头元素如Location)进行修改。以例子说明:

   server
 {        listen       80;        server_name  test.abc.com;        location /
{             proxy_pass http://10.10.10.1:9080;         } }

          这段配置一般情况下都正常,但偶尔会出错, 错误在什么地方呢? 抓包发现服务器给客户端的跳转指令(proxy_pass)里加了端口号,如 Location: http://test.abc.com:9080/abc.html 。因为nginx服务器侦听的是80端口,所以这样的URL给了客户端,必然会出 错.针对这种情况, 加一条proxy_redirect指令: proxy_redirect http://test.abc.com:9080/ / ,把所有“http://test.abc.com:9080/”的内容替换成“/”再发给客户端,才合理,因为此处nginx充当的是中转交换站的翻译官的作用。客户端本来请求的是80口上的内容,只不过nginx从9080口取来报文处理后再以80口身份回复客户端才复合要求。

   server {
       listen       80;
       server_name  test.abc.com;
       proxy_redirect http://test.abc.com:9080/ /;  #此处“/”代表的是"http:// test.abc.com:80/"根.
       location / {
            proxy_pass http://10.10.10.1:9080;
       }
   }
         注:经指令" proxy_redirect http://test.abc.com:9080/   /;"处理,由9080回复的报文(此时源域地址是"http://test.abc.com:9080/").处理改写后,对应为"/"对应的内容是:http:// test.abc.com:80,是客户端报文的目标域地址。

  评论这张
 
阅读(369)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017