1台のサーバーで複数サイトを運用する方法
1台のVPSで十数のサイトをホストする方法として、ディレクトリ構成、設定とユーザーの分離、共有証明書、ティア別の負荷見積もりを解説します。
更新日 2026年8月23日
1つのパブリックIPv4アドレスで、いくつものドメインを運用できます。Webサーバーが Host ヘッダーでリクエストを振り分けるためです。制限となるのはアドレス数ではなく、ご利用のティアのメモリとディスクです。
レイアウト
テンプレートは1つに統一してください。そうしないと半年後には、どのサイトが誰のものか判別できなくなります。
/var/www/example.ru/public
/var/www/example.ru/logs
/var/www/shop.ru/public
/var/www/shop.ru/logs
サイトごとに個別の設定ファイルを用意します。/etc/nginx/sites-available/<domain> に置き、sites-enabled 内のシンボリックリンクで有効化します。こうすれば、サイトの無効化はシンボリックリンクを1つ削除してリロードするだけになり、共有ファイルの中から該当箇所を探し回らずに済みます。
設定
server {
listen 80;
server_name example.ru www.example.ru;
root /var/www/example.ru/public;
index index.html index.php;
access_log /var/www/example.ru/logs/access.log;
}
未知のドメイン用に「catch-allサイト」も設定してください。そうしないと、ご利用のアドレスを指す第三者のドメインに対して、アルファベット順で最初の設定が開いてしまいます。
server {
listen 80 default_server;
server_name _;
return 444;
}
権限の分離
サイトが別々のクライアントや別々のプロジェクトのものである場合は、ユーザーを共有しないでください。1つのスクリプトの穴が、すべてへのアクセスにつながります。
useradd -r -d /var/www/example.ru -s /usr/sbin/nologin site-example
chown -R site-example:www-data /var/www/example.ru
chmod 750 /var/www/example.ru
PHPでは、サイトごとに専用の user と listen を持つFPMプールを作成します。詳しくは PHP-FPM をご覧ください。データベースも分離してください。ユーザーと権限 を参照してください。
証明書
certbotを1回実行するだけで、複数のドメインをまとめてカバーできます。
certbot --nginx -d example.ru -d www.example.ru -d shop.ru -d www.shop.ru
更新も共有で、タイマーは1つです。詳細は Let's Encrypt をご覧ください。
サイトはいくつ収まるか
ドメイン数ではなく、メモリで数えてください。静的サイトはほとんどコストがかかりませんが、データベースを伴うCMSサイトは数百メガバイトを消費します。
| ティア | メモリ | 目安 |
|---|---|---|
| VDS-1 (2 GB) | 2 GB | CMSサイト1~2件、または静的サイト十数件 |
| VDS-2 (4 GB) | 4 GB | CMSサイト3~5件 |
| VDS-3 (8 GB) | 8 GB | CMSサイト8~12件 |
ディスクも有限です。VDS-1では40 GB、VDS-6では250 GBです。プランはアップグレードのみ可能で、支払い済み期間の残り日数分の差額をお支払いいただきます。
よくある間違い
| 症状 | 原因 |
|---|---|
| すべてのドメインで同じサイトが表示される | server_name が一致せず、最初のブロックがリクエストを処理した |
| すべてのサイトのログが1つのファイルに出力される | サイトブロックで access_log が設定されていない |
| 1つのサイトがすべてをダウンさせた | 制限のない共有PHP-FPMプール |
| ディスク容量が不足する | ログとバックアップが同じディスク上にある — logrotate を設定してください |
新しいサイトを追加する前に、
/hosting/vds/m/<id>のパネルの「概要」で過去1週間のメモリグラフを確認してください。ピークがすでに上限に達している場合、新しいサイトはクラッシュの結果ではなく原因になります。