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リダイレクトが正しく設定されているか確認してみることをおすすめします。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトは reCAPTCHA によって保護されており、Google のプライバシーポリシー および 利用規約 に適用されます。

reCaptcha の認証期間が終了しました。ページを再読み込みしてください。