WSL2 + Nginx 環境構築：Windows からのアクセス設定ガイド（ポートフォワーディングの要否も解説）


WSL2 上に構築した Nginx サーバーに、Windows の Web ブラウザからアクセスするための設定手順を、解説します。ポートフォワーディングの必要性についても補足で説明しています。

**1. 前提条件**

*   WSL2 (Windows Subsystem for Linux 2) が構築済みであること
*   Ubuntu などの Linux ディストリビューションが WSL2 にインストール済みであること
*   基本的なターミナルの操作ができること

**2. Nginx のインストールと起動 (WSL2)**

まずは、WSL2 で起動した Linux ディストリビューションのターミナルを開き、Nginx をインストールします。

```bash
sudo apt update  # パッケージリストを更新
sudo apt install nginx  # Nginx をインストール
```

インストール中にパスワードを求められたら、WSL2 に設定したユーザーのパスワードを入力してください。

Nginx のインストールが完了したら、以下のコマンドで起動します。

```bash
sudo systemctl start nginx  # Nginx を起動
```

起動状態を確認するには、次のコマンドを実行します。`active (running)` と表示されれば正常に起動しています。

```bash
sudo systemctl status nginx  # Nginx の状態を確認
```

**3. Windows ファイアウォールの設定**

Windows のファイアウォールが Nginx のポート（通常は 80 番ポート）へのアクセスをブロックしている場合、アクセスを許可する必要があります。

*   Windows のスタートメニューから「Windows Defender ファイアウォール」を検索して開きます。
*   「詳細設定」をクリックします。
*   左側のメニューから「受信の規則」を選択します。
*   右側の「操作」ペインから「新しい規則...」をクリックします。
*   「規則の種類」で「ポート」を選択し、「次へ」をクリックします。
*   「プロトコルおよびポート」で「TCP」を選択し、「特定のローカルポート」に「80」と入力し、「次へ」をクリックします。
*   「操作」で「接続を許可する」を選択し、「次へ」をクリックします。
*   「プロファイル」で、適用するネットワークの種類（通常はすべて）を選択し、「次へ」をクリックします。
*   「名前」に「Nginx (TCP-In)」など、わかりやすい名前を入力し、「完了」をクリックします。

**4. WSL2 の IP アドレスの確認**

WSL2 のターミナルで以下のコマンドを実行して、WSL2 の IP アドレスを確認します。

```bash
ip addr | grep eth0 | grep inet | awk '{print $2}' | cut -d'/' -f1
```

出力された IP アドレス（例：`172.22.128.1`）をメモしておきます。

代替コマンド (上記でIPアドレスが取得できない場合):

```bash
hostname -I
```

スペース区切りでIPアドレスが複数表示される場合があります。基本的に最初のIPアドレスがWSL2のIPアドレスです。

**5. Web ブラウザからのアクセス**

Windows の Web ブラウザ（Chrome、Edge など）を開き、アドレスバーに以下の URL を入力してアクセスします。

```
http://[WSL2のIPアドレス]
```

例えば、WSL2 の IP アドレスが `172.22.128.1` だった場合、`http://172.22.128.1` と入力します。

Nginx が正常に動作していれば、Nginx のデフォルトのウェルカムページが表示されるはずです。

**6. ポートフォワーディングの要否と設定方法**

通常、WSL2 は Windows とネットワークを共有するため、上記の手順でアクセス可能です。しかし、以下のケースではポートフォワーディングが必要になる場合があります。

*   **Windows のファイアウォールが厳格に設定されている場合:** ファイアウォール設定だけではアクセスできない場合。
*   **複雑なネットワーク構成の場合:** VPN やプロキシなどを使用している場合。
*   **特定のポート番号を使用したい場合:** Nginx が動作するポートとは異なるポートでアクセスしたい場合。

ポートフォワーディングを行うには、管理者権限で PowerShell を起動し、以下のコマンドを実行します。

```powershell
# Nginx が WSL2 で 80 番ポートで動作している場合
# Windows の 8080 番ポートへのアクセスを WSL2 の 80 番ポートに転送する例

netsh interface portproxy add v4tov4 listenport=8080 listenaddress=0.0.0.0 connectport=80 connectaddress=(wsl ip addr | grep eth0 | grep inet | awk '{print $2}' | cut -d'/' -f1)
```

この設定を行うと、`http://localhost:8080` または `http://127.0.0.1:8080` で WSL2 上の Nginx にアクセスできます。

ポートフォワーディングを削除する場合は、以下のコマンドを実行します。

```powershell
netsh interface portproxy delete v4tov4 listenport=8080 listenaddress=0.0.0.0
```

**7. DNS 設定 (オプション)**

上記 IP アドレスでのアクセスに加えて、hosts ファイルを編集して任意のドメイン名（例：`mysite.local`）でアクセスできるようにすることも可能です。

*   Windows のエディタ（管理者権限で起動）で `C:\Windows\System32\drivers\etc\hosts` を開きます。
*   ファイルの末尾に `[WSL2のIPアドレス] mysite.local` のように追記して保存します。
*   ブラウザで `http://mysite.local` にアクセスします。

**8. トラブルシューティング**

*   **ページが表示されない:**
    *   Nginx が起動しているか確認。
    *   Windows のファイアウォールでポート 80 が許可されているか確認。
    *   WSL2 の IP アドレスが正しいか確認。
    *   必要に応じてポートフォワーディングを設定。
*   **エラーメッセージが表示される:**
    *   エラーメッセージの内容をよく読み、原因を特定。
    *   Nginx のログファイル（`/var/log/nginx/error.log`）にエラーの詳細が記録されている場合があります。

**まとめ**

この記事では、WSL2 上に構築した Nginx サーバーに Windows からアクセスするための手順を詳細に解説しました。通常はポートフォワーディングは不要ですが、必要に応じて設定することで、より柔軟な開発環境を構築できます。