【问题标题】:Use Apache to load a page sitting on a different server with the same URL使用 Apache 加载位于具有相同 URL 的不同服务器上的页面
【发布时间】:2017-03-13 06:59:09
【问题描述】:

我们有一种情况,理想情况下,我们希望用户访问我们网站上的某个 URL,例如 https://example.com/path/to/page。但是,用于呈现该页面的 HTML 位于我们可以控制的完全不同的服务器(确切地说是 S3)上,我们希望在不重定向的情况下为该 URL 呈现该页面(即更改 URL 本身)。

我简要查看了 Apache mod_proxy 模块,但它似乎并没有完成这项工作,因为我们只收到 500 或 404 错误。这是来自我们的 .htaccess 的示例条目:

<IfModule mod_proxy.c>
RewriteRule "/path/to/page/(.*)$" "https://bucketname.s3-website-eu-west-1.amazonaws.com/path/to/page/$1" [P]
</IfModule>

任何帮助或正确方向的指针将不胜感激。

【问题讨论】:

  • 你为什么不使用代理模块本身,因为显然你想将该路径下的 all 内容映射到其他服务器,但依赖于重写中嵌入的模块模块?
  • 我很乐意使用为工作推荐和设计的任何东西。它的问题是弄清楚如何。我绝不是 Apache 配置专家,我知道的就够了。

标签: apache .htaccess


【解决方案1】:

您很可能偶然发现您在动态配置文件RewriteRule 中使用绝对路径。试试看吧:

RewriteEngine on
RewriteRule "/?path/to/page/(.*)$" "https://bucketname.s3-website-eu-west-1.amazonaws.com/path/to/page/$1" [P]

稍作修改将在动态配置文件中工作在真正的http服务器主机配置中。


但正如评论中提到的,我想知道为什么您不能直接使用代理模块来简化事情。但是,您必须在 http 服务器主机配置中执行此操作,这在动态配置文件中是不可能的:

ProxyRequests off
ProxyPass "/path/to/page/" "https://bucketname.s3-website-eu-west-1.amazonaws.com/path/to/page/"
ProxyPassReverse "/path/to/page/" "https://bucketname.s3-website-eu-west-1.amazonaws.com/path/to/page/"

还有一个一般提示:您应该始终喜欢将此类规则放在 http 服务器主机配置中,而不是使用动态配置文件(“.htaccess”)。众所周知,这些文件容易出错,难以调试,而且它们确实会降低服务器的速度。它们仅在您无法控制主机配置的情况下(阅读:非常便宜的托管服务提供商)或如果您的应用程序依赖于编写自己的重写规则(这是一个明显的安全噩梦)提供它们作为最后一个选项)。

【讨论】:

  • 在 apache 配置文件中使用 mod_proxy 指令会导致 504 错误。 Apache 错误日志也没有显示任何错误消息,因此调试它变得有点棘手。
  • http 状态 504 表示“网关超时”,因此您的请求很可能正在被代理,但对亚马逊目标的内部请求没有收到任何回复。
  • 我现在似乎已经收到了尝试连接的请求,但是我不断收到以下错误。请记住,这是在 Ubuntu 14.04 上运行的:[Mon Mar 13 12:36:32.306225 2017] [proxy_http:error] [pid 1241] [client x.x.x.x:43422] AH01114:HTTP:无法连接到后端:bucketname.s3 -website-eu-west-1.amazonaws.com
  • 同样的一般问题:apache 尝试向亚马逊发出内部请求,但没有这样做。我建议您尝试从 http 服务器运行的系统发出相同的请求。您可以为此使用命令行 http 客户端或浏览器。也许是一些网络拓扑问题?
  • 我意识到了这个问题。当我尚未使用所需的存储桶设置 https 时,我正在定向到 https。一旦我恢复到 http ,一切都会变得很好。忙于实现 https,所以我可以将其切换回那个。感谢您的帮助
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-04-22
  • 1970-01-01
  • 2022-01-01
  • 1970-01-01
  • 2020-09-19
  • 2013-10-16
  • 1970-01-01
相关资源
最近更新 更多