あいしんくいっとオススメ商品レビュー

WordPressで複数ドメインを管理する方法【Nginxでバーチャルホスト編】

この記事には広告を含む場合があります。

記事内で紹介する商品を購入することで、当サイトに売り上げの一部が還元されることがあります。

ども。あいしんくいっと(@ithinkitnet)です。

「もっとドメインをいっぱい取得して、サイトをガンガン増やしたいなー」と思う今日この頃。
追加でレンタルサーバを借りてもいいんだけど月々500円とは言え、年間で考えると6,000円、高けぇ。。。
んー。バカにならんなぁー;;

ってことで、1台のサーバでWordPressを使ってサイトをガンガン量産してやろうって考えました。
もちろん、独自ドメインでね!

で、調べてみたところ、どうやらWordPrssには「マルチサイト」と呼ばれる機能があり、この機能を用いることにより複数サイト運用することが可能らしい。
なお、WordPressで複数サイト運用する方法は以下の3つあるとのこと。

  • サブディレクトリ型
  • サブドメイン型
  • 複数ドメイン型

ふむふむ。
というワケで今回は「サブドメイン型」を利用してWordPressで複数サイト運用する方法を試してみたいと思います。

と思っていたのですが、WordPressのマルチサイト機能を試してみたところ上手く動作しないし、難しそうだったので、Nginxのバーチャルホスト機能を使ってWordPressを複数インストールする方針に急きょ変更しましたw

構成イメージは以下の通りです。
s-715bad97-e61c-47dd-872d-f1b870b98205201606110926

※前提としてドメインは取得済み、DNSサーバの設定も完了していることを前提とします。

以下、導入済みのミドルウェア

  • Nginx 1.10.1
  • php-fpm 7.0.7-1
  • MariaDB-server-10.1.14-1

あと、FastCGIを使ったキャッシュで高速化を図っています。

ドメイン設定(Route53編)

ドメインを2つ取得し、どちらのドメインへアクセスしても同様のサーバにアクセス出来るように設定しました。
私の場合はAWSのRoute53にドメイン管理を移管しているので、Route53で以下の設定を行っています。

プライバシー確保のため、雑にモザイクw
・ドメインA
s-1af66454-dd78-4207-929c-45e4173c445c201606110926
・ドメインB
s-681eb49d-1c4f-4185-beec-60b006a68576201606110926
ドメイン名は別々でも同一のIPにアクセスが行くように設定してあります。
IPが一つのため、「SEO的にどうなの?」といった話もあるみたいだけど気にしないw

WordPress設定

では、WordPressでのマルチサイト設定を行います。
wp-config.phpの以下の部分を編集します。
define(‘WP_ALLOW_MULTISITE’, true);
編集が必要なのはここまでです ! WordPress でブログをお楽しみください。
※編集が必要なのは~の上に記載
WordPress管理コンソールにログインし、ツールより「ネットワークの設置」をクリックします。

当初はWordPressのマルチサイト機能を使って複数サイトを作ってやろうと思っていたのですが、Nginxでバーチャルホストして複数サイト作る方針に変更しました。
その方が簡単かな、と思ったので。

Nginxでバーチャルホスト設定

nginx.confとconf.d以下にある設定ファイルにバーチャルホスト設定を記載します。

・nginx.conf
ポイントはfastcgiのキャッシュパスでした。
サイトが増えるごとに増えて行きます。
それ以外は特に変更点はありません。

~追記~
fastcgi_cache_path /var/run/nginx-cache/site1 levels=1:2 keys_zone=SITE1:4m inactive=1d max_size=50m;
fastcgi_cache_path /var/run/nginx-cache/site2 levels=1:2 keys_zone=SITE2:4m inactive=1d max_size=50m;
fastcgi_cache_key "$scheme$request_method$host$request_uri";
fastcgi_cache_use_stale error timeout invalid_header http_500;
~追記終わり~

・conf.d以下の設定ファイル
site1とsite2それぞれの設定を並べて記載しています。
ポイントとしては「nginx.confで定義したfastcgiの設定をサイト毎に設定する」といったところでしょうか。

server {
# サーバーのデフォルトTCPポートです。
listen 80;

client_max_body_size 20m;

# サーバー名を設定します。
server_name site1.net;

# ログファイル名を設定します。
access_log /var/log/nginx/site1.net/access.log;
error_log /var/log/nginx/site1.net/error.log;

# ドキュメントルートディレクトリを設定します。
root /var/www/html/site1/wordpress;
# index file タイプの優先順を設定します。
index index.php index.html index.htm;

location / {
try_files $uri $uri/ /index.php?$args;

# PHP FPM との接続を行うため 拡張子phpに対して処理します。
location ~ \.php$ {
fastcgi_index index.php;
fastcgi_pass unix:/var/lib/php/php-fpm.sock;
fastcgi_buffer_size 128k;
fastcgi_buffers 4 256k;
fastcgi_busy_buffers_size 256k;
fastcgi_temp_file_write_size 256k;
fastcgi_param SCRIPT_FILENAME /var/www/html/site1/wordpress/$fastcgi_script_name;
fastcgi_cache SITE1;
fastcgi_cache_valid 200 2h;
fastcgi_cache_valid 302 2h;
fastcgi_cache_valid 301 4h;
fastcgi_cache_valid any 1m;
include fastcgi_params;
}
}

location ~ .*\.(html?|jpe?g|gif|png|css|js|ico|woff) {
access_log off;
expires 10d;
}

location = /robots.txt { access_log off; log_not_found off; }

location ~ /\. { deny all; access_log off; log_not_found off; }

}

server {
# サーバーのデフォルトTCPポートです。
listen 80;

client_max_body_size 20m;

# サーバー名を設定します。
server_name site2.net;

# ログファイル名を設定します。
access_log /var/log/nginx/site2.net/access.log;
error_log /var/log/nginx/site2.net/error.log;

# ドキュメントルートディレクトリを設定します。
root /var/www/html/site2/wordpress;

location / {
# index file タイプの優先順を設定します。
index index.php index.html index.htm;

try_files $uri $uri/ /index.php?$args;

# PHP FPM との接続を行うため 拡張子phpに対して処理します。
location ~ \.php$ {
fastcgi_index index.php;
fastcgi_pass unix:/var/lib/php/php-fpm.sock;
fastcgi_buffer_size 128k;
fastcgi_buffers 4 256k;
fastcgi_busy_buffers_size 256k;
fastcgi_temp_file_write_size 256k;
fastcgi_param SCRIPT_FILENAME /var/www/html/site2/wordpress/$fastcgi_script_name;
fastcgi_cache SITE2;
fastcgi_cache_valid 200 2h;
fastcgi_cache_valid 302 2h;
fastcgi_cache_valid 301 4h;
fastcgi_cache_valid any 1m;
include fastcgi_params;
}
}

location ~ .*\.(html?|jpe?g|gif|png|css|js|ico|woff) {
access_log off;
expires 10d;
}

location = /robots.txt { access_log off; log_not_found off; }

location ~ /\. { deny all; access_log off; log_not_found off; }

}

にしても、見事にインデントがふっ飛んでしまったなぁー(笑)
表記した設定は適当なのであくまで参考、真似しないように・・・w

複数のサイトを1台のサーバに集約することでコストパフォーマンスは断然良くなるのですが、サーバがダウンすると全てのサイトがダウンしてしまうという、、、、。コストとリスクはトレードオフw

バーチャルホスト設定確認

では、確認していきます。

・アクセス確認
site1へアクセス。
はい、問題なくアクセス出来ました。
s-0d1d3068-0c32-4000-8cbc-1a992e7e6d5a201606110926

続いてsite2へアクセス。
こちらも問題なくアクセス出来ました。
s-66f61964-f7f6-4695-99e4-e8bf7367b4ab201606110926
どちらも~.netとなってますが、もちろんドメインは別です。
分かりやすいようにテーマを別々にしています。

・ログ確認
個別にログが出力されていることを確認します。

# ls /var/log/nginx/*
/var/log/nginx/site1.net:
access.log error.log

/var/log/nginx/site2.net/:
access.log error.log

別々に出力出来ているのでOKですね。

このようにNginxのバーチャルホスト機能を使えば、複数のWordPressで運用することが可能となります。
複数ドメインを一つのWordPressで管理出来るマルチサイト機能も気にはなりますが、いったんはこの方法で運用していきたいと思います。

一つのサーバで複数ドメインは運用上問題は無いのか?

今回、このような構成を試したのも運用コストをかけたくないがため・・・。
SEOをはじめ、弊害が無いのか気になったので調べてみました。

Point1. 一つのサーバで複数ドメインを管理するリスク
所詮、一つのサーバなのでダウンすると全てのサイトが駄目になるのは当たり前ですね。
あと、SEO的には特に問題ないとのこと。
物理IPが一つなので、少なからず影響はありそうなものの、小規模サイトなら問題なさそう。

Point2. 実際、一つのサーバにどの位詰め込めるものなのか?
中にはこんな強者も。

私は、年間5千円のサーバーで、通販サイト50くらい、Wordpressも50くらい、合わせて100サイトを運用していますが、問題はありません。

そうそう、こんな話を聞きたかった♪
本当かウソかは別にして、実績にもとづく回答はすごく納得出来るし、とても参考になりますね。
にしても年間5,000円って安いなー。
ちなみに、このブログ動いてるレンタルサーバは年間6,000円。
ホント、オススメなので良かったらこの記事でも♪
Check! DTIのServerMan@VPSを使い始めて3ヶ月、使い心地を書いてみたいと思う。

というワケで、今後もNginxのバーチャルホストでガシガシブログを構築していきたいと思います。

追記:追加で4つドメイン取得したので、それに合わせてWordpressも4つインストール(計6個)しましたが、特に問題なく稼働出来ています。
まぁ、現状はどのサイトもアクセス無い状態だから、問題出るとしたらこれからだけど・・・。

以上、あいしんくいっとでした(‘ω’)ノ

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)