53

を使用して小さなNode.jsアプリを作成しました。このアプリはconnect、Webページを提供し、定期的に更新を送信します。また、ユーザーの観察結果を受け入れてディスクファイルに記録します。

ローカルホスト上にいる限りは正常に動作しますが、同じイントラネット上の他のコンピューターに表示させることはできません。ポート3000を使用していますが、ポート8080または80に変更しても効果がありません。

接続を設定するために使用しているコードは次のとおりです。

var io = require('socket.io'),
  connect = require('connect');

var app = connect().use(connect.static('public')).listen(3000);
var chat_room = io.listen(app);

前述のように、ポート番号を8080または80に変更してみましたが、違いは見られなかったので、ファイアウォールの問題ではないと思います(間違っている可能性があります)。HTTPに関する同様の質問を読んだ後、メソッドに0.0.0.0を追加することも考えましたが、IPマスクパラメーターを使用listen()しているようには見えません。listen()

4

12 に答える 12

115

おそらく、サーバー ソケットは127.0.0.1、「すべての IP アドレス」のシンボリック IP ではなく、ループバック IP アドレスにバインドされています0.0.0.0(これはネットマスクではないことに注意してください)。これを確認するにsudo netstat -ntlpは、(Linux の場合) またはnetstat -an -f inet -p tcp | grep LISTEN(OSX) を実行し、プロセスがバインドされている IP を確認します (「:3000」の行を探します)。「127.0.0.1」が表示された場合、それが問題です。listen呼び出しに「0.0.0.0」を渡して修正します。

var app = connect().use(connect.static('public')).listen(3000, "0.0.0.0");
于 2012-12-26T19:21:34.143 に答える
8

0.0.0.0 へのバインドは戦いの半分です。TCP ポートをブロックする IP ファイアウォール (システム設定のものとは異なります) があります。したがって、次のようにして、ポートのブロックも解除する必要があります。

sudo ipfw add <PORT NUMBER> allow tcp from any to any
于 2013-06-04T15:36:17.180 に答える
7

アプリで、ネットワーク内の任意のデバイスからアクセスできるようにします。

app.listen(3000, "0.0.0.0");

Azure、GCP、AWS の NodeJS 向け

リソース マネージャーにデプロイされた Azure vm の場合は、仮想ネットワーク セキュリティ グループを確認し、ポートまたはポート範囲を開いてアクセスできるようにします。それ以外の場合は、vm が古いバージョンの azure にデプロイされている場合は、クラウド エンドポイントで行います。

GCP と AWS に相当するものを探してください

于 2017-07-07T04:44:40.183 に答える
1

私の場合、 FedoraまたはCentosディストリビューションはselinuxとfirewalldをチェックして、firewalldが接続を妨げました:

Selinux: $sestatus
SELinux ステータス: 有効
SELinuxfs マウント: /sys/fs/selinux
SELinux ルート ディレクトリ: /etc/selinux
読み込まれたポリシー名: 対象
現在のモード: {{checkmode}}
構成ファイルからのモード: {{checkconfig}}
ポリシー MLS ステータス: 有効
ポリシー deny_unknown ステータス: 許可
カーネル ポリシーの最大バージョン: 30

Firewalld ステータス: $systemctl status firewalld
于 2016-09-12T22:51:12.237 に答える
1

私の場合、シンボリックIPアドレス「0.0.0.0」とコールバックの両方を使用して、サーバー 「cors」をリッスンする必要がありました:「^ 2.8.5」、 「express」:「^ 4.17.1」、

const cors = require("cors");
app.use(cors());

const port = process.env.PORT || 8000;
app.listen(port,"0.0.0.0" ,() => {
  console.log(`Server is running on port ${port}`);
});

「0.0.0.0」の代わりにローカルIPアドレスを使用することもできます。OS Ubuntuでは、コマンドを使用してIPアドレスを見つけることができます

ifconfig | grep "inet " | grep -v 127.0.0.1

ここに画像の説明を入力 次に、IP アドレスを使用します。

app.listen(port,"192.168.0.131" ,() => {
  console.log(`Server is running on port ${port}`);
});

「192.168.0.131」などの固定 IP アドレスを使用する場合は、次のようにサーバーへの呼び出し中にそれを使用する必要があります。

REACT_APP_API_URL = http://192.168.0.131:8001/api
于 2020-11-14T00:27:49.407 に答える
0

ここで同じ問題が発生しました。私にとっての解決策は、server.jsファイル行 161の編集でした。

 var server = app.listen(argv.port, '**<server.ip.adress.here>**', function() {
 console.log('Cesium development server running publicly.  Connect to localhost:%d/', server.address().port);
    });

localhost>と置き換えます <server.ip.adress.here>

于 2020-07-14T13:13:47.180 に答える