【EC2初心者向け】Nginxでドキュメントルートを変更する方法

AWS EC2のNginxサーバーでドキュメントルート（Webサイトのファイルを格納する場所）を変更する方法を初心者向けにまとめました。この記事では、デフォルトの`/usr/share/nginx/html`から`/var/www/html`にドキュメントルートを変更する手順を解説します。

## 前提条件

- AWS EC2インスタンスが起動済み（Amazon Linux 2使用）
- Nginxがインストール済み
- SSHで接続できる状態
## なぜドキュメントルートを変更するのか？

Nginxのデフォルトのドキュメントルート（`/usr/share/nginx/html`）から変更する理由はいくつかあります：

1. **標準化**: `/var/www/html`はApacheなど他のWebサーバーでも標準的に使われるパスで、統一性がある
2. **アクセス管理**: セキュリティポリシーに合わせて、特定のディレクトリ構造を利用したい場合
3. **運用面**: システムアップデート時に上書きされにくいなど、運用上のメリットがある

## 1. 現在の設定を確認する

まずは現在のNginxの設定と、デフォルトのドキュメントルートを確認します。

```bash
# 設定ファイルの確認
[ec2-user@ip-xx-xx-xx-xxx ~]$ cat /etc/nginx/nginx.conf

# デフォルトのドキュメントルートの内容確認
[ec2-user@ip-xx-xx-xx-xxx ~]$ ls /usr/share/nginx/html
404.html  50x.html  icons  index.html  nginx-logo.png  poweredby.png
```

ここで、`nginx.conf`に以下のような部分があることを確認します：

```
server {
    listen       80;
    listen       [::]:80;
    server_name  _;
    root         /usr/share/nginx/html;  # ここをチェック
    ...
}
```

## 2. 新しいドキュメントルートディレクトリを作成する

次に、新しいドキュメントルートとなるディレクトリを作成します。

```bash
# 直接作成しようとすると権限エラーになる
[ec2-user@ip-xx-xx-xx-xxx ~]$ mkdir -p /var/www/html
mkdir: cannot create directory '/var/www': Permission denied

# sudoを使って作成する
[ec2-user@ip-xx-xx-xx-xxx ~]$ sudo mkdir -p /var/www/html

# 作成できたか確認
[ec2-user@ip-xx-xx-xx-xxx ~]$ ls /var/www/
html
```

**Point**: `/var`ディレクトリは通常、一般ユーザーには書き込み権限がないため、管理者権限（sudo）を使用して作成する必要があります。

## 3. 設定ファイルをローカルPCにダウンロードして編集する

サーバー上で直接編集することもできますが、初心者の方は手元のPCでテキストエディタを使って編集する方が簡単です。

```bash
# EC2インスタンスからログアウト
[ec2-user@ip-xx-xx-xx-xxx ~]$ exit
logout

# 設定ファイルをローカルPCにダウンロード
user@local-pc:~$ scp -i ~/.ssh/dict-server.pem ec2-user@xx.xxx.xx.xxx:/etc/nginx/nginx.conf ./
nginx.conf                                         100% 2341    70.7KB/s   00:00    

# Windowsの場合、ファイルエクスプローラーを開く
user@local-pc:~$ explorer.exe .
```

ダウンロードした`nginx.conf`ファイルをテキストエディタ（VSCodeなど）で開き、以下の部分を探して変更します：

```
server {
    listen       80;
    listen       [::]:80;
    server_name  _;
    root         /usr/share/nginx/html;  # ここを変更
```

これを以下のように変更します：

```
server {
    listen       80;
    listen       [::]:80;
    server_name  _;
    root         /var/www/html;  # 変更後
```

保存したら、編集したファイルをEC2にアップロードします。

## 4. 編集した設定ファイルをアップロードして反映する

```bash
# 編集したファイルをアップロード
user@local-pc:~$ scp -i ~/.ssh/dict-server.pem ./nginx.conf ec2-user@xx.xxx.xx.xxx:~/
nginx.conf                                         100% 2333   119.4KB/s   00:00    

# EC2にSSH接続
user@local-pc:~$ ssh -i ~/.ssh/dict-server.pem ec2-user@xx.xxx.xx.xxx

# アップロードされたファイルを確認
[ec2-user@ip-xx-xx-xx-xxx ~]$ ls
front_test  nginx.conf

# 現在の設定ファイルをバックアップ（重要）
[ec2-user@ip-xx-xx-xx-xxx ~]$ sudo cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.backup

# 新しい設定ファイルを適用
[ec2-user@ip-xx-xx-xx-xxx ~]$ sudo mv ./nginx.conf /etc/nginx/nginx.conf

# Nginxを再起動
[ec2-user@ip-xx-xx-xx-xxx ~]$ sudo systemctl restart nginx.service

# 起動状態を確認
[ec2-user@ip-xx-xx-xx-xxx ~]$ sudo systemctl status nginx.service
● nginx.service - The nginx HTTP and reverse proxy server
   Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled; vendor preset: disabled)
   Active: active (running) since Wed 2025-04-02 04:37:26 UTC; 9s ago
   ...
```

**Point**: 設定ファイルの変更前には必ずバックアップを取っておきましょう。もし新しい設定に問題があっても、元に戻すことができます。

## 5. 新しいドキュメントルートにテストファイルを配置する

設定を変更しただけでは、新しいディレクトリにコンテンツがないためエラー（403 Forbidden）になる場合があります。テスト用のHTMLファイルを作成して確認しましょう。

```bash
# シンプルなHTMLファイルを作成
[ec2-user@ip-xx-xx-xx-xxx ~]$ echo "hello" > index.html

# 新しいドキュメントルートに移動
[ec2-user@ip-xx-xx-xx-xxx ~]$ sudo mv ./index.html /var/www/html
```

## 6. 動作確認

ブラウザでEC2インスタンスのパブリックIPアドレスにアクセスして、「hello」と表示されていれば成功です！

もし表示されない場合は、以下を確認してください：

1. Nginxが起動しているか（`sudo systemctl status nginx.service`）
2. 新しいドキュメントルートに権限の問題がないか
3. EC2のセキュリティグループでポート80が開放されているか

## よくあるトラブルと解決策

### 1. 403 Forbidden エラーが出る場合

新しいドキュメントルートにNginxユーザーがアクセスできない可能性があります。以下のコマンドで権限を修正します：

```bash
sudo chmod -R 755 /var/www/html
sudo chown -R nginx:nginx /var/www/html
```

### 2. 設定変更が反映されない場合

Nginxが正しく再起動されているか確認します：

```bash
sudo systemctl restart nginx.service
sudo systemctl status nginx.service
```

また、ブラウザのキャッシュをクリアしてみてください。

### 3. 元の設定に戻したい場合

バックアップしておいた設定ファイルを使って元に戻せます：

```bash
sudo cp /etc/nginx/nginx.conf.backup /etc/nginx/nginx.conf
sudo systemctl restart nginx.service
```

## まとめ

この記事では、EC2インスタンス上のNginxのドキュメントルートを変更する手順を紹介しました。主なステップは：

1. 新しいドキュメントルートディレクトリを作成
2. Nginx設定ファイルをローカルPCにダウンロードして編集
3. 編集した設定ファイルをEC2にアップロードして反映
4. 新しいドキュメントルートにテストファイルを配置
5. 動作確認

これらの手順を通じて、Webサイトのファイルを好きな場所に配置できるようになります。次のステップとしては、ドメイン名の設定やSSL証明書の導入などがあります。

---

タグ: `AWS`, `EC2`, `Nginx`, `サーバー設定`, `初心者向け`