WordPress
SSL
管理画面
302

SSL対応後のWordpress管理画面で発生した無限リダイレクトループの修正方法

More than 1 year has passed since last update.

WordpressでSSL対応させました。サイトアクセスの速度を上げようと、NginxでProxyキャッシュを効かせています。
サイトへのアクセスは問題なくできましたが、管理画面にアクセスすると無限リダイレクトループに陥ってしまいました。
以下、対応したことを記載しました。

リバースプロキシを使用している場合のSSL通信

SSLによるログインと管理画面へのアクセスを強制するためには、wp-config.php に

wp-config.php
define('FORCE_SSL_ADMIN', true);

を設定する必要があります。

ただ、リバースプロキシを使用している場合は、このオプションを設定するとすべてのリクエストが無限リダイレクトループに陥ります。これを避けるためには、

wp-config.php
if ( ! empty( $_SERVER['HTTP_X_FORWARDED_PROTO'] ) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https' ) {
       $_SERVER['HTTPS']='on';
}

という記述により、HTTP_X_FORWARDED_PROTO ヘッダーを認識するようにWordpressを構成する必要があります。

nginxにproxy_set_header X-Forwarded-Proto httpsを追加設定

HTTP_X_FORWARDED_PROTO をwordpressで認識するために、proxy_set_header に以下の一行追加します。

nginx.conf
proxy_set_header X-Forwarded-Proto https;

wp-config.php の注意点

ここで注意したいのは、wp-config.php における記述場所です。

wp-config.php
/* That's all, stop editing! Happy blogging. */

よりも上に記述する必要があります。この記述よりも下に記載すると、デバッグモードで

Notice: Constant FORCE_SSL_ADMIN already defined in

というエラーメッセージが表示され、

「このページにアクセスするための権限がありません。」

と、無限ループは解消されますが、管理画面へはアクセス出来ない状態が続きます。

以上の修正で管理画面へアクセスできるようになりました。

参考にしたサイト

Wordpress Codex 「管理画面での SSL 通信」

StackExchange 「Constant FORCE_SSL_LOGIN already defined」