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的ajax函数从新闻源加载数据,并将其呈现在a和b上。 由于同源政策 ,这最初不起作用。

我可以通过添加Access-Control-Allow-Origin "*"来覆盖我的Apacheconfiguration文件。

…但这只适用于Firefox,Chrome和Safari。 Internet Explorer似乎忽略了这个指令。

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

我需要的是Apache检测到的所有子域中的新目录(例如/proxy ),并redirect到news.example.com,而不pipe子域是什么。 所以:

  • 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这样的脚本语言来执行此操作?

您需要ProxyPass指令 。

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

最后,我们可以使用两个模块的组合来创建代理: mod_rewritemod_proxy

语法如下:

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

最后的[P]告诉规则“充当代理”,没有mod_proxy就无法工作。 没有它,Apache会使“重定向”(页面顶部的URL变化)而不是“只是提供页面”。

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>