この記事には広告を含む場合があります。
記事内で紹介する商品を購入することで、当サイトに売り上げの一部が還元されることがあります。
目次
ELB 経由の HTTP トラフィックを HTTPS にリダイレクトする
AWS上でELBを設定したEC2インスタンスにて、http 接続してきたユーザーを https にリダイレクトする方法をご紹介します。
通常は、ウェブサーバー内の設定で http で接続したとき、https にリダイレクトすれば問題は解決します。ただ ELB 経由の EC2 インスタンスへのアクセスは、ユーザーが http 接続しても https 接続をしても EC2 に到達した時点では http 通信になります。通常の設定を行うと無限ループに陥ります。
〇図解
ユーザー -(https接続)→ ELB -(http接続)→ EC2
ユーザー -(http接続)→ ELB -(http接続)→ EC2
ということで、nginx + ELB 環境にて http 接続を https にリダイレクトする設定を確認していきます。
nginx にて https にリダイレクトする設定
nginx にて HTTPS でリダイレクトするために、AWS では変数「$http_x_forwarded_proto」を提供しています。ユーザーが ELB に HTTP で接続してきたとき、$http_x_forwarded_proto に http と設定されているので、これを元に https へのリダイレクトを行います。
1 2 3 4 5 |
location / { if ($http_x_forwarded_proto = http) { return 301 https://$host$request_uri; } } |
〇AWS 公式「ELB の Classic Load Balancer で HTTP トラフィックを HTTPS にリダイレクトする方法を教えてください。」
https://aws.amazon.com/jp/premiumsupport/knowledge-center/redirect-http-https-elb/
実際に nginx を設定した conf ファイルの設定サンプル
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
server { listen 80; server_name example.com; root /home/example/htdocs/; index index.php index.html index.htm; location / { if ($http_x_forwarded_proto = http) { return 301 https://$host$request_uri; } try_files $uri $uri/ /index.php$is_args$args; } location ~ \.php$ { fastcgi_pass unix:/var/run/php/php7.2-fpm.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } } |