Apache - 我可以用Apache做一个代理服务器吗?
我有一个单一的服务器一串子域: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这样做?
在我们能够使使用的组合代理结束两个模块:mod_rewrite
和mod_proxy
。
的语法是如下:
rewriteEngine on
rewriteRule proxy/(.+)$ http://news.example.com/$1 [P]
的[P]在最后说的是规则“充当代理”,并没有mod_proxy模块不能正常工作。如果没有它,Apache会做出“重定向”(页面顶部的网址更改),而不是“仅提供页面”。
ProxyPass /proxy/news/a http://news.example.com/news/a
谢谢,您的回答让我接触正确的轨道!最后,我不得不将mod_proxy和mod_rewrite结合起来 - 我无法让ProxyPass像在那里写的那样工作。 – kikito 2012-02-24 10:35:58
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>
查看[caniuse](http://caniuse.com/#search=cors)关于获取CORS在IE8中工作的文档的链接+ – Quentin 2012-02-23 12:17:58
真正了解example.com的荣誉 – Quentin 2012-02-23 12:19:37