【问题标题】:Using httpd ProxyPass with DirectoryIndex将 httpd ProxyPass 与 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

【问题讨论】:

    标签: apache url-rewriting httpd.conf proxypass


    【解决方案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 的东西
    猜你喜欢
    • 1970-01-01
    • 2012-11-22
    • 2014-05-11
    • 1970-01-01
    • 2019-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多