[node.js] Node.js 만 사용 및 Apache / Nginx와 함께 Node.js 사용

실제 배포에서 Node.js를 서버로만 사용하는 것을 선호하는 경우는 무엇입니까?

하나 않으면 하지 Node.js를 더 잘 재생 어떤 Node.js를 만, 사용하려면? 아파치 또는 Nginx?



답변

Node.js 앞에 다른 웹 서버를 설치해야하는 몇 가지 이유가 있습니다.

  • Node.js 프로세스의 권한 / setuid에 대해 걱정할 필요가 없습니다. 루트 만 일반적으로 포트 80에 바인딩 할 수 있습니다. nginx / Apache가 루트로 시작하고 포트 80에 바인딩 한 다음 루트 권한을 포기하는 것에 대해 걱정한다면 노드 앱이 걱정할 필요가 없음을 의미합니다.
  • 이미지, css, js 및 html과 같은 정적 파일 제공 노드는 적절한 정적 파일 웹 서버를 사용하는 것보다 효율성이 떨어질 수 있습니다 (일부 시나리오에서는 노드가 더 빠를 수도 있지만 이는 일반적이지 않습니다). 보다 효율적으로 제공되는 파일 이외에도 노드 외부에서 서비스를 제공하는 경우와 같이 eTag 또는 캐시 제어 헤더를 처리하는 것에 대해 걱정할 필요가 없습니다. 일부 프레임 워크가이를 처리 할 수도 있지만 확실하게 원할 것입니다. 그럼에도 불구하고 여전히 느려질 것입니다.
  • Matt Sergeant가 자신의 답변에서 언급했듯이 노드 서비스가 중단되면 의미있는 오류 페이지를 더 쉽게 표시하거나 정적 사이트로 돌아갈 수 있습니다. 그렇지 않으면 사용자는 연결 시간이 초과 될 수 있습니다.
  • 노드 앞에서 다른 웹 서버를 실행하면 노드에 대한 보안 결함 및 DoS 공격을 완화하는 데 도움이 될 수 있습니다. 실제 예를 들어 CVE-2013-4450Node 앞에서 Nginx와 같은 것을 실행하여 방지됩니다 .

CDN을 통해 또는 Varnish와 같은 캐싱 서버 뒤에서 정적 파일을 제공해야한다고 말함으로써 두 번째 글 머리 기호에주의해야합니다. 이 작업을 수행하는 경우 원점이 Node, Nginx 또는 Apache인지는 중요하지 않습니다.

nginx를 사용한주의 사항 : 웹 소켓을 사용하는 경우 웹 소켓을 사용하도록 연결을 업그레이드하기위한 지원 만 추가했기 때문에 최신 버전의 nginx (> = 1.3.13)를 사용해야합니다.


답변

pauljz의 답변에 한 가지 더 많은 이유를 추가하기 위해 백엔드 서버를 다시 시작할 때 502 오류 페이지를 표시하거나 어떤 이유로 충돌이 발생하도록 프런트 엔드 서버를 사용합니다. 이를 통해 사용자는 연결을 설정할 수 없다는 오류가 발생하지 않습니다.


답변

정적 파일을 제공하기 위해 Node를 사용 하는 것은 당신이 무엇을하고 있는지 아는 한 모든 상황에서 좋습니다 . 많은 (모든?) 경쟁 기술 (PHP, Ruby, Python 등)이 응용 프로그램 서버 앞에 HTTPD 또는 Nginx와 같은 웹 서버를 필요로하므로 정적 파일을 제공하기 위해 응용 프로그램 서버를 사용하는 것은 새로운 패러다임입니다. .

Node로 정적 파일을 제공하는 것에 대해 읽은 모든 객관적인 이유는 가장 잘 알고있는 것을 사용하거나 더 잘 테스트되고 더 안정적인 것으로 인식되는 것을 사용한다는 아이디어를 중심으로합니다. 이것들은 실제로 말하는 매우 유효한 이유이지만 순수한 기술적 관련성은 거의 없습니다.

Node에서 가능하지 않은 클래식 웹 서버에서 가능한 기능을 찾지 못하면 (그리고 의심 할 것입니다), 가장 잘 알고 있거나 두 가지 방법 중 하나를 사용하여 선호하는 것을 선택하십시오.

Nginx와 Apache는 노드와 동일하게 “재생”됩니다. 노드에 관계없이 비교해야합니다.


답변

추가 사항 : 리버스 프록시가 필요한 경우, 예를 들어 동일한 포트에서 Websocket 서버를 실행하거나 일부 기술을 혼합 할 수도 있습니다 (NodeJS 일부 요청 및 PHP 또는 기타 다른 항목으로 응답)


답변