EC2にNginxをインストールしてVirtualHostで複数ドメインでアクセスしてみた
この記事は閉鎖済みの個人で運営していたサイトで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