🦔

EC2にNginxをインストールしてVirtualHostで複数ドメインでアクセスしてみた

2024/01/18に公開

この記事は閉鎖済みの個人で運営していたサイトで2023/10/7に公開したものを移記したものです(移記にあたり多少編集しています)。

VirtualHostとは

1台のサーバで複数のサイトやドメインを扱う技術のことです。
今回行うのは2つのドメインは同じEC2インスタンスを指しているけど、アクセスするとそれぞれのドメインで異なるHTMLコンテンツが返却されようにします。

EC2起動

まずは EC2 インスタンスを起動します。
今回は以下の内容で起動しました。

  • AmazonLinux2023(al2023-ami-2023.2.20231002.0-kernel-6.1-x86_64)
  • パブリックサブネットで起動し、パブリックIPアドレスを付与
  • SessionManagerで接続できるようにIAMロールをアタッチ

Nginxインストール

Session Manager を利用して起動したインスタンスに接続し、Nginx をインストールします。
まずはアップデート。

sh-5.2$ sudo dnf -y update
Last metadata expiration check: 0:03:16 ago on Sat Oct  7 11:32:24 2023.
Dependencies resolved.
Nothing to do.
Complete!

次にNginxをインストールします。

sh-5.2$ sudo dnf -y install nginx
Last metadata expiration check: 0:03:36 ago on Sat Oct  7 11:32:24 2023.
Dependencies resolved.
=================================================================================================================================================
 Package                               Architecture             Version                                      Repository                     Size
=================================================================================================================================================
Installing:
 nginx                                 x86_64                   1:1.24.0-1.amzn2023.0.1                      amazonlinux                    32 k
Installing dependencies:
 generic-logos-httpd                   noarch                   18.0.0-12.amzn2023.0.3                       amazonlinux                    19 k
 gperftools-libs                       x86_64                   2.9.1-1.amzn2023.0.2                         amazonlinux                   309 k
 libunwind                             x86_64                   1.4.0-5.amzn2023.0.2                         amazonlinux                    66 k
 nginx-core                            x86_64                   1:1.24.0-1.amzn2023.0.1                      amazonlinux                   586 k
 nginx-filesystem                      noarch                   1:1.24.0-1.amzn2023.0.1                      amazonlinux                   9.0 k
 nginx-mimetypes                       noarch                   2.1.49-3.amzn2023.0.3                        amazonlinux                    21 k

Transaction Summary
=================================================================================================================================================
Install  7 Packages

Total download size: 1.0 M
Installed size: 3.4 M
Downloading Packages:
(1/7): nginx-1.24.0-1.amzn2023.0.1.x86_64.rpm                                                                    402 kB/s |  32 kB     00:00
(2/7): libunwind-1.4.0-5.amzn2023.0.2.x86_64.rpm                                                                 699 kB/s |  66 kB     00:00
(3/7): nginx-mimetypes-2.1.49-3.amzn2023.0.3.noarch.rpm                                                          717 kB/s |  21 kB     00:00
(4/7): gperftools-libs-2.9.1-1.amzn2023.0.2.x86_64.rpm                                                           4.9 MB/s | 309 kB     00:00
(5/7): nginx-core-1.24.0-1.amzn2023.0.1.x86_64.rpm                                                               3.7 MB/s | 586 kB     00:00
(6/7): nginx-filesystem-1.24.0-1.amzn2023.0.1.noarch.rpm                                                         480 kB/s | 9.0 kB     00:00
(7/7): generic-logos-httpd-18.0.0-12.amzn2023.0.3.noarch.rpm                                                     214 kB/s |  19 kB     00:00
-------------------------------------------------------------------------------------------------------------------------------------------------
Total                                                                                                            3.6 MB/s | 1.0 MB     00:00
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transaction
  Preparing        :                                                                                                                         1/1
  Running scriptlet: nginx-filesystem-1:1.24.0-1.amzn2023.0.1.noarch                                                                         1/7
  Installing       : nginx-filesystem-1:1.24.0-1.amzn2023.0.1.noarch                                                                         1/7
  Installing       : nginx-mimetypes-2.1.49-3.amzn2023.0.3.noarch                                                                            2/7
  Installing       : generic-logos-httpd-18.0.0-12.amzn2023.0.3.noarch                                                                       3/7
  Installing       : libunwind-1.4.0-5.amzn2023.0.2.x86_64                                                                                   4/7
  Installing       : gperftools-libs-2.9.1-1.amzn2023.0.2.x86_64                                                                             5/7
  Installing       : nginx-core-1:1.24.0-1.amzn2023.0.1.x86_64                                                                               6/7
  Installing       : nginx-1:1.24.0-1.amzn2023.0.1.x86_64                                                                                    7/7
  Running scriptlet: nginx-1:1.24.0-1.amzn2023.0.1.x86_64                                                                                    7/7
  Verifying        : nginx-core-1:1.24.0-1.amzn2023.0.1.x86_64                                                                               1/7
  Verifying        : nginx-1:1.24.0-1.amzn2023.0.1.x86_64                                                                                    2/7
  Verifying        : libunwind-1.4.0-5.amzn2023.0.2.x86_64                                                                                   3/7
  Verifying        : gperftools-libs-2.9.1-1.amzn2023.0.2.x86_64                                                                             4/7
  Verifying        : nginx-mimetypes-2.1.49-3.amzn2023.0.3.noarch                                                                            5/7
  Verifying        : generic-logos-httpd-18.0.0-12.amzn2023.0.3.noarch                                                                       6/7
  Verifying        : nginx-filesystem-1:1.24.0-1.amzn2023.0.1.noarch                                                                         7/7

Installed:
  generic-logos-httpd-18.0.0-12.amzn2023.0.3.noarch gperftools-libs-2.9.1-1.amzn2023.0.2.x86_64 libunwind-1.4.0-5.amzn2023.0.2.x86_64
  nginx-1:1.24.0-1.amzn2023.0.1.x86_64              nginx-core-1:1.24.0-1.amzn2023.0.1.x86_64   nginx-filesystem-1:1.24.0-1.amzn2023.0.1.noarch
  nginx-mimetypes-2.1.49-3.amzn2023.0.3.noarch

Complete!

インストール・バージョン確認

sh-5.2$ nginx -v
nginx version: nginx/1.24.0

Nginx起動

Nginx を起動し、デフォルトページが返されるか確認します。

sh-5.2$ sudo systemctl start nginx

sh-5.2$ systemctl status nginx
● nginx.service - The nginx HTTP and reverse proxy server
     Loaded: loaded (/usr/lib/systemd/system/nginx.service; disabled; preset: disabled)
     Active: active (running) since Sat 2023-10-07 11:38:15 UTC; 9s ago
    Process: 25606 ExecStartPre=/usr/bin/rm -f /run/nginx.pid (code=exited, status=0/SUCCESS)
    Process: 25607 ExecStartPre=/usr/sbin/nginx -t (code=exited, status=0/SUCCESS)
    Process: 25608 ExecStart=/usr/sbin/nginx (code=exited, status=0/SUCCESS)
   Main PID: 25609 (nginx)
      Tasks: 2 (limit: 1114)
     Memory: 2.2M
        CPU: 56ms
     CGroup: /system.slice/nginx.service
             ├─25609 "nginx: master process /usr/sbin/nginx"
             └─25610 "nginx: worker process"
sh-5.2$ curl http://localhost
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
html { color-scheme: light dark; }
body { width: 35em; margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif; }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>

<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>

<p><em>Thank you for using nginx.</em></p>
</body>
</html>

正常に起動していることを確認できました。

VirtualHostの設定

次に、ドメインを用意します。
私はすでにドメインを持っているので、サブドメインを2つ作成し、両方のサブドメインで、AレコードでEC2のパブリックIPアドレスを設定します。
設定後、digやnslookupコマンド名前解決できるか確認します。

ドメインの準備ができたら、2つのドメインを利用して同一のEC2インスタンスにアクセスし、異なる内容のページが返却されることを確認します。
まずは Nginx の設定を、各ドメインでアクセスする際に異なるページを表示する設定に変更します。

    server {
        listen       80;
        listen       [::]:80;
        server_name  sub1.xxx.com;
        root         /usr/share/nginx/html;

        # Load configuration files for the default server block.
        include /etc/nginx/default.d/*.conf;

        error_page 404 /404.html;
        location = /404.html {
        }

        error_page 500 502 503 504 /50x.html;
        location = /50x.html {
        }
    }
    server {
        listen       80;
        listen       [::]:80;
        server_name  sub2.xxx.com;
        root         /usr/share/nginx/html2;

        # Load configuration files for the default server block.
        include /etc/nginx/default.d/*.conf;

        error_page 404 /404.html;
        location = /404.html {
        }

        error_page 500 502 503 504 /50x.html;
        location = /50x.html {
        }
    }

上の server ディレクティブはデフォルトであったもので、server_name のみ変更します。
そして、下の server ディレクティブは上の server ディレクティブをコピーしたものです。
コピー後に server_nameとrootを変更しています。

あとはrootの/usr/share/nginx/htmlと/usr/share/nginx/html2配下のindex.htmlの中身を、それぞれ異なる内容に変更します。
変更後、Nginxの設定内容を反映させるため Nginx を再起動します。

$ sudo systemctl restart nginx

最後に、ブラウザから各ドメインにアクセスし、異なるページが表示されることを確認して終了です。

Discussion