何がやりたかったか
AWS上のサーバにhttpでアクセスしてきた人をhttpsにリダイレクトをさせたかった。nginxで。
ちなみにApacheでやっている記事は結構ある
https://qiita.com/ruddy95/items/377428f4d8219608bdbd
https://qiita.com/michimani/items/88973c5e2ae76a8e84aa
https://qiita.com/tihimsm/items/2c58a3425e446261940b
先人の知恵
ELBの設定で(80|443)→80としているとリダイレクトループになる恐れがある。
https → 443 ELB 80 → nginx
http → 80 ELB 80 → nginx
リダイレクトの対象は「ELBにhttp(80)でアクセスしてきたリクエスト」のみを対象としなければいけない
判別方法
nginxの場合、下記の変数でELBへのリクエスト形式取得ができる
$http_x_forwarded_proto
設定
location / {
if ($http_x_forwarded_proto = http) {
return 301 https://$host$request_uri;
}
}
上記のように$http_x_forwarded_protoがhttpの場合のみ、
301リダイレクトするように返してあげましょう。