【问题标题】:Apache - Can I make a proxy server with just Apache?Apache - 我可以只用 Apache 制作代理服务器吗?
【发布时间】:2012-02-24 18:33:58
【问题描述】:

我在一个服务器上有一堆子域:

  • a.example.com
  • b.example.com
  • news.example.com

它们都在同一个 Apache 虚拟主机中。

我需要使用 a 和 b 子域内的新闻子域提供的提要。提要通常如下所示:

  • news.example.com/news/a
  • news.example.com/news/b

在 a 和 b 子域上,我使用 jquery's ajax function 从新闻源加载数据,并将其呈现在 a 和 b 上。由于same-origin policy,这最初不起作用。

我可以通过将 Access-Control-Allow-Origin "*" 添加到我的 Apache 配置文件来覆盖它。

... 但这仅适用于 Firefox、Chrome 和 Safari。 Internet Explorer 似乎忽略了该指令。

因此,我需要创建一个代理。

我需要的是我所有子域中的一个新目录(例如 /proxy),Apache 检测到该目录并重定向到 news.example.com,无论子域是什么。所以:

  • a.example.com/proxy/news/a -> 返回 news.example.com/news/a 的内容
  • b.example.com/proxy/news/b -> 返回 news.example.com/news/b 的内容

我可以直接在 Apache + 子模块中执行此操作(例如 mod_rewrite),还是需要使用 PHP 之类的脚本语言来执行此操作?

【问题讨论】:

  • 请参阅caniuse 获取有关使 CORS 在 IE8+ 中工作的文档的一些链接
  • 感谢您真正了解 example.com

标签: php apache mod-rewrite cross-domain xss


【解决方案1】:

你想要ProxyPass Directive

ProxyPass /proxy/news/a http://news.example.com/news/a

【讨论】:

  • 谢谢,您的回答让我走上了正轨!最后,我不得不将 mod_proxy 与 mod_rewrite 结合起来——我无法让 ProxyPass 像你在那里写的那样工作。
【解决方案2】:

最后,我们能够使用两个模块的组合来制作代理:mod_rewritemod_proxy

语法如下:

rewriteEngine on
rewriteRule proxy/(.+)$ http://news.example.com/$1 [P]

末尾的 [P] 告诉规则“充当代理”,没有 mod_proxy 将无法工作。没有它,apache 会进行“重定向”(页面顶部的 url 发生变化),而不是“仅提供页面”。

【讨论】:

    【解决方案3】:

    Apache 可以配置为使用 apache:

    考虑这个工作示例代码(代理部分):

    <VirtualHost *:80>
        ServerAdmin webmaster@localhost
        ServerName ci.testserver.com
        ServerAlias ci
        ProxyRequests Off
        <Proxy *>
                Order deny,allow
                Allow from all
            </Proxy>
            ProxyPreserveHost on
            ProxyPass / http://localhost:8080/
    </VirtualHost>
    

    【讨论】:

      猜你喜欢
      • 2015-11-23
      • 2011-03-08
      • 2011-01-20
      • 1970-01-01
      • 1970-01-01
      • 2013-12-07
      • 2011-01-01
      • 2013-04-08
      • 1970-01-01
      相关资源
      最近更新 更多