5
8

More than 3 years have passed since last update.

wordpressの閲覧URLと管理URLで異なるホストを設定

Last updated at Posted at 2019-01-16

この記事は技術書典5で作成した本の内容を抜粋したものです。

やりたいこと

  • wordpressの閲覧URLと管理URLで異なるホストを設定する
    • セキュリティ的にホストから分けて、管理側に制限かけたいため
  • AWS上のEC2で設定する

kouzeizu.png

manage.example.comblog.example.com は実際に使用するURLに置き換えてください

準備

KUSANAGI for AWSを利用する
https://kusanagi.tokyo/cloud/kusanagi-for-aws/

管理URL設定

  • ALBを設定する
    • リスナーはHTTP,HTTPS。ターゲットにwordpressのEC2
    • 管理画面へアクセス可能なIPだけを設定する
  • Route53を設定する
    • 管理URL(manage.example.com)レコードを作成し、Alias Targetに作成したALBを設定する
  • 準備した KUSANAGIのEC2にログインし、管理側のURL(manage.example.com)で初期設定を行う

この段階で、設定したIPだけ管理用URLで、wordpressにアクセスできる状態になります。

管理URLのSSL化を行う

現在の設定だと無限ループするので、こちら参考
https://qiita.com/backgroundcolor/items/22ff275d0e82d4e5edd7

閲覧URL設定

  • ALBを設定する
    • リスナーはHTTP,HTTPS。ターゲットにwordpressのEC2
    • IP制限なし
  • Route53を設定する
    • 閲覧URL(blog.example.com)レコードを作成し、Alias Targetに作成したALBを設定する
  • WordPressのサイトアドレスを設定
    • WordPressの管理画面( https://manage.example.com )にログインし、サイトアドレス (URL)を blog.example.com に変更

wp-config.phpで変更も可

wp-config.php
define('WP_SITEURL','https://blog.example.com');

nginxの設定

  • nginxの設定ファイルを閲覧URL用にコピー
$ cd /etc/nginx/conf.d/
$ sudo cp xxxx_http.conf xxxx_blog_http.conf
  • 閲覧URL用の設定ファイル(xxxx_blog_http.conf)を開き3箇所修正
server_nameの変更
  server_name blog.example.com;
/wp-adminのリダイレクトをコメントアウト
  #rewrite /wp-admin$ $scheme://$host$uri/ permanent;
wp-login.php、/wp-adminは404を返すように変更
  location ~* /wp-login\.php|/wp-admin/((?!(admin-ajax\.php|images/)).)*$ {
    return 404;
  }
  • nginxを再起動し、blog.example.com でアクセスできることを確認
  • 閲覧URLでは管理画面(blog.example.com/wp-admin)が404になることも確認
nginx再起動
$ sudo kusanagi nginx

WordPressの設定変更

この段階ではテンプレートで埋め込まれるURLが管理URLとなったままなので
管理URL -> 閲覧URLに置換するため
テーマファイルのfunction.phpに追記します。

/wp-content/themes/xxx/function.php
function replace_site_url($url){
  return str_replace(site_url(), home_url(), $url);
};
add_filter('includes_url', 'replace_site_url');
add_filter('content_url', 'replace_site_url');
add_filter('script_loader_src', 'replace_site_url');
add_filter('get_search_form', 'replace_site_url');
add_filter('get_the_guid', 'replace_site_url');
add_filter('wp_calculate_image_srcset_meta', '__return_false');
add_filter('comments_open', '__return_false');
add_filter('pings_open', '__return_false');

remove_action('wp_head', 'rsd_link');
remove_action('wp_head', 'wp_generator');

// 画像パス変更
add_filter('wp_get_attachment_url', function ($url){
  if (preg_match('/^http(s)?:\/\/[^\/\s]+(.*)$/', $url, $match)) {
    $url = $match[2];
  }
  return $url;
});

以上で設定完了です

2020.04.27 追記
上記の設定をしていると、 ver5以上のwordpressの投稿画面でエラーとなるようなので、対策を追記した

wordpressの管理と公開で異なるドメインにしたらWP REST APIがエラーになる場合の対処
https://qiita.com/backgroundcolor/items/6e925625ccb843de4342

5
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
8