"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > Node.js 애플리케이션용 NGINX: 정의, 이유, 사용 방법

Node.js 애플리케이션용 NGINX: 정의, 이유, 사용 방법

2024-11-04에 게시됨
검색:137

NGINX for Node.js Applications: What, Why, and How to Use It

Node.js 애플리케이션을 확장하고 최적화할 때 NGINX는 높은 트래픽을 처리하고 정적 파일을 효율적으로 제공하며 로드 밸런서 역할을 하는 데 중요한 역할을 합니다. 고성능 웹 서버인 NGINX는 역방향 프록시로도 작동하여 여러 서버에 요청을 분산시킬 수 있습니다. 이 글에서는 NGINX가 무엇인지, Node.js와 함께 사용해야 하는 이유, 역방향 프록시, 로드 밸런싱, 정적 콘텐츠 제공을 포함한 다양한 작업을 위해 NGINX를 구성하는 방법을 다룹니다.

NGINX란 무엇인가요?

NGINX("엔진 X"로 발음)는 고성능으로 많은 수의 동시 연결을 처리하도록 설계된 강력한 웹 서버 및 역방향 프록시입니다. 처음에는 웹 서버로 생성된 NGINX의 다용성으로 인해 로드 밸런싱, 역방향 프록시 및 정적 파일 제공으로 확장되었습니다.

Nginx를 Node.js와 함께 사용하는 이유는 무엇인가요?

  • 효율적인 로드 밸런싱: NGINX는 여러 Node.js 인스턴스에 트래픽을 분산하여 확장성을 향상할 수 있습니다.
  • 역방향 프록시: 클라이언트와 백엔드 Node.js 서버 사이의 중개 서버 역할을 하여 애플리케이션 아키텍처를 숨기고 요청 균형을 맞추는 데 도움을 줍니다.
  • 정적 콘텐츠 처리: NGINX는 이미지, CSS, JavaScript와 같은 정적 파일을 제공하여 Node.js를 이 작업에서 해방하고 성능을 향상시킬 수 있습니다.
  • SSL 종료: NGINX는 SSL(TLS) 암호화를 처리하여 Node.js의 부담을 덜어주고 보안을 향상시킬 수 있습니다.

Node.js로 NGINX 설정

Node.js용 NGINX를 구성하려면 다음 단계를 따르세요.

1단계: NGINX 설치

먼저 서버에 NGINX를 설치해야 합니다. 운영 체제에 따라 다음 명령을 사용하십시오.

Ubuntu/Debian의 경우:

sudo apt update
sudo apt install nginx

CentOS/RHEL의 경우:

sudo yum install nginx

설치 후 다음 명령을 사용하여 NGINX를 시작할 수 있습니다.

sudo systemctl start nginx

브라우저에서 서버의 IP 주소를 방문하여 NGINX가 실행 중인지 확인할 수 있습니다. NGINX가 작동하는 경우 기본 NGINX 시작 페이지가 표시됩니다.

2단계: NGINX를 Node.js용 역방향 프록시로 구성

NGINX를 역방향 프록시로 활성화하여 클라이언트 요청을 Node.js 애플리케이션으로 전달할 수 있도록 하려면 그에 따라 NGINX를 구성해야 합니다.

다음은 localhost:3000에서 실행되는 Node.js 애플리케이션에 대한 NGINX 구성의 예입니다.

  1. NGINX 구성 디렉터리로 이동합니다.
   cd /etc/nginx/sites-available/
  1. Node.js 애플리케이션을 위한 새 NGINX 구성 파일을 만듭니다.
   sudo nano nodeapp.conf
  1. 다음 구성을 추가합니다.
server {
    listen 80;
    server_name your_domain_or_IP;

    location / {
        proxy_pass http://localhost:3000;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
    }
}
  1. 사이트 활성화 디렉터리에 대한 심볼릭 링크를 생성하여 구성을 활성화합니다.
   sudo ln -s /etc/nginx/sites-available/nodeapp.conf /etc/nginx/sites-enabled/
  1. NGINX 구성에서 구문 오류가 있는지 테스트합니다.
   sudo nginx -t
  1. 모든 것이 정상이면 NGINX를 다시 시작하세요.
   sudo systemctl restart nginx

이 설정은 포트 80에서 들어오는 모든 트래픽을 포트 3000에서 실행되는 Node.js 애플리케이션으로 라우팅합니다.

Node.js용 로드 밸런서로서의 NGINX

Node.js 애플리케이션이 성장하면 단일 인스턴스로는 트래픽을 처리하기에 충분하지 않을 수 있습니다. NGINX는 로드 밸런서로 구성되어 여러 Node.js 인스턴스에 트래픽을 분산시킬 수 있습니다.

로드 밸런싱을 위해 NGINX를 구성하는 방법은 다음과 같습니다.

  1. NGINX 구성 파일(nodeapp.conf)을 생성하거나 편집합니다.
   sudo nano /etc/nginx/sites-available/nodeapp.conf
  1. 부하 분산을 활성화하려면 다음 구성을 추가하세요.
upstream node_backend {
    server localhost:3000;
    server localhost:3001;
    server localhost:3002;
}

server {
    listen 80;
    server_name your_domain_or_IP;

    location / {
        proxy_pass http://node_backend;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
    }
}
  1. 파일을 저장하고 구성을 테스트한 후 NGINX를 다시 시작하세요.
sudo nginx -t
sudo systemctl restart nginx

설명:

  • 업스트림 블록은 여러 Node.js 서버(localhost:3000, localhost:3001 및 localhost:3002)를 정의하며 NGINX는 이러한 서버 간에 들어오는 트래픽의 균형을 유지합니다.
  • NGINX는 기본적으로 라운드 로빈 알고리즘을 사용하여 각 서버에 차례로 요청을 보냅니다.

이 설정은 여러 Node.js 인스턴스에 로드를 균등하게 분산하여 확장성과 내결함성을 향상시킵니다.

NGINX로 정적 콘텐츠 제공

이미지, CSS, JavaScript와 같은 정적 파일을 제공하면 Node.js 애플리케이션에 부담을 줄 수 있습니다. NGINX는 이러한 책임을 덜어내고 정적 자산을 직접 제공하여 성능을 향상시킬 수 있습니다.

  1. 정적 파일용 디렉터리를 만듭니다(예: /var/www/html/static/).
   sudo mkdir -p /var/www/html/static
  1. 정적 파일(CSS, 이미지, JS)을 이 디렉터리로 이동하세요.

  2. 정적 파일을 제공하도록 NGINX 구성(nodeapp.conf)을 업데이트하세요.

server {
    listen 80;
    server_name your_domain_or_IP;

    location /static/ {
        root /var/www/html;
    }

    location / {
        proxy_pass http://localhost:3000;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
    }
}
  1. 구성을 테스트하고 NGINX를 다시 시작하세요.
sudo nginx -t
sudo systemctl restart nginx

설명:

  • 정적 파일(예: your_domain_or_IP/static/style.css)에 대한 요청은 /var/www/html/static/ 디렉터리에서 NGINX에 의해 직접 제공되므로 Node.js 서버의 로드가 줄어듭니다.

NGINX를 통한 SSL 종료

클라이언트와 서버 간의 보안 통신은 매우 중요하며 SSL(Secure Sockets Layer)이 해당 암호화를 제공합니다. NGINX는 SSL 종료를 처리할 수 있습니다. 즉, HTTPS 요청을 Node.js 애플리케이션에 전달하기 전에 암호화 및 암호 해독을 처리합니다.

NGINX로 SSL을 구성하는 방법은 다음과 같습니다.

  1. SSL 인증서를 받으세요. Let's Encrypt에서 무료 SSL 인증서를 얻거나 다른 인증 기관을 사용할 수 있습니다.

  2. SSL을 활성화하려면 NGINX 구성을 수정하세요.

server {
    listen 443 ssl;
    server_name your_domain_or_IP;

    ssl_certificate /etc/ssl/certs/your_domain.crt;
    ssl_certificate_key /etc/ssl/private/your_domain.key;

    location / {
        proxy_pass http://localhost:3000;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
    }
}

server {
    listen 80;
    server_name your_domain_or_IP;

    # Redirect all HTTP requests to HTTPS
    return 301 https://$host$request_uri;
}
  1. NGINX를 테스트하고 다시 시작합니다.
sudo nginx -t
sudo systemctl restart nginx

설명:

  • listen 443 SSL 지시문은 NGINX가 HTTPS 트래픽을 수신하도록 보장합니다.
  • ssl_certificate 및 ssl_certificate_key는 SSL 인증서 및 개인 키의 경로를 지정합니다.
  • HTTP에서 HTTPS로 리디렉션하면 모든 트래픽이 SSL을 사용하게 됩니다.

결론

NGINX는 Node.js 애플리케이션의 성능, 확장성 및 보안을 향상시키는 강력한 도구입니다. 로드 밸런싱부터 정적 파일 제공 및 SSL 종료 처리에 이르기까지 NGINX는 Node.js에서 많은 작업을 오프로드하여 애플리케이션이 가장 잘 수행하는 작업, 즉 비즈니스 로직 처리에 집중할 수 있도록 합니다. 이 문서에 제공된 구성을 사용하면 NGINX를 설정하여 Node.js 애플리케이션의 효율성과 안정성을 향상시킬 수 있습니다.

릴리스 선언문 이 기사는 https://dev.to/imsushant12/nginx-for-nodejs-applications-what-why-and-how-to-use-it-1gbn?1에서 복제됩니다. 침해가 있는 경우, Study_golang에 문의하세요. @163.com 삭제
최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3