本番サーバーにnodejs/expressアプリケーションがあるとしましょう。新しいルーターを追加したい場合は、ルーターを再起動する必要がありますよね?しかし、node.jsサーバーを再起動すると、ユーザーにエラーが発生する可能性があります。
では、ユーザーにエラーを発生させずにnode.jsサーバーを再起動するにはどうすればよいですか?
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.");
});
答えは、最初にステージング サーバーですべてをテストし (つまり、展開する予定のコードの正確なコピーを既存の運用コードのすぐ隣に)、トラフィックの少ない時間を選択して、ディレクトリを新しいサーバーに切り替えることだと思います。 1。
問題がある場合は、元に戻します。
しかし、実際の「ダウンタイム」はわずか 1 秒であり、誰かのリクエストが現在処理されていない限り、エラーは発生しません。
とはいえ、私はこれを自分で試したことはありません。最良の答えが何か知りたいです! 良い質問!