0

私のsocket.ioチャットには、URLhttp://example.com:8080/からアクセスできます。Dreamhostでは80をバインドできないため、8080でバインドしています。

URLのポート番号を削除したかったのです。そこで、Apacheのmod_proxyであるDreamhostのプロキシサーバー機能(http://wiki.dreamhost.com/Proxy_Server)を使用しました。

ポート番号8080をURLhttp://example.com/socketchatにプロキシしまし。そのURLにアクセスすると、チャットが機能しません。このエラーが発生します:

「プロキシエラープロキシサーバーがアップストリームサーバーから無効な応答を受信しました。プロキシサーバーは要求GET/socket /を処理できませんでした。理由:リモートサーバーからの読み取り中にエラーが発生しました。」

socket.ioで機能するURLのポート番号を削除する方法はありますか?何も機能しない場合、Webサイトを公開するときにURLにポート番号を残しておくと、セキュリティ上のリスクがありますか?ありがとう。

4

2 に答える 2

0

Apache がすぐにボトルネックになるかどうかは、正確にどのように使用しているかによって異なります。これは非常に成熟した Web サーバーであり、世界中の大規模な Web サイトを問題なくホストしています。とにかく、socket.io アプリケーションは必ずしも Web アプリケーションと同じポートを共有する必要はありません。socket.io をポート 8081 でリッスンし、通常の http リクエストをポート 8080 で行うことができます。次に、現在のように 8080 を指すようにプロキシを設定し、socket.io 接続を 8081 にします。

この場合のポートは、ユーザーが URL に表示するものではないため、問題にはなりません。また、socket.io 通信はプロキシを経由する必要がないためです。Apache がボトルネックになるのに十分な数のリクエストを処理している場合は、いずれにせよ、より良いホスティング環境に飛びつくことができるはずです!

サーバ

var app = require('http').createServer(handler)
  , io = require('socket.io').listen(8081)
  , fs = require('fs')

app.listen(8080);

function handler (req, res) {
  fs.readFile(__dirname + '/index.html',
  function (err, data) {
    if (err) {
      res.writeHead(500);
      return res.end('Error loading index.html');
    }

    res.writeHead(200);
    res.end(data);
  });
}

io.sockets.on('connection', function (socket) {
  socket.emit('news', { hello: 'world' });
  socket.on('my other event', function (data) {
    console.log(data);
  });
});

Web サーバーが socket.io 接続とは別のポートでリッスンしていることに注意してください。これは、mod_proxy を使用して通常の http リクエストを 80 から 8080 に安全にプロキシできることを意味し、socket.io はプロキシをバイパスしてポート 8081 で直接非常にうまく通信できます。ユーザーは、サイトにアクセスするためにポートを入力する必要はありません。

クライアント

<script src="http://domain.com:8081/socket.io/socket.io.js"></script>
<script>
  var socket = io.connect('http://domain.com:8081');
  socket.on('news', function (data) {
    console.log(data);
    socket.emit('my other event', { my: 'data' });
  });
</script>
于 2012-04-26T01:24:28.880 に答える
0

私の推測では、mod_proxy は websocket をうまく処理できないと思いますが、これはほとんど驚くべきことではありません。そうは言っても、node.js を Apache の背後に置くべきではありません。それは、node.js の多くの目的を無効にするからです。Apache はすぐにボトルネックになります。

最後に、いいえ、socket.io を別のポートに配置してもセキュリティ リスクはありません。実行するポートに関係なく、セキュリティ リスクは存在します。ポート 80 以外のポートへの接続をブロックする場合、他のファイアウォールで問題が発生する可能性があります (これは前代未聞ではありません)。

于 2012-04-26T00:02:21.690 に答える