2017-01-07 1 views
1

example.com이라는 웹 사이트에 해당 호스트 이름에 대한 모든 요청을 https://www.example.com으로 지정합니다. 현재 Elastic Beanstalk의 노드에서 실행 중입니다.AWS Elastic Beanstalk : HTTPS를 통한 호스트 이름 리디렉션

내가 리디렉션에 대한 다음과 같은 솔루션을 가지고 있지만, 3 단계를 수행하는 방법에 대한 확신 : 또한

을,이 일을 할 수있는 가장 좋은 방법입니다 (또는 아래 달성하기 위해 일반적으로 더 좋은 방법은 무엇입니까?)

1) http://example.com ->https://www.example.com (DONE - S3 버킷에 A 레코드를 통해 - example here).

2) http://www.example.com ->https://www.example.com (완료 - HTTPS 리디렉션 - expressJS - example here).

3) https://example.com ->https://www.example.com (어떻게해야합니까?) - 현재에는 ERR_CONNECTION_TIMED_OUT이 제공됩니다.

+0

어떤 DNS 서비스를 사용하고 있습니까? Route53? –

+0

나는 Elgin Beanstalk에서 NodeJS 응용 프로그램을 nginx 프록시에서 실행했다. 노드가 아닌 nginx를 사용하여 모든 http => https 및! www => www가 리디렉션되도록 구현하는 것이 조금 더 깔끔하고 빠릅니다. .ebextensions를 사용하여이 작업을 수행 할 수 있습니다. http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/create_deploy_nodejs.container.html#nodejs-platform-proxy –

답변

2

아마도 www 하위 도메인과 알몸의 꼭지점을 다르게 처리해야 할 것입니다.

1) http://example.com ->https://www.example.com

S3 버킷 대상으로하는 A 별칭 레코드를 사용하는 정점 Route53 및 및 설치로 이동하는 것입니다 리디렉션 벌거 벗은 (정점) 도메인을 처리 할 수있는 가장 쉬운 방법. S3 버킷에서 "모든 요청을 다른 도메인으로 리디렉션"을 활성화하고 https://www.example.com으로 리디렉션 할 수 있습니다.

이 솔루션은 https 요청에 대해 SSL을 종료하지 않으므로 https가 아니라 http 요청에만 작동합니다. http와 https 모두에서 작동하는 솔루션은 # 3을 참조하십시오.

2) http://www.example.com ->https://www.example.com

당신은 동일한 도메인 www가 HTTP => HTTPS 응용 프로그램에서 X-Forwarded-Proto HTTP 헤더를 사용하여 리디렉션을 수행 할 수 있습니다. http 또는 https 중 하나의 값을 갖습니다. http을 받으면 https으로 리디렉션 할 수 있습니다. 당신은 CloudFront를 함께 앞,

if ($http_x_forwarded_proto != "https") { 
    rewrite ^(.*)$ https://$server_name$1 permanent; 
} 

을 또는 당신의 탄성 콩 줄기 응용 프로그램을 수하고 HTTP =을 구현 :

RewriteEngine On 
RewriteCond %{HTTP:X-Forwarded-Proto} =http 
RewriteRule . https://%{HTTP:Host}%{REQUEST_URI} [L,R=permanent] 

의 nginx 예는 다음과 같이 수 :

아파치 예는 다음과 같을 것이다 > https가 여기로 리디렉션됩니다. '동작 설정'에서 'HTTPS를 HTTPS로 리디렉션'라디오 버튼을 확인할 수 있습니다.

3) https://example.com -> 당신은 example.com과 www.example.com 다루는 주제 대체 이름이있는 SSL의 인증서가 필요합니다

https://www.example.com. AWS Certificate Manager으로 무료로 받으실 수 있습니다. * .example.com과 example.com을 단일 인증서로 처리 할 수있는 "더 많은 이름 추가"를 할 수 있습니다. 인증서 관리자는 Cloudfront와 완벽하게 통합되어 있으므로 좋은 옵션입니다.

CloudFront를 옵션 :

CloudFront를 여기에 꽤 좋은 옵션입니다 - 당신이 앞으로 전체 응용 프로그램 (정점과 WWW)을 사용할 경우 특히.

Cloudfront 내에서 "대체 도메인 이름 (CNAME)"을 사용하려면 example.com과 www.example.com을 모두 추가해야합니다 (쉼표 또는 줄 바꾸기로 구분). 또한 두 도메인을 모두 커버하는 디지털 인증서를 지정합니다.

탄성 콩 줄기 옵션 :!

당신이 당신의 응용 프로그램 계층을 사용하면 정점과 www가 모두 대신 탄성로드 밸런서에서 SSL을 종료 할 수 CloudFront를 사용하고 같은 www가 리디렉션을 구현하지 않으려는 경우 HTTP 서비스 (아파치, nginx 등). 두 도메인 (apex 및 www 하위 도메인)을 모두 포함하는 SSL 인증서를 추가하기 만하면됩니다.

비 www가 리디렉션 구현 :

종료 옵션 중 하나를 사용하면 그러나 당신이 지시하는 301를 반환해야합니다, 다시 탄성 콩 줄기에 당신의 원본 서버로가는 https://example.com에 대한 요청을 얻을 것이다를 브라우저를 응용 프로그램 계층에서 https://www.example.com으로 변경하십시오.

아파치 예 :

RewriteCond %{HTTP_HOST} !^www\. [NC] 
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L] 

의 nginx 예 : 에이펙스에 대한

server { 
    server_name "~^(?!www\.).*" ; 
    return 301 $scheme://www.$host$request_uri; 
} 

Route53 별칭 기록 : 솔루션 당신이 Route53 별칭 기록을해야합니다 중 하나와

정점에서 CNAME 레코드가 정점 (알몸) 도메인에 대해 지원되지 않으므로이 작업을 수행 할 수 있습니다. Elastic Beanstalk 대상 또는 Cloudfront 대상을 지정합니다.