1

S3 버킷에서 carrierwave-aws를 사용하도록 구성된 carrierwave 업 로더가있는 레일 앱이 있습니다. 이 버킷에 대한레일 S3 - CloudFront 401 오류 트리거 기본 인증 팝업

권한은 나쁜했지만, 다행스럽게도 필자는 업로드가 잘 작동하는 것 지금을 고정 (난, 공용 읽기가 선택되어 하나의 파일의 사용 권한을 확인)

레일즈 응용 프로그램은 CloudFront를 사용하고 , "정상적인"자산 (css, js 등) 및 carrierwave-aws를 처리하도록 구성되었습니다. 이것은 HTTP 기본 인증 popu가 위의 오류가 HTTP 기본 인증 창을 트리거

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

내 배포 암호를 묻는 화면에 나타납니다 발생하면

그러나 나는 아직도, 더 401 오류를 받고,하고 있어요 xxx.cloudfront.net에 대한 user/pw를 묻는 메시지

이것이 링크되어 있다면, 실제로 Rails 웹 사이트 자체에서 이런 종류의 인증을 얻은 것으로 나타났습니다.

CloudFront에서 필자는 레일즈 서버 (및 CSS/js는 정상이므로이 기능은 정상적으로 작동 함)와 S3 버킷 (실제로이 기능을 테스트 할 수있는 방법을 모르는 상태)을 구성했습니다.

그래서

  • 가 어떻게 내 레일을 확인하실 수 있습니다 -> Carrierwave-AWS -> CloudFront를 파이프 라인하여 잘 작동? 업로드가 잘되었으므로 업로드 후 브라우저에서 읽을 수 없습니다.
  • 401 오류가 발생하는 경우 웹 사이트에서 HTTP 기본 인증을 어떻게 비활성화 할 수 있습니까?

편집 : 설정 기본 인증 레일에서와 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

흠, 이건 내 레일 ApplicationController에서 이루어집니다. 그러나 팝업은 클라우드 프론트 URL http 기본 인증을 요청하고, 내 applicationcontroller의 사용자/PW 자격 증명을 입력하더라도 작동하지 않습니다. –

+0

기본 인증으로 인해 클라우드 프론트는 상위 서버의 파일을 캐시 할 수 없습니까? 인증을 사용 불가능으로 설정 한 다음, 여전히 발생하는지 확인하십시오. – error2007s

답변

0

401 HTTP 응답은 브라우저 팝업 프롬프트를 실행하는 데을 가정 물론, 의. 원하지 않으면 응용 프로그램에서 인증을 요구하지 않아도됩니다.

그러나이 시점에서 가장 유용한 해결책은 브라우저가 원본 서버로 자격 증명을 다시 보내려는 시도를 통과시키는 것입니다. 이렇게하려면 CloudFront가 Authorization: 헤더를 원본으로 전달해야합니다. 기본적으로이 요청 헤더 (대부분의 요청 헤더와 마찬가지로)는 CloudFront에서 삭제하고 원본으로 보내지 않습니다.

Whitelist this header 적절한 캐시 동작으로 CloudFront가 전달하므로 액세스 제어 메커니즘이 예상대로 작동해야합니다.

CloudFront 배포판을 변경하는 데 몇 분이 걸립니다. 테스트하기 전에 배포가 배포 된 상태로 돌아갈 때까지 기다리십시오.