带有子目录的 Apache VirtualHost 代理

带有子目录的 Apache VirtualHost 代理

目前,我们有一个 IIS 服务器作为我们的主要 Web 服务器。我们正在实施一个 Apache 服务器来代替它,但仍然需要让 IIS 服务器可以访问。通常,这是一件简单的事情,因为 Apache2 可以将子域代理到此服务器。

然而,我们的问题是:我们在 IIS 服务器上使用 dotnetCharting,而许可与域名绑定。为了使 dotnetCharting 正常工作,必须购买另一个许可证。

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

答案1

当然可以。但要小心;许多 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/

答案2

末尾的斜线不是必需的。我的设置如下

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

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

并且顶层可以工作,但是主目录下的子目录中的所有内容却没有工作。

我将其改为这样,一切正常。

感谢您的错误信息!!!

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

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

答案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

答案4

我发现以下方法有效,但不带有尾随 / :

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

尽管(不要介意协议)仅适用于尾随 / :

ProxyPass / ajp://server.ip.address:8009/
ProxyPassReverse / ajp://server.ip.address:8009/

我不会说

注意最后的“/”是强制性的。

相关内容