在 Apache 代理后面为 S3 静态网站 JS 获取 404

Posted

技术标签:

【中文标题】在 Apache 代理后面为 S3 静态网站 JS 获取 404【英文标题】:Getting 404 for S3 static website JS behind Apache proxy 【发布时间】:2019-02-03 13:20:34 【问题描述】:

我有一个 Apache HTTP 服务器作为 AWS S3 静态网站前面的代理。所以http://example.com/testsite 会转到 S3 站点,但应该继续被视为从 http://example.com/testsite 访问。

最初的index.html 访问导致 200 响应,但是,所有运行的 javascript 文件都返回 404。它们位于 S3 根目录中,与 index.html 相同,但最终以 @ 访问987654323@ 而不是 http://example.com/testsite,因此我得到 404。

我希望有人可以帮助我解决我的 Apache 配置 sn-p(请参见下文),以便我获得正确的配置。

RedirectMatch permanent ^/$ /doorman/
Redirect /js/ /frontman/js/
...
...
<Location /testsite >
  ProxyPreserveHost On
  AuthType openid-connect
  Require valid-user
  ProxyPass <%= @s3_website %>/
  ProxyPassReverse <%= @s3_website %>/
</Location>

【问题讨论】:

【参考方案1】:

我通过以下配置解决了这个问题:

``` ProxyPreserveHost 关闭 AuthType openid-connect 需要有效用户 ProxyPass ProxyPassReverse

ProxyPreserveHost 关闭 AuthType openid-connect 需要有效用户 ProxyPass /assets/$1 ProxyPassReverse /assets/$1

ProxyPreserveHost 关闭 AuthType openid-connect 需要有效用户 ProxyPass ProxyPassReverse ```

关键部分是:

“ProxyPreserveHost Off” - 我的 S3 存储桶名称与代理不同,因此需要为“Off”。

“LocationMatch” - 需要这样代理才能匹配,并将 URL 请求映射到 S3 存储桶位置/对象。

【讨论】:

以上是关于在 Apache 代理后面为 S3 静态网站 JS 获取 404的主要内容,如果未能解决你的问题,请参考以下文章

AWS S3 代理使用方法

限制对云端分发背后的 s3 静态网站的访问

使用Apache服务部署静态网站

使用Apache服务部署静态网站

S3静态网站索引文档

使用Apache服务部署静态网站。