Apache 反向代理

Apache 反向代理

我们有几个内部站点,如 sharepoint、bugzilla、RoR 服务器等。用户通过 abc.example.com、xyz.example.com 等 URL 访问这些站点。是否可以进行配置,以便可以使用 example.com/abc 和 example.com/xyz 等 URL 访问这些站点,而不是通过 abc.example.com 和 xyz.example.com 访问?我认为这可能可以通过反向代理实现,并进行了如下配置:

ProxyRequests off  
ProxyPass /abc http://abc.example.com
ProxyPass /xyz http://xyz.example.com
ProxyHTMLURLMap http://abc.example.com /abc
ProxyHTMLURLMap http://xyz.example.com /xyz
ProxyHTMLExtended On
ProxyHTMLLogVerbose On

<Location /abc>
    ProxyPassReverse /
    ProxyHTMLEnable On
    ProxyHTMLURLMap / /abc/
    ProxyHTMLURLMap /abc /abc
    SetOutputFilter proxy-html
    SetEnv proxy_html_force
    SetEnv force-proxy-request-1.0 1
    SetEnv proxy-nokeepalive 1
    RequestHeader    unset  Accept-Encoding
</Location>

<Location /xyz>
    ProxyPassReverse /
    ProxyHTMLEnable On
    ProxyHTMLURLMap / /xyz/
    ProxyHTMLURLMap /xyz /xyz
    SetOutputFilter proxy-html
    SetEnv proxy_html_force
    SetEnv force-proxy-request-1.0 1
    SetEnv proxy-nokeepalive 1
    RequestHeader    unset  Accept-Encoding
</Location>

但无论如何,我都无法让它工作。Apache 日志表明这是一个 404 错误。我认为我在“位置”部分弄错了,因为 /abc 和 /xyz 只是随机名称,并不指向任何位置。

有什么方法可以让它工作吗?通过使用 URL 重写或其他方法?我也尝试过 Nginx,但没有成功。任何帮助都将不胜感激。

谢谢,Mogaroy

答案1

我怀疑您在这里寻找的不是反向代理,而是 RailsBaseURI 之类的东西。我还没有尝试过,因为我使用的是子域,但我记得读过 RailsBaseURI 可以在主机或虚拟主机的 Apache 配置中使用。因此,对于 example.com/xyz,您大概需要类似以下内容:

服务器名称 example.com

RailsBaseURI /xyz

答案2

谢谢 Lime-Like 为我指明了正确的方向,很抱歉由于我正在度假所以回复晚了。

虽然不是完全准确,但它帮助我朝着正确的方向前进。正如您所建议的,我在我的 RoR 服务器的 vhost 部分中使用了 RailsBaseURI - 必须创建一个符号链接才能使其正常工作。这与对最初发布的反向代理配置的一些修改一起,使它成功运行。

现在,我的所有内部站点都可以通过单个 URL 以不同的路径进行访问,但 SharePoint 服务器除外,我无法通过代理对其进行身份验证。它配置为使用 NTLM 进行身份验证,但通过代理进行工作似乎存在问题。

如能提供任何指点我将不胜感激。再次感谢!!

莫加罗伊

相关内容