2012-06-20 2 views
4

프로덕션 서버에 nodejs/express 어플리케이션이 있다고 가정 해 봅니다. 새 라우터를 추가하려면 재부팅해야합니다. 하지만 node.js 서버를 재부팅하면 사용자에게 오류가 발생할 수 있습니다.node.js 프로덕션 서버를 재부팅

그래서 사용자에게 오류없이 node.js 서버를 재부팅해야합니까?

답변

9

Nginx로 Node.js 응용 프로그램에 프록시하면 노드 응용 프로그램이 소켓에서 수신 대기 한 다음 새 서버가 올바르게 시작되면 이전 서버 만 종료하도록 알릴 수 있습니다. 이전 서버가 종료되면 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."); 
}); 
0

답변은 준비 서버 (예 : 기존 프로덕션 코드 바로 옆에 배치하려는 코드의 정확한 복사본)에서 모든 것을 테스트하고 트래픽이 적은 시간을 선택하고 디렉터리를 전환하는 것입니다. 새로운 것에.

문제가있는 경우 다시 연결하십시오.

그러나 실제로 "가동 중지 시간"은 1 초가되며 누군가의 요청이 현재 제공되고 있지 않으면 오류가 발생하지 않습니다.

그렇다고해서 나 자신을 시도한 적이 없으며 가장 좋은 답변이 무엇인지 궁금합니다. 좋은 질문입니다!

+0

와 소켓에서 수신 할 수 있으며 그 방법 대부분의의 사람들은 실제로하고 있습니다. 그러나 유니콘 - 스피릿은 다운 타임을 다시 시작하지 않는 위대한 움직임이라고 생각합니다. "Brandon Tilley"대답은 Unicorn 경로를 따라 답이 될 수있는만큼 좋습니다. – nembleton

관련 문제