🥶
リバースプロキシで別ドメインにWordpressをおいた時に起きたことと対策
やりたかったこと
Wordpressをxyz.com/blog/
に設置する。
リバースプロキシをかけて、
abc.com/blog/
にアクセスした際、
xyz.com/blog/
にあるWordpressのコンテンツを表示する。
xyz.com/blog/
はIP制限かけて管理者の事務所からしか見れなくする。
起きた問題
ユーザー側のwordpressの表示はうまくいった。
記事内の画像が404
一部記事の画像URLがIP制限の影響で見れなくなったため、DBでxyz.com/column/
のアドレスになっていたものをabc.com/column/
に置き換え。
UPDATE wp_posts SET post_content=REPLACE(post_content,"xyz.com","abc.com");
管理画面のページ送りなどのURLがxyz.comのまま
これは、wp-config.phpの設定に漏れがあったことが原因でした。
最終的に以下の設定をすることでうまくいきました。
define('.COOKIE_DOMAIN.', 'abc.com');
define('.SITECOOKIEPATH.', '.');
if(isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {
$list = explode(',',$_SERVER['HTTP_X_FORWARDED_FOR']);
$_SERVER['REMOTE_ADDR'] = $list[0];
}
define( 'WP_HOME', 'https://abc.com/column/' );
define( 'WP_SITEURL', 'https://abc.com/column/' );
$_SERVER['HTTP_HOST'] = 'abc.com';
$_SERVER['REMOTE_ADDR'] = 'https://abc.com/column/';
$_SERVER[ 'SERVER_ADDR' ] = 'abc.com';
if ($_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https')
$_SERVER['HTTPS']='on';
ポイント
調べると、「WP_HOME」と「WP_SITEURL」を設定すれば良いという情報が出てきますが、サーバーの状況によってはそれだけでは足らず、「HTTP_HOST」「REMOTE_ADDR」が必要でした。
(これの設定が漏れていたことで管理画面内ページ送りなどに影響が出た)
またググると以下のような記述が出てきます
$_SERVER['HTTP_HOST'] = $_SERVER['HTTP_X_FORWARDED_HOST'];
$_SERVER['REMOTE_ADDR'] = $_SERVER['HTTP_X_FORWARDED_FOR'];
が、abc.com/blog/
側の環境設定ではこの設定値ではうまくいかなかったため、かなり悩みました。
最終的に以下の通りドメインを直接設定することで解決しました。
['HTTP_HOST'] = 'abc.com'、
['REMOTE_ADDR'] = 'https://abc.com/column/'
最終参考になったサイト:
Discussion