AWS・ALB・EC2で作成したWordPress(WP)サイトをhttps(SSL)化する(.htaccess設定等)

AWSのEC2に設置したWordPressサイトをALBとACMの証明書を使ってhttps対応(SSL化)する案件を対応したため、メモ代わりに紹介いたします。

今回は、EC2の初期構築ALBとEC2の接続の部分ではなく、

  • Route53の設定
  • .htaccessの設定
  • WP内のパスをhttps化
  • wp-configの設定

を紹介します。
※EC2の初期構築やALBとEC2の接続はググればたくさん情報が出てきて困らなかったため。

Route53の設定

Route53の設定は非常に簡単で、

  • 接続するドメイン名のHost Zoneを作成
  • そのHost ZoneのwwwなしのRecord Setを取得したドメインのネームサーバーに設定
  • wwwありのRecord Setを作成
  • wwwありのRecord SetにACMの証明書をくっつけたALBを接続(Alias Targeに設定)

すれば、接続したドメインでALBで管理するサイトにアクセスできるようになります。

ただ、この時点だと、

  • http://www.●●.com
  • http://●●.com
  • https://www.●●.com
  • https://●●.com

全てでアクセスできてしまうため、.htaccessを変更して、https://●●.comに統一しました。

.htaccessの設定

wordpressでdefaultで設定されている.htaccessを上記のように変更します。

この変更で、

  • http://www.●●.com
  • http://●●.com
  • https://www.●●.com
  • https://●●.com

すべてのアクセスを【https://●●.com】に集中させることができます。

リダイレクトループ(無限ループ)させないために

WordPressのdefaultの.htaccessに追加したのは

この2行です。

.htaccessを利用したリダイレクトには様々な記述法があります。

しかし、AWSのALBを使う場合、この記述法にしないと、リダイレクトループ(無限ループ)が発生して、ブラウザが正常にサイトを表示しなくなります。

WP内のパスをhttps化

サイトのドメインをhttps化できても、そのサイトで使っている

  • 画像パス
  • cssのファイルパス
  • javascriptのファイルパス

がhttpで通信をしていると、保護されていない通信になってしまいます。

わたしが作成したサイトでは以下の対応をしてhttp通信しているパスをhttps化しました。

DBにhttpで登録されている文字列をhttpsに変更する

特にウィジェット等使っていない簡易的なサイトだったので、

  • mysql ダンプ(mysqldump -uユーザー名 -p dbname > dump.sql)
  • http→httpsに変更
  • 登録

して、パスをすべてhttps化しました。

※ウィジェット等を使っているWPサイトの場合、https化用のツールを使う必要があります。

httpで出力してしまうwpタグをhttps対応する

【bloginfo(‘template_directory’)】

こういったタグはhttp://でパスを出力してしまいます。そのため、

【ltrim(get_bloginfo(‘template_directory’), ‘https:’)】

上記のように変更して、https対応をします。

WordPressが自動で生成するソースを削除する

WordPressが自動で生成するソースにもhttp通信のものが含まれています。

それらを出力しないようにするために、以下の記述をfunctions.phpに追加します。

■絵文字を解釈するためのソースを無効化

■Embed機能用のソースを無効化

wp-configの編集

最後にwp-configを編集します。

https化した後にwp-configを編集しないと、wp-adminの管理画面で「このページにアクセスする権限がありません。」という文言が出て、記事の編集ができなくなります。

その状態を回避するために、wp-config.phpに

を追記します。

注意点として、

より手前に記述してください。

こうすると、https状態で管理画面にログインできるようになります。

 

思った以上に大変だったALBを使ったWPサイトの運用

XSERVERやロリポップなら簡単にSSL化できたWordPressサイトだったのですが、AWSのALBとACMを使うという案件だったので少々時間がかかってしまいました。

もし同じような状況の方がいらっしゃいましたら、是非、参考にしてください!

ABOUTこの記事をかいた人

新卒ノマドエンジニアとして独立し、半年で月収100万円を達成する。フリーランスのエンジニアとして活動しながら、事務所を売却(バイアウト)したり、Youtuber(最高月間視聴回数109万回、チャンネル登録者1万人)をしたり、Openrecの公式配信者としてゲーム生実況をしたり、ベンチャー企業のCOOをしたり、パラレルキャリアを歩んでいる。 2019年にミニマムライフコストを不労所得で稼げるようになったため、いまは好きなことだけ仕事にしています。