代理每个网站请求并返回结果

时间:2011-08-08 03:00:30

标签: ruby-on-rails ruby ruby-on-rails-3 facebook

我想创建控制器以实现下图中显示的行为:

enter image description here

如果有可能,有人可以提供一个例子吗?

编辑:只想使用Facebook SDK从站点A到Facebook(站点C)通过站点B代理所有发布请求。

如果有用,请找到此代码:

def default
    result = Net::HTTP.get_response(
        "realserver.internal.net",
        @request.env["REQUEST_URI"]
        )
    #render error if result. ...
    render_text result.body
    end
end

2 个答案:

答案 0 :(得分:1)

看起来你根本就不需要铁轨。你想要的是一个反向代理(这里有很多选择)。我建议nginx

答案 1 :(得分:0)

看起来您正试图隐藏请求的位置,或者绕过浏览器的csrf保护。如果是前者,您可能希望限制可以从站点C请求的URL,因为您可能会通过Internet公开所有站点C的Intranet页面。如果是后者,您考虑过JSONP还是CORS?这对用户来说会更快,并且通过站点B的流量也会减少。

请注意,根据您在图表中绘制的方法,您将网站C的内容视为属于网站B,并且需要考虑所有安全和法律问题。

如果你仍然想按照你所描述的方式去做,如果你可以保持相同的路径,在站点B和站点C之间查询字符串和片段ID,那么上面的例子就可行了。

另外,不要参考@request,请使用请求。 request.fullpath可以代替@ request.env [“REQUEST_URI”]

编辑:此外,aVenger是对的,反向代理也可以。优点:更快,更少的代码。缺点:无法以编程方式确定是否接受请求,向请求添加动态变量等。对于您的Facebook事情,它可能会起作用。