programing

Apache/Nginx와 함께 Node.js를 사용하는 경우와 비교하여 Node.js만 사용

bestprogram 2023. 5. 17. 23:33

Apache/Nginx와 함께 Node.js를 사용하는 경우와 비교하여 Node.js만 사용

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

Node.js만 사용하고 싶지 않을 때 Node.js에서 더 잘 작동하는 것은 무엇입니까?Apache 또는 Nginx?

다른 웹 서버를 Node.js 앞에 붙여야 하는 몇 가지 좋은 이유가 있습니다.

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

두 번째 요점은 CDN을 통해 또는 Varnish와 같은 캐슁 서버 뒤에서 정적 파일을 제공해야 한다는 것입니다.이렇게 하는 경우 원본이 노드인지 Nginx인지 Apache인지는 중요하지 않습니다.

특히 nginx에 주의하십시오. 웹 소켓을 사용하는 경우 최신 버전의 nginx(>= 1.3.13)를 사용하십시오. 웹 소켓을 사용하기 위한 연결 업그레이드 지원만 추가되었기 때문입니다.

pauljz의 답변에 한 가지 이유를 더 덧붙이자면, 저는 프런트 엔드 서버를 사용하여 백엔드 서버를 다시 시작하거나 어떤 이유로 충돌할 때 502개의 오류 페이지를 처리할 수 있습니다.이렇게 하면 연결을 설정할 수 없다는 오류가 발생하지 않습니다.

정적 파일을 제공하기 위해 노드를 사용하는 것은 무엇을 하고 있는지 아는모든 상황에서 괜찮다고 생각합니다.수많은 경쟁 기술(PHP, Ruby, Python 등)이 애플리케이션 서버 앞에 HTTPD 또는 Nginx와 같은 웹 서버를 필요로 하기 때문에 애플리케이션 서버를 사용하여 정적 파일을 제공하는 것은 확실히 새로운 패러다임입니다.

노드를 통해 정적 파일을 제공하는 것에 반대하는 모든 객관적인 이유는 여러분이 가장 잘 알고 있는 것을 사용하거나 더 잘 테스트된/더 안정적인 것으로 인식되는 것을 사용하는 것입니다.이것들은 실질적으로 매우 타당한 이유이지만 순수하게 기술적인 관련성은 거의 없습니다.

노드에서 사용할 수 없는 기존 웹 서버에서 가능한 기능을 찾지 못한 경우(아마 그럴 것입니다), 두 가지 방법 중 하나라도 좋으니 가장 잘 알고 있는 것이나 원하는 것을 선택하십시오.

Nginx vs Apache -- 그들은 동일한 노드로 "재생"할 것입니다.노드와 관계없이 비교해야 합니다.

Node.js만 사용

Node.js는 정적 파일 서비스, API 호출 응답, HTTPS에서 서버 실행 등 웹 서버의 모든 작업을 수행할 수 있습니다.요청 기록, 응답 압축, 쿠키 설정, XSS 공격 방지와 같은 추가 기능을 제공하는 패키지도 많습니다.기능 부족은 다른 웹 서버(Apache/Nginx/ 등)를 사용하는 이유가 될 수 없습니다.)을 클릭하여 Node.js를 완료합니다.즉, 확장할 필요가 없는 단순한 애플리케이션의 경우 Node.js에 계층을 추가할 필요가 없으며 문제를 복잡하게 만들 뿐입니다.

다른 웹 서버에서 Node.js 사용

각 웹 서버에는 고유한 이점이 있습니다.예를 들어 Apache를 사용하면 .htaccess 파일을 통해 디렉터리별로 추가 구성을 수행할 수 있습니다.Nginx는 정적 파일을 제공하거나 역방향 프록시 역할을 하는 경우 성능이 우수한 것으로 알려져 있습니다.Node.js는 I/O가 많은 시스템을 다룰 때 큰 이점을 제공합니다...때때로 우리는 시스템의 요구 사항을 충족하기 위해 서로 다른 웹 서버의 힘을 결합해야 합니다.

:향후 확장될 수 있는 엔터프라이즈 수준 애플리케이션의 경우 Node.js 애플리케이션이 다음과 같은 이점을 갖기 전에 Nginx를 역방향 프록시로 설정합니다.

  • Nginx는 로드 밸런서 역할을 하여 1개 이상의 NodeJS 인스턴스에 트래픽을 전송할 수 있습니다.
  • Nginx는 HTTPS, 캐싱압축을 처리할 수 있습니다.암호화 및 압축은 노드에서 처리하는 계산량이 많은 작업입니다.JS는 잘 못해요.따라서 Nginx를 사용하면 성능이 향상됩니다.
  • Nginx는 Node.js의 로드를 줄이는 정적 콘텐츠를 제공합니다.
  • 우려 사항 분리: Nginx는 모든 "구성" 부분을 처리하고 Node.js는 애플리케이션 로직에 중점을 둡니다.

Node 앞에 NGINX를 배치하면 높은 연결 볼륨을 더 잘 처리할 수 있습니다.NGINX는 (몇 가지 예를 들어) 캐싱, 로드 밸런싱, 속도 제한(누출 버킷 알고리즘 사용)을 제공하며 Fail2ban과 같은 금지 서비스와 함께 제공되는 경우 공격을 완화할 수 있습니다.

프로덕션 애플리케이션의 경우, Redis와 같은 캐슁 서버와 함께 NGINX 뒤에 있는 애플리케이션 서버를 역방향 프록시로 실행할 수 있습니다. 이 모든 서버는 컨텐츠 제공 네트워크 뒤에 위치하여 ipv4/ipv6가 노출되지 않도록 방어할 수 있습니다.

추가:역방향 프록시가 필요한 경우에도 중요합니다. 예를 들어, 동일한 포트에서 웹 소켓 서버를 실행하거나 일부 기술 로그온을 혼합할 수도 있습니다(노드와 응답).JS 몇 가지 요청과 PHP와 함께 다른 것들 또는 무엇이든)

언급URL : https://stackoverflow.com/questions/16770673/using-node-js-only-vs-using-node-js-with-apache-nginx