もくじ
要件
- ALBにAWS ACMにてサーバ証明書を設定、443で待ちうける
- ALB配下のWEBサーバは80番で待ちうける
- X-Forwarded-Portが443でなければ
mod_rewriteで443のhttps://www.example.netリダイレクトを行う - http://example.netにアクセスがあった場合は、https://www.example.netにリダイレクトさせたい
標準的な要件です。
動作フロー
- ユーザ(443) → ALB(443) → WEB(80)
- ユーザ(80) → ALB(80) → WEB(80) → ALB(443)
ALB(443)でないことをWEB(80)が”X-Forwarded-Port”で判定して、443でなければALB(443)にリダイレクトを行う
Apacheの設定
# vi /etc/httpd/conf.d/www.example.net.conf
<VirtualHost *:80>
DocumentRoot /var/www/vhosts/www.example.net/httpdocs
ServerName www.example.net
ServerAlias example.net
ErrorLog logs/www.example.net-error.log
CustomLog logs/www.example.net-access.log elb-customlog env=!nolog
## ALB対策
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTP:X-Forwarded-Port} !^443$
RewriteCond %{HTTP_USER_AGENT} !^ELB-HealthChecker
RewriteRule ^(.*)?$ https://www.example.net$1 [R=301,L]
</IfModule>
<Directory "/var/www/vhosts/www.example.net/httpdocs">
# 2.2系
#AllowOverride All
#Order allow,deny
#Allow from all
# 2.4系対策
AllowOverride All
Require all granted
</Directory>
</VirtualHost>
※AWS公式の推奨設定
<VirtualHost *:80>
・・・
RewriteEngine On
RewriteCond %{HTTP:X-Forwarded-Proto} =http
RewriteRule .* https://%{HTTP:Host}%{REQUEST_URI} [L,R=permanent]
・・・
</VirtualHost>
上記を入れるのが推奨みたいですね。
構文確認を行った上で反映を行う
# httpd -t # systemctl reload httpd
WordPressの場合はもう一手間必要
wp-config.php
※下記を追加する
# AWS ELB(ALB) リダイレクトループ対策
if ( ! empty( $_SERVER['HTTP_X_FORWARDED_PROTO'] ) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https' ) {
$_SERVER['HTTPS']='on';
}



