2012-02-23 85 views
2

我有一个单一的服务器一串子域:Apache - 我可以用Apache做一个代理服务器吗?

  • 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似乎忽略了这个指令。

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

我需要的是Apache检测到的所有子域中的新目录(例如/proxy),并重定向到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内容

我可以直接在阿帕奇+子模块(例如mod_rewrite的)这样做,或是否需要使用脚本语言如PHP这样做?

+0

查看[caniuse](http://caniuse.com/#search=cors)关于获取CORS在IE8中工作的文档的链接+ – Quentin 2012-02-23 12:17:58

+0

真正了解example.com的荣誉 – Quentin 2012-02-23 12:19:37

回答

1

在我们能够使使用的组合代理结束两个模块:mod_rewritemod_proxy

的语法是如下:

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

的[P]在最后说的是规则“充当代理”,并没有mod_proxy模块不能正常工作。如果没有它,Apache会做出“重定向”(页面顶部的网址更改),而不是“仅提供页面”。

2

您想要ProxyPass Directive

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

谢谢,您的回答让我接触正确的轨道!最后,我不得不将mod_proxy和mod_rewrite结合起来 - 我无法让ProxyPass像在那里写的那样工作。 – kikito 2012-02-24 10:35:58

0

Apache可以被配置为使用Apache:

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

<VirtualHost *:80> 
    ServerAdmin [email protected] 
    ServerName ci.testserver.com 
    ServerAlias ci 
    ProxyRequests Off 
    <Proxy *> 
      Order deny,allow 
      Allow from all 
     </Proxy> 
     ProxyPreserveHost on 
     ProxyPass/http://localhost:8080/ 
</VirtualHost> 
相关问题