带有子目录的Apache VirtualHost代理


13

当前,我们有一个IIS服务器作为主要的Web服务器。我们正在代替其实现Apache服务器,但仍需要可访问IIS服务器。通常,这很简单,因为Apache2可以将子域代理到该服务器。

但是,我们的问题是这样的:我们在IIS服务器上使用dotnetCharting,并且许可与域名相关联。为了使dotnetCharting正常工作,必须购买另一个许可证。

我的问题是,Apache2可以代理一个子目录吗?例如,“ www.example.com/subdir”是否可以指向IIS服务器?似乎并非不可能,但我似乎无法为此找到解决方案。

Answers:


19

当然。不过要小心; 许多Web应用程序的URL路径更改都不理想。该应用程序当前在子目录中使用吗?

# You'll probably want this to maintain the host mapping in IIS
ProxyPreserveHost On
# Swap in the IP address or internal host name of your IIS server:
ProxyPass /subdir/ http://192.0.2.100/subdir/

或者,如果您要更改URL路径,请记住,由于资源(CSS,javascript,图像)的绝对路径,很多应用程序都会遇到此问题:

ProxyPass /subdir/ http://192.0.2.100/
ProxyPassReverse /subdir/ http://192.0.2.100/

完善!这在我的测试环境中成功了。现在,在内部,您可以输入服务器的IP地址并使用我们的内部代理服务器来访问服务器,并且所有内容(dotnetcharting除外)都可以正常运行,因此,当我们使用此方法代理服务器时,我不希望应用程序失败。非常感激!
SuperJer 2012年

1
我不得不离开过尾随/subdir(是这样的:/subdir)。否则,如果domain.com/subdir导致应用程序错误(500)。如果包含斜杠(domain.com/subdir/),它将正确代理,但这不是我想要的效果。
OneHoopyFrood

3

当然。

  1. 启用mod_proxy mod_proxy_http
  2. 在您的Apache VHost中设置以下指令

    ProxyPass /subdir http://iis.server/.../
    ProxyPassReverse /subdir http://iis.server/.../
    

注意最后的“ /”是必需的。

有关更多信息:http : //httpd.apache.org/docs/2.2/mod/mod_proxy.html


0

最后的斜杠不是强制性的。我有这样的设置

ProxyPass /dir http://exmpale.com/dir/ 

ProxyPassReverse /dir http://exmpale.com/dir/ 

顶层工作了,但在主目录下的子目录中进行的传送却没有。

我将其更改为此,一切正常。

感谢您的错误信息!

ProxyPass /dir http://exmpale.com/dir

ProxyPassReverse /dir http://exmpale.com/dir

1
人们为什么对此表示反对?正是我遇到的问题。您必须在两个网址之间都加上一个斜线,或者在两个网址之间都不要加斜线。...对我来说,这至少对子目录有所帮助;)
Jannik
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.