我们有几个内部站点,如 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 进行身份验证,但通过代理进行工作似乎存在问题。
如能提供任何指点我将不胜感激。再次感谢!!
莫加罗伊