localhostが特定のポートで127.0.0.1として解決されないのはなぜですか?

localhostが特定のポートで127.0.0.1として解決されないのはなぜですか?

ポート80で実行されているhttpdサーバーがあります光沢のあるサーバーポート3838で実行されます。試してみるとcurl 127.0.0.1:3838SHINeeサーバーに提供されるインデックスファイルが出ましたね。しかし、カールしようとすると、curl localhost:3838何も検索せずにタイムアウトします。なぜ?

私の/etc/hostsファイルの内容は次のとおりです。

127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
<my-ipv4-address> www.<mywebsite>.com <mywebsite>.com
<my-ipv6-address> www.<mywebsite>.com <mywebsite>.com

そして結果getent ahosts localhost

::1             STREAM localhost
::1             DGRAM  
::1             RAW    
127.0.0.1       STREAM 
127.0.0.1       DGRAM  
127.0.0.1       RAW    

答え1

ご覧のとおりgetent ahosts localhost、localhostのIPv6エントリはIPv4エントリよりも優先されます。 (このコマンドが有用な理由を知りたい場合は、man getentおよびを参照してください。)man nss

Curlはデュアルスタックであり、IPv6アドレスとIPv4アドレスの両方を確認できるため、IPv6アドレスを使用します。ただし、シャイニーサーバーはIPv6をサポートしていないため、IPv6アドレスを直接使用するとタイムアウトが発生します。 OTOHでは127.0.0.1IPv4アドレスなので成功します。

答え2

Shyniサーバーがどれだけ正確に受信しているかを確認する必要があります(ipv4、pv6、またはその両方)。

netstat -pantu |grep LIST

これは「localhost」の使用制限に関する問題のようです。おそらく...

答え3

問題を解決するには、次に追加してください。/etc/hosts

127.0.0.1 localhost shiny myWebsiteName

(既存の行に追加します)。


より良いです。

Webサーバーをリッスンするように設定してから127.0.0.2追加します。/etc/hosts

127.0.0.2 shiny myWebsiteName

(Debian 8 および 9 でテスト済み)

関連情報