将 httpd ProxyPass 与 DirectoryIndex 一起使用
Posted
技术标签:
【中文标题】将 httpd ProxyPass 与 DirectoryIndex 一起使用【英文标题】:Using httpd ProxyPass with DirectoryIndex 【发布时间】:2017-02-22 23:07:06 【问题描述】:如何同时使用ProxyPass
和DirectoryIndex
?
我有以下规则:
# Index
DirectoryIndex index.html
# Service Endpoint
ProxyPass /endpointA http://127.0.0.1:wxyz/
ProxyPassReverse /endpointA http://127.0.0.1:wxyz/
# Root Endpoint
ProxyPass / http://127.0.0.1:8080/static/
ProxyPassReverse / http://127.0.0.1:8080/static/
预期的行为是,当用户点击/
的机器时,应该为他们服务127.0.0.1:8080/static/index.html
但是,我从 /static/
端点收到 404,因为似乎没有尝试加载默认页面;如果我点击,这一切都会正常工作
/index.html
哪个路由我到127.0.0.1:8080/static/index.html
如何让 ProxyPass 和 DirectoryIndex 同时工作,或其他一些配置组合,以便当用户简单地点击
/
时,他们会被路由到127.0.0.1:8080/static/index.html
而不仅仅是127.0.0.1:8080/static
?
【问题讨论】:
【参考方案1】:问题是 DirectoryIndex 不会被使用,因为服务器已经匹配了 ProxyPass /,所以它已经被传递到另一个服务器。
您应该在后端服务器上设置 DirectoryIndex。即端口 8080 上的那个。
【讨论】:
您的回答可能会导致混淆。正在使用 DirectoryIndex,index.html 是本地还是远程都没有区别。 支持的服务器上是否正在使用 DirectoryIndex?否则对 / 上的后端服务器的请求将失败。 是的,操作员已经说过那部分,我添加了一个新的答案来建议他可以做些什么来避免 /index.html 被反向代理。 它在哪里说明了后端服务器的 DirectoryIndex? 我深表歉意,似乎我缺乏足够的咖啡并误读了整件事。我在阅读和一些测试后修正了我的回复。感谢您的耐心等待!【参考方案2】:我已经测试了几种方法,到目前为止,唯一一个产生了您似乎想要的相同结果的方法似乎是使用 mod_rewrite,如下所示:
RewriteEngine on
RewriteRule ^/$ http://127.0.0.1:8080/static/index.html [P,L]
然后你可以添加其余的:
RewriteRule ^/(.+) http://127.0.0.1:8080/static/$1 [P,L]
这可能是一个粗略的方法。
【讨论】:
这没有回答问题。用户想要 index.html 被代理。 wops,你完全正确,我看错了,请允许我修复它。 顺便说一句,我也支持@DanielScott 的回答,他告诉您在后端本身使用此类重定向或索引引用,因为无论如何您都在放弃 / 到后端。在这种情况下,我发现从前端控制它的唯一方法是 mod_rewrite,或者至少在我的测试中,它是唯一优先于 proxypass 的东西以上是关于将 httpd ProxyPass 与 DirectoryIndex 一起使用的主要内容,如果未能解决你的问题,请参考以下文章
使用 proxyPass 和 proxyPassReverse 的 Apache 重写