【问题标题】:I would like a proxy server that "forwards" to two development servers我想要一个“转发”到两个开发服务器的代理服务器
【发布时间】:2011-03-28 23:42:56
【问题描述】:

总结:

所有开发都在我的本地机器上。我的机器上运行着两台开发服务器。我想像使用这些开发服务器一样使用它们。最简单的方法是什么?

详情

我有两个开发服务器。一台服务器是Sproutcore 开发服务器(保存应用程序、css、图像等)。另一台服务器是App Engine 开发服务器(保存数据)。应用引擎服务器的访问方式是有限的。这两个开发服务器都在我机器上的不同端口上运行。

假设我有一个名为 X 的正则表达式,它指定可用于访问应用引擎服务器的所有 url 路径。

我想要一个代理服务器,它将所有匹配 X 的 http 请求路径转发到 App Engine 服务器,并将所有不匹配的路径转发到 Sproutcore 服务器。

例子:

如果我的代理服务器是 localhost:8080

而我的应用引擎服务器是 localhost:8081

我的sproutcore服务器是localhost:8082

我有一个匹配“/dogs/_the_dogs_id”的正则表达式(其中_the_dogs_id 是一个整数)

如果我提出 localhost:8080/js/application.js 的请求,我希望它会转到 sproutcore 服务器(因为它确实 匹配常规表达式)

如果我发出 localhost:8080/dogs/7 的请求,我希望它会转到应用引擎服务器(因为它确实匹配正则表达式)

就我的(客户端)请求而言,我只向 localhost:8080 询问所有这些资源。代理服务器默默地将它们转发到正确的目的地。保留请求类型、数据、headers等,我只需要它根据url请求路径转发即可。

有没有简单的方法来设置这样的代理服务器?它对 Web 开发非常有用。

谢谢

【问题讨论】:

  • 这不是编程问题;这是一个网络服务器配置问题。投票转至webmasters
  • 我很好奇 - 一旦部署了这个应用程序,您打算如何运行它?
  • 为什么不将 Sproutcore 部分移动到 App Engine http 服务器提供的静态文件夹下?
  • 在生产中,Sproutcore 派生文件将由 App Engine 作为静态文件提供。此代理配置仅在使用开发服务器时才有用。开发服务器不会对静态文件进行完整的“编译”,它(似乎)只是为我编写的原始 javascript 提供服务。也就是说,它逐字提供文件(每次检查更改),它不会将它们“捆绑”成一个大文件。

标签: google-app-engine networking proxy sproutcore


【解决方案1】:

mod_rewriteFTW

http://httpd.apache.org/docs/current/mod/mod_rewrite.html

此模块使用基于规则的 重写引擎(基于 正则表达式解析器)重写 即时请求网址

您定义一个与 URL 匹配的正则表达式,然后将其重新写入您希望将请求重定向到的位置。

另外,澄清一下,您所描述的机制称为“反向代理”:http://en.wikipedia.org/wiki/Reverse_proxy

-tjw

【讨论】:

  • 谢谢。是的,我很确定我没有正确使用“代理”这个词。 :) 我确信 Apache 的想法会奏效,但我完全不熟悉它。设置 Apache 似乎是一项艰巨的任务。谢谢你的想法。
  • 设置apache其实非常简单。
【解决方案2】:

实际上,经过进一步调查,事实证明,Sproutcore 带有内置功能来执行此操作。他们如何提前考虑这些想法真的令人印象深刻。将代理添加到特定路由就像在“# SET UP PROXY”注释下方添加以下行一样简单(在您的构建文件中)

# ===========================================================================
# Project: Todos
# ===========================================================================

# Add initial buildfile information here
config :all, :required => :sproutcore

# SET UP PROXY
proxy "/task", :to => "localhost:8000"
proxy "/tasks", :to => "localhost:8000"

真的再简单不过了。我也非常喜欢这个,因为它是一种便携式解决方案。这与需要其他依赖的解决方案(例如 Apache)形成鲜明对比。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-09
    相关资源
    最近更新 更多