WSL上のHugoサーバにLAN内の端末からアクセスする
WSL(WSL2)上でhugo server
した際に、手持ちのiPhone等から見た目を確認したかったので、色々試行錯誤しました
断片的な情報であれば調べれば出てくるのですがそれも分かりにくかったり、自分のケースに合わなかったりしたので注意点を上げていきます
サーバ起動時のオプション指定
LAN内へサーバを開放するにはオプションを指定する必要があります
$ hugo server --bind=0.0.0.0
注意点としては必ず0.0.0.0を指定することです
127.0.0.1やlocalhostと指定してしまうとLANからアクセスすることが出来ません
ポートフォワード設定
(参考) https://learn.microsoft.com/ja-jp/windows/wsl/networking
まずはWSL側のIPアドレスを確認しておきます
$ ifconfig eth0 | grep inet
inet 172.28.28.0 netmask 255.255.240.0 broadcast 172.28.31.255
調べたIPアドレスに対してWindows側でポートフォワードを設定します ターミナル(PowerShell)は管理者権限で起動します
netsh.exe interface portproxy add v4tov4 listenaddress=0.0.0.0 listenport=31313 connectaddress=172.28.28.0 connectport=1313
listenaddressは0.0.0.0を指定します
ここでもlocalhostや127.0.0.1にしないように注意
listenportは1313では無く、他の使用していないポートにします(ここでは31313)
connectaddressはWSL側のIPアドレス(172.28.28.0)を指定します
ここで、ブラウザからhttp://localhost:31313にアクセスして動作確認します
アクセスできない場合はいつも通りhttp://localhost:1313を試し、こちらがアクセスできるのであればポートフォワードの設定でミスしている可能性が高いです
こちらにもアクセスできない場合は、サーバの起動に問題が生じている可能性が高いです
Windowsのファイアウォール設定
このままLAN内の端末からアクセスしてもファイアウォールにブロックされる可能性が高いです
コントロールパネルのシステムとセキュリティ > Windows Defender ファイアウォール > 詳細設定
で、受信の規則 > 新しい規則
から、別途31313ポートへのアクセスを許可するようにします
規則の種類 -> ポート
TCPかUDP -> TCP
特定のローカルポート -> 31313
操作 -> 接続を許可する
プロファイル -> プライベートのみチェック
名前 -> 適当に設定
LAN内の他の端末からアクセス
Windows側のIPアドレス+ポート番号を指定するだけです
http://192.168.1.11:31313
ポート番号は1313ではなく、ポートフォワード設定時に指定したポート番号(31313)にして下さい
(補足)リンク切れが起きたりCSSの読み込みに失敗する時
リンクの指定から.BaseURLを排除すれば直ります
<link rel="stylesheet" type="text/css" media="screen" href="{{ .Site.BaseURL }}css/main.css" />
となってる場合は
<link rel="stylesheet" type="text/css" media="screen" href="/css/main.css" />
にすれば直ります
というわけでなんとか解決しました(完)