やりたい事
- 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がついているので、それがない場合は内部と判定しています。
その他の設定は、ヘルスチェックなどを通すためのものです
追記
CloudFrontの場合は以下を参照