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のシンボリックリンクとなっています。

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

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

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

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

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

defaultは利用しません。

公開ディレクトリの作成

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

shell
1cd /var/www/html/
2sudo mkdir test.example.com
3sudo chown www-data:www-data test.example.com/
4sudo chmod 775 test.example.com/
5cd test.example.com/
6sudo vim index.html

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

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

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

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

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

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

shell
1sudo vim /etc/nginx/sites-available/test.example.com
text
1server {
2 listen 80;
3 listen [::]:80;
4
5 server_name test.example.com;
6
7 root /var/www/html/test.example.com;
8 index index.html;
9
10 location / {
11 try_files $uri $uri/ =404;
12 }
13}

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

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

確認と設定反映

shell
1sudo nginx -t
2sudo systemctl restart nginx

補足

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

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

Tech Blog

avatar

ソフトウェアエンジニア。1989年生まれ大阪府岸和田市在住のフリーランス。PHP、バックエンド開発が得意。テニス、フットサル、だんじり、ケツメイシ、競馬、プログラミングが好き!最近はWebフロントエンド沼にハマってます!

Copyright © 2023. Junpeko5's Tech Blog