Amazon ELB + EC2 環境で EC2 に直接アクセスしなよう nginx を設定する。
想定するのは ELB にドメイン名を設定して、それを介して EC2 上インスタンスにアクセスするような状態。
その場合、 EC2 (https?://ec2-.*\.amazonaws.com) に直接アクセスされると困る。
とくに ELB で HTTPS の設定をしている状態だと余計にそう。
nginx の設定
if ($http_x_forwarded_proto = "") { return 403; }
を入れてやる。
ELB を介さずアクセスがあれば $http_x_forwarded_proto は空になる。なので空のときは 403 を返す。
403 は「リクエストの実行拒否」なのでステータスコードとしては正しい。 (403 は「アクセス権がない」という意味だと思ってたけど、もう少し広い意味を持っているよう)