タイトル通りで、httpsでオートスケーリングするときに、wp-adminがリダイレクトループしてしまう。
ついでにいうとテンプレートディレクトリのURLもhttpsじゃなくてhttpになってしまう。
原因としてはオートスケーリングのためのロードバランサーの仕組みだったりするわけで。
なので今日はそれを解決するためのお話をば。
wordpressはhttpsでアクセスされたときに、$_SERVER['HTTPS']を見てhttpsかどうかを判断する。
$_SERVER['HTTPS'] = 1になる条件としては、そのサーバに対してポート443でアクセスしたときだけだったりする。
けどそれだったらhttpsだしっていう話になりそうなんだけど、
ロードバランサーを使うと、ロードバランサーまでは443だけど、ロードバランサーからサーバまでは80で繋がっているという感じ。
wordpressが置いてあるサーバには80でアクセスしていることになるので、$_SERVER['HTTPS'] = 0ということになってしまう。
ということでこれは困るので、これを解決するためには、wp-configに下記のものを書く必要がある。
/* 認証用ユニークキーの上あたり */ define('FORCE_SSL_LOGIN', true); if(!empty($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https'){ $_SERVER['HTTPS']='on'; } /**#@+ * 認証用ユニークキー * * それぞれを異なるユニーク (一意) な文字列に変更してください。 * {@link https://api.wordpress.org/secret-key/1.1/salt/ WordPress.org の秘密鍵サービス} で自動生成することもできます。 * 後でいつでも変更して、既存のすべての cookie を無効にできます。これにより、すべてのユーザーを強制的に再ログインさせることになります。 * * @since 2.6.0 */
ってな感じ。
ロードバランサーからサーバにアクセスする際に、$_SERVER['HTTP_X_FORWARDED_PROTO']というのがつくので、それを見てonにしましょう的な。
ちなみにdefine('FORCE_SSL_LOGIN', true)はwp-adminに接続するときは、強制的にHTTPSにするよ的な感じ。
ってな感じでやってあげれば解決できる的な。
もちろんDBのwp_optionのsiteurlとhomeもhttpsにしないとダメだよ的な。
0 件のコメント:
コメントを投稿