2016-06-22 1 views
3

우리는 여러 제품을 제공하는 Java 응용 프로그램을 보유하고 있습니다. 제품에 기반한 행동 변화입니다.AWS ELB의 응용 프로그램 서버에 서브 도메인 전달

이 제품은 URL의 하위 도메인에 의해 정의된다

이 URL을 각각 균일 한 EC2 앱의 우리의 함대에 요청을 전달 경로 (53)를 통해 서로 다른 AWS 탄성로드 밸런서에 매핑되는
https://<product1>.example.com 
https://<product2>.example.com 
... 

서버.

따라서 https://<product1>.example.com에는 ELB가 있으며, https://<product2>.example.com은 다른 ELB를 가지고 있습니다. 이 두 ELBS는 동일한 Java 응용 프로그램을 사용하는 동일한 서버 세트로 트래픽을 보냅니다.

ELB가 포트 9443 및 9001을 통해 HTTPS인지 여부를 기반으로 요청하고 nginx가 포트 9001의 모든 트래픽에 대해 리디렉션을 수행합니다. 그렇지 않으면 포트 8080을 통해 Java 응용 프로그램으로 전달됩니다.

원본 URL이 Java 응용 프로그램에 도달하기 전에 원래 URL을 확인해야하므로 응답의 구성 및 동작을 결정하는 데 사용할 수 있습니다. 가장 좋은 점은 $http_referer이지만 초기 방문 이후에도 모든 요청에 ​​대해서만 작동합니다. 첫 번째 방문에서도 URL이 필요합니다.

다음은 Google 배포의 (매우) 대략적인 다이어그램입니다. 도움이 되었기를 바랍니다. enter image description here

+0

['$ host']에 있어야합니다 (http://nginx.org/en/docs/http/ngx_http_core_module.html#var_host) ... 찾고있는 것이 맞습니까? 또한 와일드 카드 또는 UCC (다중 SAN) SSL 인증서가 모든 추가 ELB를 불필요하게 만들 수있는 것처럼 보입니다. –

답변

0

전체 호스트 이름이 nginx 레이어로 푸시됩니다. nginx의 로깅을 수정하면 $host이 추가되었고 전체 호스트 이름이 나타났습니다. 문제는 바람둥이가 호스트 데이터를 잃어 버리는 것이지만 쉽게 해결할 수 있습니다. 여기

내가 nginx.conf에 업데이트 된 것입니다 :

log_format main '$host $remote_addr - $remote_user [$time_local] "$request" ' 
        '$status $body_bytes_sent "$http_referer" ' 
        '"$http_user_agent" "$http_x_forwarded_for"'; 

공지 사항 main 후 블록의 눈앞에서 $host 변수입니다.