본문 바로가기
리눅스&서버/우분투

우분투 서버 하나에서 여러 node js 프로젝트 실행시키기

by 인생여희 2023. 11. 9.

우분투 서버 하나에서 여러 node js 프로젝트 실행시키는 법

(nginx 설정 파일)

 

여러개의 Node.js 프로젝트를 하나의 우분투 서버에서 운영하려면 Nginx를 리버스 프록시로 사용하면 됩니다. 각 도메인에 대해 별도의 Nginx 서버 블록 설정을 만들어주면 됩니다.

다음은 설정 방법입니다:

1. 먼저 각 Node.js 애플리케이션에 대해 포트를 다르게 설정합니다. 예를 들어, 프로젝트1은 3000번 포트, 프로젝트2는 3001번 포트에서 실행되도록 설정할 수 있습니다.

2. Nginx 설정 파일을 열어서, 각 도메인에 대한 서버 블록을 생성합니다. 설정 파일은 보통 /etc/nginx/sites-available/default에 위치해 있습니다.

프로젝트1에 대한 설정은 다음과 같습니다:

server {
    listen 80;
    server_name http://www.project1.com;

    location / {
        proxy_pass http://localhost:3000; # Node.js 앱이 실행중인 주소
        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;
    }
}



프로젝트2에 대한 설정은 다음과 같습니다:

server {
    listen 80;
    server_name http://www.project2.com;

    location / {
        proxy_pass http://localhost:3001; # Node.js 앱이 실행중인 주소
        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;
    }
}



3. 설정을 마친 후에는 Nginx를 재시작해야 합니다. 이는 sudo service nginx restart 명령어를 통해 할 수 있습니다.

이렇게 하면, 각각의 도메인에 대해 별도의 Node.js 애플리케이션이 우분투 서버에서 동작하게 됩니다. 

 

Nginx와 Node.js를 함께 사용할때의 장점


1. 효율적인 로드 밸런싱: Nginx는 로드 밸런서로서의 역할을 수행하여 여러 Node.js 인스턴스 간에 트래픽을 분산시킬 수 있습니다. 이는 시스템의 가용성을 높이고 병목 현상을 줄입니다.

2. 정적 파일 처리: Node.js는 동적 콘텐츠를 처리하는 데 유용하지만, 정적 파일(이미지, CSS, JavaScript 파일 등)을 서비스하는 데에는 비효율적일 수 있습니다. Nginx는 정적 콘텐츠를 효율적으로 제공하므로, 이를 Node.js 앞에 두면 이런 부분을 보완할 수 있습니다.

3. SSL/TLS 처리: SSL/TLS 인증서를 설정하고 관리하는 것은 복잡한 작업일 수 있습니다. Nginx를 사용하면 이러한 작업을 간소화하고, 보안 연결을 효율적으로 처리할 수 있습니다.

4. 캐싱과 압축: Nginx는 웹 페이지의 캐싱 및 압축을 처리하여 페이지의 로딩 시간을 줄이고, 전송해야 할 데이터의 양을 줄일 수 있습니다.

5. 역방향 프록시: Nginx는 역방향 프록시로서 동작하여, 클라이언트와 서버 사이에서 트래픽을 중계합니다. 이는 서버의 보안을 강화하고, 서버의 실제 IP 주소를 숨길 수 있습니다.

따라서 Nginx와 Node.js를 함께 사용하면, 각각의 장점을 살릴 수 있어 효율적인 웹 서비스 운영이 가능합니다.

 

 

SSL/TLS 설정하는법

 

SSL/TLS 설정은 웹 애플리케이션의 보안을 강화하는 중요한 단계입니다. SSL/TLS 인증서는 사용자와 서버 사이의 통신을 암호화하여 정보를 안전하게 보호합니다.

Nginx에서 SSL/TLS 설정을 하려면, 먼저 SSL/TLS 인증서를 구해야 합니다. 인증서는 유료로 제공하는 곳도 있지만, Let's Encrypt와 같은 무료 인증서 발급 기관을 이용할 수도 있습니다.

아래는 Nginx에서 SSL/TLS 설정을 하는 기본적인 방법입니다:

1. 인증서 및 개인키 설치: SSL/TLS 인증서(server.crt)와 개인키(server.key)를 서버에 설치합니다. 일반적으로 이 파일들은 /etc/nginx/ssl/ 디렉토리에 저장합니다.

2. Nginx 설정 업데이트: Nginx 설정 파일을 열어서 SSL/TLS 설정을 추가합니다. 설정 파일은 보통 /etc/nginx/sites-available/default에 위치해 있습니다.

아래는 SSL/TLS 설정을 추가한 Nginx 설정 예시입니다:

server {
    listen 80;
    server_name domain.com;
    return 301 https://$host$request_uri;  # 모든 http 요청을 https로 리다이렉트
}

server {
    listen 443 ssl;

    server_name domain.com;

    ssl_certificate /etc/nginx/ssl/server.crt;  # 인증서 경로
    ssl_certificate_key /etc/nginx/ssl/server.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;
    }
}


3. Nginx 재시작: 설정을 마친 후에는 Nginx를 재시작해야 합니다. 이는 sudo service nginx restart 명령어를 통해 할 수 있습니다.
이렇게 설정하면, 사용자는 https://를 통해 안전하게 웹 애플리케이션에 접근할 수 있습니다. 

 

하나의 서버에 여러 프로젝트에 ssl 적용시키는 법

 

먼저 각 프로젝트에 대해 서로 다른 도메인 또는 서브 도메인을 사용하고, 각각에 대해 별도의 SSL/TLS 인증서를 구해야 합니다.
Nginx 설정은 각 도메인에 대해 별도의 서버 블록을 생성하면 됩니다. 아래는 프로젝트1과 프로젝트2에 대한 설정 예시입니다:

server {
    listen 80;
    server_name http://www.project1.com;
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl;
    server_name http://www.project1.com;

    ssl_certificate /etc/nginx/ssl/project1.crt;  # 프로젝트1 인증서 경로
    ssl_certificate_key /etc/nginx/ssl/project1.key;  # 프로젝트1 개인키 경로

    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 http://www.project2.com;
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl;
    server_name http://www.project2.com;

    ssl_certificate /etc/nginx/ssl/project2.crt;  # 프로젝트2 인증서 경로
    ssl_certificate_key /etc/nginx/ssl/project2.key;  # 프로젝트2 개인키 경로

    location / {
        proxy_pass http://localhost:3001;
        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;
    }
}



위와 같이 설정하면, 각 프로젝트는 서로 다른 SSL/TLS 인증서를 사용합니다. 이렇게 하면 하나의 서버에서 여러 개의 Node.js 프로젝트를 안전하게 운영할 수 있습니다.