AWS Lightsail 版のWordPress へ移行したらHTTP→HTTPSリダイレクトが設定されていなかった話
Bitnami版 WordPress のサポート終了に伴い、先日AWS Lightsail の WordPress へ移行しました。
この際、公式ドキュメントの移行手順に従って実行して、移行自体は問題なく完了しました。ただ、別件でいろいろ調査していたときに念のため HTTP アクセスを確認したところ、HTTP→HTTPSリダイレクトが設定されていないことに気付きました。
この記事では確認方法と修正方法をまとめます。
目次
環境
- 移行元
- AWS Lightsail Bitnami WordPress
- 移行先
- AWS Lightsail WordPress
- HTTPS
- Website Setup で Let’s Encrypt を設定
- データ移行
- All-in-One WP Migration
HTTPがHTTPSへリダイレクトされていない
まず確認したのはこれです。
curl -I http://mattari-benkyo-note.com結果
HTTP/1.1 200 OK
HTTPでアクセスしているので、本来期待していたのは
HTTP/1.1 301 Moved Permanently
Location: https://mattari-benkyo-note.com/
です。
このため、HTTPアクセスがそのままWordPressが返してきたので、おかしいと思い調査を開始しました。
Apache設定を調査
まずVirtualHostを確認しました。WordPressが動いているマシンにSSHで入り以下のように確認しました。
sudo /usr/sbin/apache2ctl -S結果
*:80 -> 000-default.conf
*:443 -> default-ssl.conf
HTTP側は
/etc/apache2/sites-available/000-default.conf
だけでした。
RewriteModuleの確認
sudo apachectl -M | grep rewrite結果は以下の通りです。
rewrite_module (shared)
このため、利用可能な状態になっています。
HTTP側設定
sudo cat /etc/apache2/sites-available/000-default.conf中身は
<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
</VirtualHost>
だけで、本来であればここにHTTPからHTTPSへのリダイレクトの設定があるはずなので、それがなさそうという状態だとわかりました。
Website Setupはリダイレクトを設定しない?
Bitnami版では bncert を実行すると
Enable HTTP to HTTPS redirection?
と聞かれて、ここで設定するようにすることが可能です。
つまりBitnami版ではHTTPS設定と同時にHTTP→HTTPSリダイレクトも設定されます。
一方、Lightsail 版ではWebsite Setupを利用します。
Website Setupでは
- DNS
- Static IP
- Let’s Encrypt
は設定されますが、少なくとも私の環境ではHTTP→HTTPSリダイレクトは設定されませんでした。
修正方法
いくら調べても公式でどのように設定するかが書かれたものがなかったので、ChatGPTなどに確認してもらいながら以下のように設定しました。
編集前にバックアップを取得します。
sudo cp /etc/apache2/sites-available/000-default.conf ~/000-default.conf.bak次に、000-default.confへ以下を追加します。
RewriteEngine On
# Let's Encrypt更新時は除外
RewriteCond %{REQUEST_URI} !^/\.well-known/acme-challenge/
RewriteRule ^ https://mattari-benkyo-note.com%{REQUEST_URI} [R=301,L]ファイル全体では以下のようになります。
<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
RewriteEngine On
RewriteCond %{REQUEST_URI} !^/\.well-known/acme-challenge/
RewriteRule ^ https://mattari-benkyo-note.com%{REQUEST_URI} [R=301,L]
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>設定反映
以下のように構文確認と設定の反映を実施します
sudo apachectl configtest
sudo systemctl reload apache2動作確認
HTTPアクセスしてみて結果が変わるかを確認します。
HTTP
curl -I http://mattari-benkyo-note.com結果
HTTP/1.1 301 Moved Permanently
Location: https://mattari-benkyo-note.com/
HTTPS
curl -I https://mattari-benkyo-note.com結果
HTTP/1.1 200 OK
期待どおりの動作になりました。
調査中に見つかった謎
調査中にもう一つ気になる点がありました。
Apacheの設定を見ると
SSLCertificateFile /etc/ssl/certs/ssl-cert-snakeoil.pem
SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.keyとなっています。
しかし実際に配信されている証明書を確認すると
openssl s_client \
-connect mattari-benkyo-note.com:443 \
-servername mattari-benkyo-note.com \
</dev/null \
| openssl x509 -noout -subject -issuer結果
subject=CN = mattari-benkyo-note.com
issuer=C = US, O = Let's Encrypt, CN = YE2
つまり
- Apache設定にはsnakeoilしか書かれていない
- 実際にはLet’s Encrypt証明書が配信されている
という状態でした。
Website Setupがどのような仕組みでLet’s Encrypt証明書を適用しているのかは、現時点ではよくわかってないため、もしかしたら別の直し方が想定されているのかもしれませんが、よくわかってない状態です。なので、もしこのブログを参考にする場合は現時点でHTTPSへのリダイレクトをどう設定するようになっているのか再度確認をおすすめします。
まとめ
今回分かったことです。
- Bitnami版ではHTTP→HTTPSリダイレクトまで自動設定される
- Lightsail Provider版では少なくとも私の環境では設定されなかった
- Website Setup後もHTTPアクセスは確認した方がよい
curl -I http://ドメインを一度実行するだけで確認できる000-default.confにRewriteRuleを追加することで解決した
もしBitnami版からLightsail 版へ移行した方は、一度HTTP→HTTPSリダイレクトが正しく設定されているか確認してみることをおすすめします。

