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分配的更改需要幾分鐘的時間。在測試之前等待分發返回到部署狀態。