AWS EC2インスタンスにNginxをインストールして、Webサーバーを立ち上げる手順を初心者向けに解説します。EC2を触り始めたばかりの方でも迷わずにセットアップできるよう、実際のコマンドとその出力結果、発生した問題と解決策を含めて説明します。
前提条件
- AWS EC2インスタンスが起動済み(Amazon Linux 2を使用)
- SSHで接続できる状態
- 基本的なLinuxコマンドの知識
1. Nginxのインストール
まずはNginxをインストールしてみましょう。Amazon Linux 2では以下のようにインストールできます。
# DNFコマンドを試みるが、Amazon Linux 2では使えない
[ec2-user@ip-xx-xx-xx-xxx ~]$ sudo dnf install nginx
sudo: dnf: command not found
Amazon Linux 2では、dnf
ではなくyum
またはamazon-linux-extras
を使用します。今回はamazon-linux-extras
を使用してインストールしてみます。
# 権限なしで実行してみる
[ec2-user@ip-xx-xx-xx-xxx ~]$ amazon-linux-extras install nginx1
You lack permissions to write to system configuration. /etc/yum.repos.d/amzn2-extras.repo
# sudoを付けて再実行
[ec2-user@ip-xx-xx-xx-xxx ~]$ sudo amazon-linux-extras install nginx1
Installing nginx
Point: Amazon Linux 2では、多くのパッケージはamazon-linux-extras
コマンドでインストールします。システム設定を変更するコマンドはsudo
を付けて実行する必要があります。
2. Nginxの起動と状態確認
インストールが完了したら、Nginxを起動して状態を確認しましょう。
# サービスの状態確認(まだ起動していない)
[ec2-user@ip-xx-xx-xx-xxx ~]$ systemctl status nginx.service
● nginx.service - The nginx HTTP and reverse proxy server
Loaded: loaded (/usr/lib/systemd/system/nginx.service; disabled; vendor preset: disabled)
Active: inactive (dead)
# サービスの起動
[ec2-user@ip-xx-xx-xx-xxx ~]$ sudo systemctl start nginx.service
起動したら、実際にポート80で待ち受けているか確認します。
# ポート80を使用しているプロセスの確認
[ec2-user@ip-xx-xx-xx-xxx ~]$ sudo lsof -i:80
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
nginx 3399 root 6u IPv4 21920 0t0 TCP *:http (LISTEN)
nginx 3399 root 7u IPv6 21921 0t0 TCP *:http (LISTEN)
nginx 3400 nginx 6u IPv4 21920 0t0 TCP *:http (LISTEN)
nginx 3400 nginx 7u IPv6 21921 0t0 TCP *:http (LISTEN)
この出力から、Nginxが正常に起動していることが確認できます。
- Nginxは通常、rootユーザーで実行されるマスタープロセスと、nginxユーザーで実行されるワーカープロセスで動作しています
- IPv4とIPv6の両方でポート80(http)をリッスンしています
3. 自動起動の設定
サーバーを再起動してもNginxが自動的に起動するように設定します。
[ec2-user@ip-xx-xx-xx-xxx ~]$ sudo systemctl enable nginx.service
Created symlink from /etc/systemd/system/multi-user.target.wants/nginx.service to /usr/lib/systemd/system/nginx.service.
これにより、システム起動時にNginxが自動的に起動するようになります。
4. EC2セキュリティグループの設定
ここで重要なポイントです。Nginxが起動していても、EC2のセキュリティグループでポート80への接続を許可していないとウェブページにアクセスできません。
以下の手順でセキュリティグループを設定します:
- AWSマネジメントコンソールで、該当するEC2インスタンスを選択
- 「セキュリティ」タブをクリック
- セキュリティグループをクリック
- 「インバウンドルールの編集」をクリック
- 「ルールの追加」をクリック
- 以下の設定を行う:
- タイプ: HTTP
- ソース: マイIP(開発中・テスト中)または0.0.0.0/0(公開時)
Point: セキュリティの観点から、開発中はソースを「マイIP」のみに制限し、本番公開時に必要に応じて「0.0.0.0/0」(すべてのIPアドレス)に開放するのがベストプラクティスです。
5. 動作確認
ブラウザでEC2インスタンスのパブリックIPアドレスにアクセスします。
http://あなたのEC2のパブリックIP/
正常に設定できていれば、以下のようなNginxのデフォルトページが表示されます。
Welcome to nginx!
...
注意: 最初はアクセスできなくても、セキュリティグループの設定変更後、少し時間をおいて再度アクセスすると表示されることがあります。設定の反映には多少時間がかかる場合があります。
トラブルシューティング
1. Nginxが起動しない場合
sudo systemctl status nginx.service
エラーメッセージを確認し、必要に応じて以下のログを調査します。
sudo tail -f /var/log/nginx/error.log
2. ブラウザでアクセスできない場合
- セキュリティグループの設定を確認
- ファイアウォールの状態確認
sudo iptables -L
- ポート80が使用可能か確認
sudo lsof -i:80
3. Welcome to Nginx! が表示されない場合
デフォルトのindex.htmlが存在するか確認します。
ls -l /usr/share/nginx/html/
次のステップ
Nginxが正常に動作することを確認できたら、以下のような作業に進むことができます:
- 自分のウェブコンテンツのデプロイ
- Nginxの設定カスタマイズ
- SSL/HTTPS設定
- ドメイン名の設定とDNS構成
まとめ
この記事では、EC2インスタンス(Amazon Linux 2)にNginxをインストールし、動作確認するまでの基本的な手順を解説しました。EC2初心者でも迷わずにWebサーバーを立ち上げられるよう、コマンドの実行結果や、発生しうる問題と解決策を含めました。
これでウェブアプリケーションの公開に向けた第一歩を踏み出すことができます。引き続き、自分のウェブサイトをデプロイして楽しんでください!