【サーバ関連】一つのnginxサーバで複数のドメインを持てるようにする

概要

  • 一つのサーバ上で複数のドメインを設定できます。
  • site-availableでドメインごとに表示するページ設定を作成し、site-enabledにシンボリックリンクを貼ります。
  • WordPressのファイルを置くディレクトリ構成が悪いと、うまく記事を編集できなくなります。

今回やること

 ドメインを2つ使って別のブログやホームページを表示したい!しかしサーバーは一つにしたい。そんな時にどうしたら良いかを解説します。これまでAAAA.comを持っていた人がBBBB.comを追加するイメージです。NGINX, mySQL上にもう一つデータベースを追加して、二つのドメインを持つようにします。

ドメイン追加時の構成

インストールフォルダ構成

 フォルダ構成について試してみたところ、Aの構成ではうまくいきませんでした。設定ファイルを変更しながら、一旦wordpressのインストールまで実施したのですが、結局記事の保存ができないエラーが出てしまい、手詰まりになりました。Bの構成では二つのドメインを使用することができました。Bの構成ですとあまり綺麗でないので、Cの構成にした方が統一感が出てすっきりするかと思います。

試してみたフォルダ構成

DatabaseとWordpressのファイルの作成

 WordPressのインストールは下記の記事を参考にしてください。上記の図のBかCの構成にする必要があるので、var/wwwの下に新しいフォルダを作成して下さい。nginxとmySQLはインストール済みなので、新しいDBの作成とWordpressの最新ファイルのコピー後、wp-config.phpの設定まで行います。

Ubuntu20.04にnginx、mySQL、WordPressをインストールする | エンジニアの所感 (niseng.biz)

 Wordpressのファイルのコピー前に下記のように打てばディレクトリが作成できます。下の例では2行目と4行目でディレクトリを作成して、Wordpressのファイルをtmpフォルダからコピーしてwww-dataに権限を与えています。以下BBBB.comを作成する前提で作業していきます。

$ cd /var/www
$ mkdir BBBB.com
$ cd /BBBB.com
$ mkdir html
$ mv /tmp/wordpress /var/www/BBBB.com/html/
$ chown www-data.www-data /var/www/BBBB.com/html/wordpress/* -R

nginxにサイト情報を設定

 nginxにはサイト情報が登録されている場所があります。/etc/nginx/sites-availableです。もう一つ似たフォルダとしてsites-enabledがあります。sites-availableにサイトの設定ファイルを作成し、sites-enabeldにsites-availableの設定ファイルのリンクを貼り、nginxが起動時にsites-enabledの情報を読み込みに行っています。こうしておくと、sites-enabledのリンクを削除するだけで、サイトの設定ファイルをそのまま残しつつ、サイトを表示するかどうかコントロールすることができます。

 

sites-availableとsites-enabledの構成

サイト設定ファイルの作成方法

 サイトの設定ファイルとして初期設定のdefaultが既に用意されていますので、これをコピーしてサイト設定ファイルを作っていきます。

$ cd /etc/nginx/sites-available
$ sudo cp default BBBB.com
$ sudo vim BBBB.com

 sites-availableのBBBB.comファイルの中身は下記の太字のところを修正します。

server {
        listen 80; #default_server;    #default_serverの記載をコメントアウト
        listen [::]:80; #default_server; #default_serverの記載をコメントアウト

        root /var/www/BBBB.com/html; #rootのところをフォルダ構成に合わせて修正

        # Add index.php to the list if you are using PHP
        index index.php;

        server_name BBBB.com www.BBBB.com; #サーバーネームを設定

        location / {
                try_files $uri $uri/ /index.php?args; #パーマリンク対策
        }

 次にsite-enabledにシンボリックリンクを貼ります。sites-enabledに移動して、site-availableのBBBB.comのリンクをBBBB.comという名前で作成します。

$ cd /etc/nginx/sites-enabled/
$ ln -s /etc/nginx/sites-available/BBBB.com BBBB.com

 念のためnginxの設定に問題がないか下記コマンドで確認しておきましょう。default serverが2つ以上定義されている場合などは問題となります。確認後nginxの再起動もしてしまいましょう。

$ sudo nginx -t  #nginxの設定の確認
$ service nginx restart #nginxの再起動

ドメイン名とIPアドレスの関連付け

 もしもまだ新しいドメイン名がサイトのIPアドレスと関連付けされていない場合は関連付けしましょう。DDNSでなくても構いませんが、DDNSで関連付けする場合は以下の記事が参考になります。

DDNSサービスでドメイン名とIPアドレスを紐づける | エンジニアの所感 (niseng.biz)

WordPressのインストール

 http://BBBB.com/wordpressと入力すればwordpressのインストール画面が表示されるはずです。


(2022/04/28更新)
 myDNSのドメイン登録が間違っていたりしてうまくいかない場合は、sites-availableの中のdefaultファイルを修正し、IPアドレスを使ってwordpressのインストールができます。/etc/nginx/sites-available/defaultを修正します。4行目のrootフォルダを今回追加したフォルダに変更します。

server {
 listen 80 default_server;
 listen [::]:80 default_server;
 root /var/www/BBBB.com/html;
 index index.php index.html index.htm index.nginx-debian.html;
 server_name _;
 location / {
  try_files $uri $uri/ =404;
 }
 location ~ .php$ {
  include snippets/fastcgi-php.conf;
  fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
 }
}

 この設定をすれば、検索バーに「サーバのIPアドレス(192.168.1.2など)」/wordpressと入力すれば、wordpressのインストール画面が表示されるはずです。

WordPressのインストール画面

 

 

 今回はここまでです。お疲れ様でした。

参考リンク

 今回参考にさせて頂いたサイト様です。ありがとうございました。

 https://arakoki70.com/?p=1128

 Nginxのバーチャルホスト設定 – Qiita