一个类似 反代 的实现问题,详细情况戳

2015-10-05 14:33:15 +08:00
 aprikyblue
问题是这样,现在有
站点 x (受控制)、站点 a b c (不在我控制)

要求:

+ 访问站点 x 的 /a/* -> x 判断是否存在 /a/* -> 是则直接返回,否则回源 a 抓取 /* 并返回
+ 访问站点 x 的 /b/* -> x 判断是否存在 /b/* -> 是则直接返回,否则回源 b 抓取 /* 并返回
+ c 同理

( x 上的文件可能与源不同,并且回源抓取后 x 不保存文件)

仅仅以上简单的判断是否存在的话,用 nginx 的 rewrite/try_files 和 proxy_pass 实现了

-

现在要求“判断是否存在”这一步后更改为:
> 根据客户端的 cookie/session 进行判定(**可能进行数据库查询**)
->
如果符合条件,则根据 cookie/session 返回 x 上的不同版本
如果不符合条件,则回源抓取并返回

这样只用 nginx 配置不行了吧。。

-

试着用 rewrite + php 实现了一个,效果不佳(对 http 协议部分处理不如现成的 proxy 模块完善)

有没有办法 *判定要回源时* 再移交回 nginx 的 proxy 模块 处理?
或者 各位 V 友有什么好的实现方案?
(最好不要用 HTTP 重定向而是直接返回 200+内容,因为访问 x 的 client 也不在我控制,并且处理不太完善,可能不会处理重定向)
1413 次点击
所在节点    问与答
5 条回复
ryd994
2015-10-05 16:28:55 +08:00
反代放到 named location 里( location @xxx
location /a/ 设置 error_page 403 到反代 location , fastcgi_intercept_errors on
PHP 判断不符合条件就返回 403
你也可以使用其他 errorcode
msg7086
2015-10-06 02:01:04 +08:00
nginx 当然要用 lua 大法。
aprikyblue
2015-10-06 16:40:36 +08:00
@ryd994
试了下可以,但是用 error_page 的话好像会一直返回这个 error code ,而不会返回 proxy 源端的状态码。。


@msg7086 能用 lua ?没试过..
ryd994
2015-10-06 21:14:27 +08:00
@aprikyblue 那就使用其他数字, 4 开头 5 开头的都可以啊
msg7086
2015-10-06 21:19:03 +08:00
@aprikyblue openresty ,可以访问 cookie/session/数据库,你可以看看能不能满足你的要求。

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

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

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

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

© 2021 V2EX