Tech Blog

Ubuntu環境でNginxのバーチャルサーバーの設定

2021-02-18

nginxでは、apacheのVirtualhostと同じ様に、 1つのサーバー内で複数のサーバがあるように見せる設定 が可能です。

基本的には、httpディレクティブの中に複数のserverディレクティブを記述すればOKです。

複数のサイト管理する際には、サイトごとにファイルを分けたほうがよいです。

デフォルトのserverディレクティブ設定について

Nginxをインストールした際、デフォルトでserverディレクティブの設定が行われています。

Nginxのメイン設定ファイルは/etc/nginx/nginx.confです。

このnginx.conf内では、httpブロック内でinclude/etc/nginx/sitesenabled/*; をインクルードしています。

このsitesenabledは、sites-available/defaultのシンボリックリンクとなっています。

ls -li /etc/nginx/sites-enabled/
total 0
773067 lrwxrwxrwx 1 root root 34 Feb 14 13:59 default -> /etc/nginx/sites-available/default

/etc/nginx/sites-available/default内にserverブロックの設定が記載されています。

sudo vim /etc/nginx/sites-available/default
root /var/www/html;
index index.html index.htm index.nginx-debian.html;
server_name _;

ここのserver_nameの箇所に追記することもできますが、

serverディレクティブに記載する場合、 defaultバーチャルホストを設定する別ファイルに追記するほうが管理が楽なため、

defaultは利用しません。

公開ディレクトリの作成

/var/www/html/の下に公開するディレクトリを作成していきます。

cd /var/www/html/
sudo mkdir test.example.com
sudo chown www-data:www-data test.example.com/
sudo chmod 775 test.example.com/
cd test.example.com/
sudo vim index.html

index.htmlには適当に文字を記述します。

sudo chown www-data:www-data index.html

serverディレクティブの記述場所

インストール時の設定でデフォルトで読み込まれる /etc/nginx/sites-available/default 内で、Virtual Hostを設定する場合の説明が書いてあります。

# Virtual Host configuration for example.com
#
# You can move that to a different file under sites-available/ and symlink that
# to sites-enabled/ to enable it.

sites-available/の下にサイトごとのファイルを設定ファイルを作成し、 sites-enabled/の下にシンボリックリンクを作成しましょう。

sudo vim /etc/nginx/sites-available/test.example.com
server {
       listen 80;
       listen [::]:80;
 
       server_name test.example.com;
 
       root /var/www/html/test.example.com;
       index index.html;
 
       location / {
               try_files $uri $uri/ =404;
       }
}

シンボリックリンクの作成

cd /etc/nginx/sites-enabled/
sudo ln -s /etc/nginx/sites-available/test.eexample.com test.eexample.com

確認と設定反映

sudo nginx -t
sudo systemctl restart nginx

補足

ちなみに、sites-enabled/etc/nginx/nginx.confでincludeされています。

include /etc/nginx/sites-enabled/*;