WordPressのSSL化で無限ループ

表題の通り。ここではないとあるWordPressのサイトをSSL化した時にハマった。

■ 環境

  • WordPress 4.9.2
  • Amazon Linux
  • EC2
  • ELB

■ WordPress

設定 > 一般』にある下記2つの項目をSSLに設定した。ちなみにSSLはELBで終端とし、EC2へは”http“でアクセスしたい。

  • WordPressアドレス
  • サイトアドレス

どちらも、もともとある設定の”http“を”https“に変更した。”サイトアドレス“の変更時点では問題がなかったのだが、”WordPressアドレス“を”https“に変更したところ無限ループとなってしまった。

原因は、WordPressのPHPでは”https“でアクセスが来るはずと認識しているのに、実際にはELBで終端されているので”http“でアクセスが来てしまっているため、再度”https“にリダイレクトされている…という感じがする。

というわけで下記を”wp-config.php“に入れることで対応が可能であった。

if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https')
    $_SERVER['HTTPS'] = 'on';

以上。

WordPressのversion

表題を知りたい。管理画面に入ることが可能であれば表示されているのでわかるのだが、管理画面にログインするID/Passwordを知らないけどversionは確認したいサイトがある。

■ 環境

  • WordPress

■ version.php

どうやら”version.php“というファイルが存在するらしい。

$ ls wp/wp-include/version.php

このファイル内に”$wp_version“という変数で書かれている。とあるWordPressのサイトは下記であった。

$ cat wp/wp-include/version.php
<?php
/**
 * The WordPress version string
 *
 * @global string $wp_version
 */
$wp_version = '4.7.5';
  :

4.7.5“と結構前のversionを使用しているようだ。version upするように働きかけねばならない。

他にも下記が記載されていた。

  • $wp_db_version = 38590;
  • $tinymce_version = ‘4506-20170408’
  • $required_php_version = ‘5.2.4’;
  • $required_mysql_version = ‘5.0’;
  • $wp_local_package = ‘ja’;

知らなかった。

以上。

DB直接操作でプラグイン無効化

WordPressにおいて表題の通り。

■ 環境

  • WordPress 4.8.1

■ きっかけ

先日WordPressのとあるプラグインをアップデートしたタイミングでアクセスが不安定になった。「DB接続エラー」的なものが表示されていたのでDBが落ちたのかと思ったのだが、DB自体は正常に稼働しているようであった。500が返っていたのでWebサーバも確認したが特に問題はなさそう。となるとプラグインをアップデートしたのが原因としか考えられなかった。

しかし管理画面にもアクセスできない状態ではプラグインを停止することもできない。ファイルを消してしまえば良いのかもしれないが、それだとDBとの整合性が合わなくて別のエラーになりかねない。というわけでDBの値を直接操作することにした。

■ MySQL

MySQLで接続し、”wp_options“テーブルの下記行を確認した。

mysql> select * from wp_options where option_name = 'active_plugins' \G
*************************** 1. row ***************************
   option_id: 33
 option_name: active_plugins
option_value: a:13:{i:0;s:27:"xx1/xx1.php";i:1;s:34:"xx2/xx2.php";i:2;s:43:"xx3/xx3.php";i:3;s:55:"...
    autoload: yes
1 row in set (0.00 sec)

mysql&gt

上記のように”serialize“されたデータが入っていた。この”option_value“を空にしたところ正常にアクセスできるようになった。

もちろんプラグインは全て無効になっているので、アップデートして問題のあったもの以外のプラグインを再度有効化しておいた。

以上。