私のMacではJekyll
とVagrant
を使っています。 Jekyll server
は0.0.0.0:4000
ではなく127.0.0.1:4000
にバインドされることがわかりました。またgem server
はデフォルトでこのアドレスにバインドします。私はまだhttp://localhost:port
を通してそれを訪れることができます。しかしJekyll
の場合、デフォルト設定(例:0.0.0.0:4000)はインターネットアクセスを必要とするようです。インターネットなしでJekyll server
を実行することはできません。これは小さなバグですか?
私はVagrant
も使います。 Jekyll
をVagrant
仮想マシンにインストールし、それをMacintoshでテストしたので、Vagrantfileでポート転送(8080 => 4000)を設定しました。デフォルト設定(0.0.0.0:4000)を使用すると、うまくいきます。私のサファリからhttp://localhost:8080
でそれを訪問することができます。しかし、インターネットがなければ、私は0.0.0.0:4000にバインドすることはできません。代わりにjekyll server -H 127.0.0.1
を使用してサービスを127.0.0.1:4000
にバインドしますが、http://localhost:8080
経由でアクセスすることはできません。
誰でも0.0.0.0、127.0.0.1とlocalhostの違いを説明できますか?そして、誰が違いがこの問題を引き起こすのか説明できますか?
127.0.0.1
は通常、「ループバック」またはローカル専用インタフェースに割り当てられているIPアドレスです。これは、同じホスト内でしか通信できない「偽の」ネットワークアダプタです。ネットワーク対応のアプリケーションが同じホスト上のクライアントにのみサービスを提供したい場合によく使用されます。 127.0.0.1
で接続を待機しているプロセスは、そのソケットでローカル接続のみを受け取ります。
"localhost"は通常127.0.0.1
IPアドレスのホスト名です。通常は/etc/hosts
(またはWindowsの同等物で、%WINDIR%
の下のどこかに "hosts"という名前)で設定されています。他のホスト名と同じように使うことができます - それがどのように127.0.0.1
に解決されるか見るために "ping localhost"を試してください。
0.0.0.0
にはいくつかの異なる意味がありますが、この文脈では、サーバーが0.0.0.0
をリッスンするように指示された場合、これは「利用可能なすべてのネットワークインターフェイスをリッスンする」という意味です。サーバプロセスから見たIPアドレス127.0.0.1
のループバックアダプタは、マシン上の他のネットワークアダプタとまったく同じように見えるので、0.0.0.0
をリッスンするように指示されたサーバはそのインタフェース上の接続も受け入れます。
うまくいけばあなたの質問の知的財産側に答えます。私はJekyllやVagrantには馴染みがありませんが、あなたのポートフォワーディング8080 => 4000
はどういうわけか特定のネットワークアダプタに縛られているので、ローカルで127.0.0.1
に接続するときの経路にはないと思います
Jekyllの現在のバージョンでは、デフォルトは http://127.0.0.1:4000/ です。
これは、ネットワークに接続していても、他の人が自分のアプリケーションにアクセスしたくない場合に適しています。
しかし、あなたのアプリケーションがどのように携帯電話や他のラップトップ/コンピュータから実行されているかを見たいことがあるかもしれません。
その場合は、あなたが使用することができます
jekyll serve --Host 0.0.0.0
これはあなたのアプリケーションをホストと他のホストから接続するための次の使用方法に結び付けます。
http://Host's IP adress/4000