最近、Windows 10 で Linux から WSL2 (Ubuntu 20.04) に切り替えました。 NodeJs アプリケーションまたは Apache や Nginx などのサーバーを実行すると、localhost または 127.0.0.1 ではすべて正常に動作しますが、ローカル IP アドレスを使用すると動作しません ( 192.168.1.65)。
ノード js アプリケーションを実行している場合の netstat -tupln
Windows と wsl でファイアウォールをオフにしようとしましたが、機能しませんでした。
「プログラムと機能」から IIS を有効にしましたが、localhost と IP で正常に動作しているようです。ということで、ネットワークに問題はないと思いました。
私が読んだすべての投稿は、サイトが ip ではなく 127.0.0.1 からアクセスできる場合、Apache または Nginx のサーバー構成ファイルを構成できることを示唆しています。しかし、wsl を再インストールし、NodeJs / Express のみを介してホストしています。
Express アプリの server.js のコードは次のとおりです。
const express = require("express");
const next = require("next");
const port = parseInt(process.env.PORT, 10) || 3000;
const dev = process.env.NODE_ENV !== "production";
const app = next({ dev });
const handle = app.getRequestHandler();
app.prepare().then(() => {
const server = express();
server.use(express.static("public"));
server.all("*", (req, res) => {
return handle(req, res);
});
server.listen(port, "0.0.0.0", (err) => {
if (err) throw err;
console.log(`> Ready on http://localhost:${port}`);
});
});
私がしたいことは、同じネットワーク上の自分の携帯電話からサイトにアクセスすることだけです。
ここでの主な問題は、WSL2 が独自の仮想 NIC を備えた Hyper-V VM で動作し、Windows ホストの背後で NAT を実行していることです。一方、WSL1 は Windows NIC でブリッジされて実行されました。
でlocalhost
、Windowsが自動マッピングを行うように見えるんが、ホストのIPアドレス(したがって、ローカルネットワーク上の)のために、それはしていません。
このGithub スレッドには、この特定のトピックに関する多くの情報と、いくつかの回避策があります。
まず、最も単純な方法は、この特定のアプリケーションで可能であれば WSL1 を使用することです。WSL2 インスタンスを WSL1 に変換するには、(PowerShell から) a を実行するwsl --set-version <distroname> 1
か、既存のインスタンスを a で複製してwsl --export <distroname> <archivename>.tar
からwsl --import <distroname> <installlocation) <archivename>.tar
. バックアップが取れるので、私はクローンの方が好きです。
netsh
ポートが使用してWindows上で転送するnetsh
ごとにこのコメントそのスレッド上。WSL2 インスタンスの仮想 NIC は再起動のたびに新しいアドレスを取得するため、再起動のnetsh
たびにコマンドを繰り返すか、説明に従ってスクリプトで設定し、タスク マネージャーを介して起動のたびに実行するように設定する必要があることに注意してください。. Windows ファイアウォール ルールを変更する必要がないことにも注意してください。
socat
socat
両方にインストールsocat -d -d TCP-LISTEN:3000,reuseaddr,fork EXEC:'wsl.exe -d <WSL2DistroName> "socat -d -d TCP-CONNECT:127.0.0.1:3000 -"'
し、正しい名前 (角括弧なし) に置き換えてください。これは基本的に、WSL1 のポート 3000 から WSL2 の 3000 にポート転送します。WSL1 はとにかく「ブリッジ」で実行されるため、Windows ホストのポート 3000 への接続もそのルートを通過します。
これには、コマンドのnetsh
stdout 上で機能するため、起動ごとに WSL2 IP が変更されることを心配する必要がないというオプションよりも利点がありますwsl.exe
。
Windows 10 Pro 以降を実行している場合は、WSL2 NIC をブリッジ モードで実行する方法について、そのスレッドに指示があります。他の 3 つの方法を使用できたので、私はこのルートを行ったことはありません。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加