🥶

リバースプロキシで別ドメインにWordpressをおいた時に起きたことと対策

2024/09/10に公開

やりたかったこと

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/'

最終参考になったサイト:
https://stackoverflow.com/questions/46847892/reverse-proxy-onto-a-wordpress-page

Discussion