将 httpd ProxyPass 与 DirectoryIndex 一起使用

Posted

技术标签:

【中文标题】将 httpd ProxyPass 与 DirectoryIndex 一起使用【英文标题】:Using httpd ProxyPass with DirectoryIndex 【发布时间】:2017-02-22 23:07:06 【问题描述】:

如何同时使用ProxyPassDirectoryIndex

我有以下规则:

# 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 重写

Tomcat 的 Apache (httpd) 代理不断超时

httpd实现基于用户的访问控制

配置httpd支持PHP,测试LAMP是否成功。

apache httpd.conf 中带有问号字符的问题

httpd用户认证,单个文件的用户认证,域名跳转,记录访问日志