1

我有一个Rails应用程序,配有carrierwave上传器,配置为在S3存储桶上使用carrierwave-aws。Rails S3 - CloudFront 401错误触发器基本Auth弹出框

该桶的权限是坏的,但我希望我固定的他们,现在上传似乎做工精细(我查了单个文件的权限,公共读检查)

Rails应用程序是使用CloudFront的,它已被配置为处理“正常”资产(CSS,JS等)和carrierwave-aws。

但是我仍然得到401错误,更糟的是,当这一切发生在屏幕上显示一个HTTP基本身份验证珀普,要求输入密码我分配

"NetworkError: 401 Unauthorized - https://xxxxxxx.cloudfront.net/uploads/user/avatar/xxxxxx/thumb_avatar.jpg "

上述错误触发一个HTTP基本身份验证窗口请求xxx.cloudfront.net

如果这是链接的,事实证明我确实在我的Rails网站上有这种认证(在我们开始生产之前)。

在CloudFront上,我配置了两个来源:我的Rails服务器(和css/js都可以,所以我猜这个是可以的)和S3 Bucket(不知道我怎么能真正测试这个)

所以

  • 如何查看我的Rails - > Carrierwave-AWS - > CloudFront的流水线工作正常? (上传很好,上传后我无法从浏览器读取)
  • 如何在网站出现401错误时从网站禁用HTTP基本身份验证?

编辑:我设置基本认证中的Rails ApplicationController中

def authenticate 
    if ENV["HTTP_BASIC_AUTH"] == "true" 
     authenticate_or_request_with_http_basic do |username, password| 
     username == "wxx" && password == "xxx!" or 
     end 
    end 
    end 
+0

你在哪里设置了Apache或其他东西的基本认证配置?因为这是我猜想的云端问题的根源。 – error2007s

+0

嗯,是的,这是在我的Rails ApplicationController中完成的。但是,弹出窗口要求输入一个cloudfront url http basic auth,即使我输入了我的applicationcontroller的user/pw凭据,它也不起作用。 –

+0

由于基本身份验证,云端无法从父服务器缓存文件?尝试禁用身份验证,然后看看它是否仍然发生。 – error2007s

回答

0

401的HTTP响应是,当然,应该触发浏览器弹出提示的。如果你不想这样做,你的解决方案是不要求在你的应用程序中进行认证。

但是,在这一点上,对您最有帮助的解决方案似乎是继续并启用浏览器将证书发送回原始服务器的尝试。为此,CloudFront需要将Authorization:标题转发给您的来源。默认情况下,这个请求标头(像大多数请求标头)由CloudFront丢弃而不发送到原点。

Whitelist this header处于适当的缓存行为状态,以便CloudFront将其转发,并且您的访问控制机制应按预期工作。

请记住,对CloudFront分配的更改需要几分钟的时间。在测试之前等待分发返回到部署状态。