假设我在生产服务器上有一个 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.");
});
我想答案是首先在登台服务器中测试所有内容(即您计划部署的代码的精确副本,就在现有生产代码旁边)并选择一个低流量时间,然后将目录切换到新的一。
如果有问题,请切换回来。
但实际的“停机时间”只有一秒钟,除非当前正在处理某人的请求,否则他们不会收到错误消息。
也就是说,我自己从未尝试过这个,我很想知道最好的答案是什么!好问题!