V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
NGINX
NGINX Trac
3rd Party Modules
Security Advisories
CHANGES
OpenResty
ngx_lua
Tengine
在线学习资源
NGINX 开发从入门到精通
NGINX Modules
ngx_echo
imydou
V2EX  ›  NGINX

nginx 反向代理 修改重定向地址的方法?

  •  
  •   imydou · 2016-01-10 14:02:32 +08:00 · 6198 次点击
    这是一个创建于 3259 天前的主题,其中的信息可能已经有所发展或是发生改变。

    用百度举例:

    反向代理 用 www.abc.com 反代 www.baidu.com
    用户访问 www.abc.com
    www.baidu.com 返回重定向 www.baidu2.com
    结果用户浏览器重定向到 www.baidu2.com
    反代如何修改 www.baidu.com 返回的重定向地址?

    第 1 条附言  ·  2016-01-10 17:03:00 +08:00

    描述下使用场景:
    手头有一百多个网站,域名都未备案,想从香港主机转回国内。

    假设我有一个在阿里云备案的域名 xxx.com ,
    那么我把所有网站迁移到阿里云杭州机房,所有网站通过我的已备案域名访问,举个例子,客户网站域名是 abcaaa.com ,那么就绑定 abcaaa.com.hz.xxx.com 。

    另在海外开一个 vps 做反向代理。
    用户访问 abcaaa.com ,反代通过 abcaaa.com.hz.xxx.com 从国内取数据,再返回用户。

    下面是反代的配置,其实本帖的问题刚解决好,正则很烂,

    server {
    listen 80;
    server_name $host;
    location / {
    proxy_pass http://8.8.8.8:80;
    proxy_set_header Host $host.hz.xxx.com;
    sub_filter '.hz.acfuck.com' '';
    sub_filter_once off;
    proxy_redirect ~^http://(.+).hz.xxx.com(.+)$ http://$1$2;
    #proxy_redirect 通过这个重写了重定向
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_connect_timeout 60;
    proxy_read_timeout 600;
    proxy_send_timeout 600;
    }
    }

    5 条回复    2016-01-11 20:50:19 +08:00
    TheCure
        1
    TheCure  
       2016-01-10 16:25:54 +08:00 via iPhone
    修改 location
    TheCure
        2
    TheCure  
       2016-01-10 16:28:27 +08:00 via iPhone
    rewrite host 来修改返回的 http 请求的 location
    Slienc7
        3
    Slienc7  
       2016-01-10 16:31:28 +08:00
    subs_filter
    uyear
        4
    uyear  
       2016-01-11 10:33:12 +08:00
    这里面有两个问题:
    首先,正常访问 baidu 的时候会不会跳到 baidu2 ,如果不跳,那就是被区别对待了,区别对待是有原因的,无非就那几个变量:来路, host ,端口 ,打开 debug 日志可以看到请求方式,修改那几个传过去的 header ,改成跟你正常的看他还跳不跳。这个是基于 header 的

    第二个问题,有可能是 js 干的,@xgowex 的替换可以改变响应体,包括 js
    imydou
        5
    imydou  
    OP
       2016-01-11 20:50:19 +08:00
    @uyear header 必须要传假 url ,真 url 未备案,会被拦截。程序获取到假 url ,做重定向,需要 nginx 把假 url 替换成实际 url 。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   879 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 20:37 · PVG 04:37 · LAX 12:37 · JFK 15:37
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.