4

本番サーバーにnodejs/expressアプリケーションがあるとしましょう。新しいルーターを追加したい場合は、ルーターを再起動する必要がありますよね?しかし、node.jsサーバーを再起動すると、ユーザーにエラーが発生する可能性があります。

では、ユーザーにエラーを発生させずにnode.jsサーバーを再起動するにはどうすればよいですか?

4

2 に答える 2

9

Nginx を使用して Node.js アプリにプロキシする場合、Node アプリにソケットでリッスンするように指示し、新しいサーバーが正しく起動した場合にのみ古いサーバーをシャットダウンすることができます。古いサーバーがシャットダウンすると、Nginx はリクエストをサーバーの新しいインスタンスにルーティングします。これが、人気の Ruby サーバーであるUnicornのしくみです。

Nginx では、次のようにアップストリームを指定します。

upstream node_server {
  server unix:/path/to/socket.sock;
}

server {
  ...
  location / {
    ...
     proxy_pass http://node_server;
  }
}

ノードでは、ソケットでリッスンできます

server.listen('/path/to/socket.sock', function() {
  console.log("Listening on socket.");
});
于 2012-06-20T07:35:02.540 に答える
0

答えは、最初にステージング サーバーですべてをテストし (つまり、展開する予定のコードの正確なコピーを既存の運用コードのすぐ隣に)、トラフィックの少ない時間を選択して、ディレクトリを新しいサーバーに切り替えることだと思います。 1。

問題がある場合は、元に戻します。

しかし、実際の「ダウンタイム」はわずか 1 秒であり、誰かのリクエストが現在処理されていない限り、エラーは発生しません。

とはいえ、私はこれを自分で試したことはありません。最良の答えが何か知りたいです! 良い質問!

于 2012-06-20T06:59:49.013 に答える