以前紹介した下記記事の合わせ技になります。

Varnishでリダイレクト専用Webサーバの構築
Varnish経由でS3のコンテンツをPOSTで取得(Facebookアプリ用)

概要は、このようになります。

設定ファイル(/etc/varnish/default.vcl)は、以下のようになります。

backend default {
.host = "localhost";
.port = "80";
}

sub vcl_recv {
if(req.http.host == "www.suz-lab.com") {
if(req.http.X-Forwarded-Proto == "https") {
set req.backend = suzlab;
set req.http.host = "www.suz-lab.com.s3-website-ap-northeast-1.amazonaws.com";
set req.request = "GET";
return(lookup);
}
}
return(error);
}

sub vcl_error {
if(req.http.host == "www.suz-lab.com") {
if(req.http.X-Forwarded-Proto != "https") {
set obj.http.Location = "https://" req.http.host req.url;
set obj.status = 301;
}
}
return(deliver);
}

backend suzlab {
.host = "www.suz-lab.com.s3-website-ap-northeast-1.amazonaws.com";
.port = "80";
}

今回、SSLターミネーションはELBで実施していますが、近頃リリースされた下記のCloudFrontでのターミネーションの方が、今後はいいかもしれません(未検証ですが)。

Amazon CloudFrontが独自SSL証明書とルートドメインホスティングをサポート

こちらの記事はなかの人(suz-lab)監修のもと掲載しています。
元記事は、こちら