Development/Environment

Nginx :: 이중화, SSL, WebSocket

고고마코드 2022. 12. 5. 16:39
반응형

각 서버의 포트별로 나누어 이중화 하는 방법

데이터베이스 이중화는 MySQL/MariaDB :: 단방향, 양방향 이중화 (Replication) 에서 확인할 수 있습니다.


테스트 서버 정보

  • 대상서버: 0.0.0.1
  • 대상포트: 5000, 5010, 5020

Nginx 환경 설정 (기본)

SSL 인증없이 HTTP로 접속하는 경우

upstream serv_a {
    server 0.0.0.1:5000;
    server 0.0.0.1:5000 backup;
}
upstream serv_b {
    server 0.0.0.1:5010;
    server 0.0.0.1:5010 backup;
}
upstream serv_c {
    server 0.0.0.1:5020;
    server 0.0.0.1:5020 backup;
}

server {
    listen      5000;
    server_name example.com;

    location / {
        proxy_pass http://server_a
    }
}

server {
    listen      5010;
    server_name example.com;

    location / {
        proxy_pass http://server_b
    }
}

server {
    listen      5020;
    server_name example.com;

    location / {
        proxy_pass http://server_c
    }
}

backup이 되는 서버는 기본 서버가 죽었을 경우 자동으로 backup 서버로 연결된다.

SSL 추가

SSL 인증서를 등록하는 과정

server {
    listen      5000 ssl;
    server_name example.com;

    ssl_certificate /etc/nginx/ssl/example.com.crt;
    ssl_certificate_key /etc/nginx/ssl/example.com.key;
    ssl_protocols TLSv1.2 TLSv1.3;

    location / {
        proxy_pass https://npm;
    }
}
  • listen
    사용하려는 포트 뒤에 ssl 을 추가한다.
  • ssl_certificate
    인증서 파일의 경로
    Nginx 이중화 할 때에는 도메인 인증서를 그대로 사용하면 안 된다.
    도메인 인증서, 중간 인증서, 루트 인증서 를 합친다.
    중간 인증서가 없다면 도메인 인증서와 루트 인증서만 합쳐도 된다.
    이렇게 합친 인증서를 사용해야 한다.
    $ cat [도메인인증서] [중간인증서] [루트인증서] > [원하는이름.crt]
  • ssl_certificate_key
    인증서 개인키의 경로
  • ssl_protocols
    사용하려는 ssl 프로토콜
  • proxy_pass
    https로 변경

WebSocket 사용 시

WebSocket 사용 시 failed: Error during WebSocket handshake 에러가 발생한다면 아래 코드를 추가

server {
    listen      5000 ssl;
    server_name example.com;

    ssl_certificate /etc/nginx/ssl/example.com.crt;
    ssl_certificate_key /etc/nginx/ssl/example.com.key;
    ssl_protocols TLSv1.2 TLSv1.3;

    location / {
        proxy_pass https://npm;

        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header Host $host;
    }
}

location 내에 header 정보 추가


참고자료

🔥NginX SSL 인증서 설치/적용 가이드

🔥Nginx에서 SSL 적용해서 https 로 접속 되게 해볼까?


반응형