Edited at

ELB配下のApacheで外部はHTTPSにリダイレクトし、内部のサーバのみHTTPで通信させる

More than 1 year has passed since last update.


やりたい事

server_pptx.png


  • 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の場合は以下を参照