Nginx로 NodeJS 컨테이너 확장 및 로드 밸런싱
운 좋게도 Nginx를 사용한 Docker 및 Docker-compose는 작업을 쉽게 완료할 수 있습니다.
Docker는 서버를 원하는 수만큼 쉽게 확장할 수 있습니다. Docker-compose를 사용하면 항상 많은 명령
docker
을 입력할 필요가 없으므로 작업이 더욱 쉬워집니다.좋습니다. Docker를 사용하여 서버를 3개로 복제했다고 가정해 보겠습니다. 즉, NodeJS 애플리케이션이 이제 3개의 복제 컨테이너에서 실행되고 있습니다. 문제는 각 서버가 언제 요청을 처리해야 하는지 어떻게 알 수 있는가 하는 것입니다. Nginx가 들어옵니다.
Nginx: The software load balancer, reverse proxy, web server, & content cache with the enterprise features and support you expect.
Nginx의 핵심은 웹 서버입니다.
3개의 컨테이너가 실행 중이고 그 중 하나가 언제 발생하여 요청을 처리해야 하는지 알지 못하는 동안 Nginx는 로드 밸런싱 기능으로 이러한 상황을 도울 수 있습니다.
Load balancing refers to efficiently distributing incoming network traffic across a group of backend servers, also known as a server farm or server pool. - Nginx
이 경우 Nginx는 클라이언트 요청과 3개의 서버 사이에 있는 프록시 서버 역할을 합니다.
© 피닉스냅
새로운 요청이 들어오면 Nginx는 이를 수락하고 서버 중 하나로 라우팅합니다. 시간당 트래픽을 라우팅할 서버를 알려주는 데 사용하는 3개의 알고리즘이 있습니다. 이러한 알고리즘의 기본값은 라운드 로빈입니다.
라운드 로빈:
첫 번째 요청은 server1에, 두 번째는 server2에, 세 번째는 server3에 요청한 다음 반복합니다.
NodeJS 서버가 포트 3000에서 수신 중이라고 가정하면 간단한 docker-compose 스크립트는 다음과 같습니다.
version: '3.9'
services:
nodeapp:
build: .
ports:
- "3000"
nginx:
image: nginx:latest
ports:
- "4000:80"
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf
docker-compose.yml
작성 스크립트는 Dockerfile에서 NodeJS 앱을 빌드하고 Docker 공용 레지스트리에서 Nginx 서버를 가져옵니다.
nodeapp
서비스는 지정된 시간에 단일 시스템만 호스트 포트에 매핑할 수 있기 때문에 특정 호스트 포트에 매핑되지 않습니다. 그러나 nginx 서버는 호스트의 4000에 매핑된 포트 80에서 요청을 받습니다.또한 nginx에 구성 파일을 작성하여 빌드할 수 있도록
volumes
지시어를 추가했습니다. 이 구성은 이 설정의 핵심입니다.events {
worker_connections 4096;
}
http {
server {
listen 80;
location / {
proxy_pass http://nodeapp:3000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
}
nginx.conf
Nginx는 포트
/
에서 80
(홈 경로)를 수신한 다음 nodeapp
지시문을 사용하여 포트 3000
에서 proxy_pass
로 트래픽을 라우팅합니다.Dockerfile 및 간단한 Express 앱을 포함한 전체 스크립트는 내 Github에서 사용할 수 있습니다https://github.com/zeelz/zeelz-developer/tree/nodejs-docker-compose-nginx.
Reference
이 문제에 관하여(Nginx로 NodeJS 컨테이너 확장 및 로드 밸런싱), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/zeelz/scaling-load-balancing-nodejs-containers-with-nginx-2fc0텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)