2

AWS EC2 Autoscale 클러스터에서 실행중인 Akka HTTP 서버가 있습니다. 이 EC2 자동 스케일 클러스터에는 ELB 응용 프로그램로드 밸런서가 앞에 있습니다. ELB 외에도 정적 파일을 제공하도록 설정된 클라우드 프론트 배포판이 있습니다.AWS Cloudfront에서 웹 소켓을 활성화하는 방법

우리는 브라우저에서 백엔드로 보내는 모든 websocket 연결 요청이 실패하여 HTTP 400 Expected UpgradeToWebsocket header 오류가 발생합니다.

추가 조사를 통해 클라이언트가로드 균형 조정기에 직접 연결할 수 있지만 클라우드 프런트를 통한 연결 요청은 실패 함을 발견했습니다. 결국 AWS Cloudfront 설명서에서 this page을 찾았습니다. 클라우드 프론트에서는 클라이언트가 연결할 수없는 이유 인 '업그레이드'헤더를 제거합니다.

이 문제를 해결하려면 캐싱을 사용할 수없는 모든 "헤더 전달"옵션을 활성화했지만 여전히 작동하지 않았습니다. 또한 특정 URL에 대해 선택적으로 클라우드 프런트 캐싱을 사용하지 않도록 설정하거나 클라우드 프론트를 우회하는 옵션을 찾을 수 없었습니다.

이 문제를 어떻게 해결하고 웹탑이 클라우드 프론트에서 작동하는지 확인하십시오. 아니면 지원되지 않는 것입니까?

답변

0

CloudFront는 현재 웹 소켓을 지원하지 않습니다.

특정 헤더는 전달하기 위해 CloudFront를 구성하려는 경우에도 요청에서 제거됩니다. 이들은 page you mentioned의 테이블에 으로 표시됩니다. "CloudFront는 헤더"Caching Based on Header Values Is Supported = "No"을 제거합니다. AWS 포럼에서

는 :

나머지는 바로 사람들이이 기능을 요청 알고 안심하시기 바랍니다.

— 리차드 @ AWS (2015년 6월 6일)

https://forums.aws.amazon.com/thread.jspa?messageID=723375

가 정적 웹 페이지 캐싱 최적화 같은 웹 소켓 반면
3

CloudFront를가 웹 소켓 적합한 해결책이 아니다 대부분 동적입니다. 반면에 ELB는 HTTP 웹 소켓 (ws : //)과 보안 웹 소켓 (wss : //)을 모두 지원하며 모든 SSL 핸드 쉐이크를 처리하도록 구성 할 수 있습니다. 그러나 서버가 전송하는 동안 HTTP/HTTPS 연결을 열어 두려면 TCP 설정으로 구성해야합니다. 여기에 당신이 일을 끝낼 방법은 다음과 같습니다

  1. 클릭하여 EC2의로드 밸런서 탭
  2. 선택 "클래식로드 밸런서"의 "로드 밸런서 만들기"를 참조하십시오. 당신은 순서대로
  3. 소스 및 대상 프로토콜을 정의하는 간단한 TCP를 할 것을 필요 (일반 웹 소켓에 대한 TCP를 선택) :

enter image description here 4. 당신이 필요 안전한 웹 소켓을 수행하고있는 경우

enter image description here 5. 상태 확인을 구성하고 인스턴스를 추가 한 다음 "만들기"를 누릅니다. CNAME을 정의하면 모두 설정됩니다.

소스 프로토콜로 "HTTP"또는 "HTTPS"를 선택하면로드 균형 조정기가 연결을 너무 오래 열어 둘 수 없으므로로드 균형 조정 프로그램에서 어느 시점에서 408 오류 코드 (시간 초과)가 발생합니다. 그것이 우리가 TCP를 선택한 이유입니다.

관련 문제