この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。
ELBでSSLオフロードする構成を組んでいる状態で配下のEC2インスタンス自身からlocalhostのhttpを叩きたい場合のTipsです。
前提
以下の記事のように、ELBでSSLオフロードして、配下のEC2インスタンスへは常にhttpでアクセスされる構成にしている。
http://qiita.com/snoguchi/items/f5ccb67592f87942480d
問題
ELB配下のEC2インスタンスにcurlでhttpアクセスしたいけど、nginxの設定でhttpでアクセスされたらhttpsにリダイレクトする設定してるため、自分自身のlocalhostに対してhttpのurlを叩けなくて困ったりする。
たとえば、railsのインスタンスが稼働しているか単純に確認したくてヘルスチェックを叩いてみたくても
$ curl http://localhost/healthcheck
<html>
<head><title>301 Moved Permanently</title></head>
<body bgcolor="white">
<center><h1>301 Moved Permanently</h1></center>
<hr><center>nginx</center>
</body>
のようにリダイレクトされてしまう。
対処方法
ELBでSSLオフロード済みのhttpはヘッダに X-Forwarded-Proto: https
がついてくるのでこれを明示的につけてあげれば良い。
$ curl -H "X-Forwarded-Proto: https" -v http://localhost/healthcheck