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

我想答案是首先在登台服务器中测试所有内容(即您计划部署的代码的精确副本,就在现有生产代码旁边)并选择一个低流量时间,然后将目录切换到新的一。

如果有问题,请切换回来。

但实际的“停机时间”只有一秒钟,除非当前正在处理某人的请求,否则他们不会收到错误消息。

也就是说,我自己从未尝试过这个,我很想知道最好的答案是什么!好问题!

于 2012-06-20T06:59:49.013 回答