ELB配下のApacheで外部はHTTPSにリダイレクトし、内部のサーバのみHTTPで通信させる
やりたい事
- ApacheにELB経由でHTTPでアクセス来たらHTTPSでアクセスするようにクライアントに要求する
- ApacheにELB経由でHTTPSアクセス来たらELBでHTTPのポートのApacheにアクセスする
- 他の内部(10.X.X.X)のEC2からHTTPにアクセスが来た場合はそのまま通す
設定
<VirtualHost *:80> ServerName xxx # http -> https rewrite RewriteEngine On RewriteCond %{HTTP:X-Forwarded-Port} !^443$ RewriteCond %{HTTP_USER_AGENT} !^ELB-HealthChecker RewriteCond %{REQUEST_URI} !=/server-status RewriteCond %{HTTP:X-FORWARDED-FOR} !^$ RewriteRule ^(.*)?$ https://%{HTTP_HOST}$1 [R=301,L] # http -> https rewrite [end] ... </VirtualHost>
上記でいけます。ELB経由でアクセスされる場合は、 %{HTTP:X-FORWARDED-FOR} のHTTPヘッダにクライアントのGlobal IPがついているので、それがない場合は内部と判定しています。
その他の設定は、ヘルスチェックなどを通すためのものです