1台のサーバーで複数のWordPressサイトを稼働させる方法(Nginx編)

1台のサーバーで複数のWordPressサイトを稼働させるための方法の一つとして「Webサーバーソフトウェア(Nginx)のバーチャルホスト機能」があります。

ここでは、Nginxでバーチャルホストを設定し、2つのWordPressサイトを稼働させる手順について紹介します。

また、最後に「WordPressのマルチサイト機能」を使わなかった理由についても書いていますので、参考にしてみてください。

Nginxのバーチャルホスト設定手順

以下のような環境でバーチャルホストを設定します。

WordPress 4.9.4
Nginx+FastCGIcache 1.13.10
PHP 7.2.3
MariaDB 10.2.13
CentOS 7.4
Memo

既存でWordPressサイトが稼働しており、追加サイト用のドメイン取得やDNSサーバ設定も完了していることを前提とします。

nginx.confへの追記

「nginx.conf」に追加サイト用のFastCGIキャッシュパスを追記します。
FastCGIキャッシュパスとキーゾーン名は、サイトごとに設定する必要があります。

なお、FastCGIキャッシュを使用していない場合は、追記の必要はありません。

fastcgi_cache_path /var/cache/nginx/<追加サイト名> keys_zone=<キーゾーン名>:10m levels=1:2 inactive=7d max_size=1000m;

conf.dディレクトリにバーチャルホスト用ファイルを作成

追加サイト用のファイルを「/etc/nginx/conf.d/」に作成します。

基本は、既存サイトの設定をコピーし、以下の部分を修正・追記します。

server {
  server_name <追加サイト名>;
  root <ドキュメントルートへのパス>;
  ・・・
  # ログをサイトごとに分けるときは追記
  access_log /var/log/nginx/<追加サイト名>.access.log;
  error_log /var/log/nginx/<追加サイト名>.error.log;
  ・・・
  location ~ \.php$ {
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    fastcgi_cache <キーゾーン名>;
  }
}

デフォルトサーバー設定

バーチャルホスト環境の場合、想定外の名前でサイトへアクセスされないように「デフォルトサーバー」を設定します。設定方法は以下の記事を参照してください。

Nginx:default_serverを指定して想定外のアクセスを遮断
Nginxで名前ベースのバーチャルホストを構成している環境では、要求されたドメイン名に応じてそれぞれのサイトに振り分けられますが、想定外...

動作確認

アクセス確認

既存のサイトと追加サイトの双方へ指定した名前でアクセスできること、設定ファイルに記述してしてない名前(IPアドレス)でサイトへアクセスできないことを確認します。

ログファイル確認

ログの出力をサイトごとに分けた場合は、サイトごとにログが出力されていることを確認します。

WordPressのマルチサイト機能を使わなかった理由

WordPressのマルチサイト機能は、1つの管理画面で複数のWordPressサイトを集中管理できる便利な機能です。上に記載しているNginxのバーチャルホスト機能とどちらにしようか迷いましたが、以下の理由からWordPressのマルチサイト機能は使わないことにしました。

  • 「マルチサイト」機能についての情報が少ない
    WordPressに関連する情報は、そのほとんどがシングルサイトを前提とした情報で、マルチサイトにも対応している情報は圧倒的に少ないです。Wordpressを運営する上で、情報量の多さは重要です。(もちろん、自力で解決する技量があれば別ですが)
  • マルチサイトに対応していないプラグインがある
    バックアップ系やキャッシュ系のプラグインは、マルチサイトに対応していないものが結構あります。どのプラグインがマルチサイトに対応しているか調べるのも面倒です。

まとめ

1台のサーバーで複数のサイトを稼働させた場合、サーバーが止まると、すべてのサイトが停止してしまうリスクはありますが、サーバーリソースの有効活用という意味ではメリットが十分あるのではないでしょうか。