自己开发反向代理,如何实现同时代理多个后端的网站

2014-11-14 17:19:35 +08:00
 restran
前提:
反向代理的网站地址为proxy.com,后端有多个网站,如a.comb.com

目标:
我想通过proxy.com来访问后端的这些网站。比如proxy.com/a/来访问a.com,方法不限。

约束:
后端的这些网站页面中的链接都是使用相对地址,例如/static/img.png

那么问题就是,遇到页面中这样的相对地址,我要如何才能区分出访问的是哪个后端网站。


现在想到几个方法:
1. 通过设置cookie
在cookie中设置访问的是哪个网站,但是缺点是,直接将url复制给其他人,其他人是访问不了的,因为要先确认访问的是哪个网站,然后设置相应的cookie。可以通过访问另外一个网站,然后跳转过来,这样来实现。

2. 二级域名
在proxy.com上使用二级域名来区分,比如a.proxy.com来确定a.com

3. 重写页面中的链接地址
在代理上重写页面中的相对地址,例如把 /static/img.png 改成 /a/static/img.png

那么,有没有更好的方法?
5465 次点击
所在节点    问与答
26 条回复
chinvo
2014-11-15 13:07:24 +08:00
@restran 嘗試下 nginx ngx_lua 呢?
msg7086
2014-11-15 15:01:21 +08:00
@restran 通过referer中的目录地址来确定来源站点,然后根据referer来rewrite sub path
restran
2014-11-15 23:04:17 +08:00
@msg7086 这个方法可行,我的方法一,也是类似的方法,但是会不会导致页面中所有静态文件链接都要重定向,影响性能?
restran
2014-11-15 23:11:23 +08:00
@chinvo 是用lua写自定义的转发规则吧,但是最好能在URL上就能直接体现出是访问后端哪个站,这样把URL复制给别人,别人照样能访问。
sisiww
2016-03-11 14:13:56 +08:00
如何实现一个域名很多对应(二级域名)同时代理多个后端的网站(后端网站很多,域名又是不定的)
如访问前端二级域名 1.abc.com 对应后端反代的网站是 www.1.com
访问 2.abc.com 对应后端反代的网站是 www.2.com 访问*.abc.com 对应后端反代的网站是 www.*.com
这种情况下如何配置.conf 文件
restran
2016-03-13 12:10:28 +08:00
@sisiww 根据 Headers 中的 Host 可以知道请求的域名是多少,然后再根据自己的规则来映射。这个需求应该可以直接在 Nginx 中反代就能完成。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/146552

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX