본문 바로가기
PROJECT

[PROJECT] Nginx 로드밸런싱 설정

by 아이엠제니 2023. 9. 23.

 


 

os: Ubuntu 22.04.2 LTS
nginx version: nginx/1.18.0 (Ubuntu)

 

 

💡 Nginx 설치

 

1. 패키지 업데이트

sudo apt update

 

2. Nginx 설치

sudo apt install nginx

 

3. Nginx 시작

sudo systemctl start nginx

 

4. Nginx 상태 확인

sudo systemctl status nginx

 

 


💡 SSL PEM 키

오픈 SSL 또는 발급받은 유료 SSL cer.pem이랑 kye.pem을 자신이 설정한 경로로 옮긴다.

나는 MobaXterm을 사용해서, ssl 폴더 자체를 커맨드 창을 이용해 해당 경로로 옮겼다.

MobaXterm에서 기본 경로는 /home/ubuntu 로 설정되어 있는 것 같다.

그래서 실제 폴더를 옮길 때는

 

sudo mv ssl /etc/nginx

 

이렇게 옮겼다.

ssl 디렉토리를 nginx 티렉토리 안으로 옮기기.

그럼 ssl 디렉토리의 최종 경로는 아래와 같다.

 

/home/ubuntu/etc/nginx/ssl

 

 


💡 Nginx 설정 파일 작성

  • 서버의 동작 및 가상 호스트(Viretual Host)를 정의하는 데 사용됨
  • /etc/Nginx/sites-availalbe/default
# upstream 블록 정의
upstream frontend-server {
  server 0.0.0.0:80; # 프론트 서버 1 (apache2)
  server 0.0.0.0:80; # 프론트 서버 2 (apache2)
}

server {
    listen       80;
    listen  [::]:80;
    server_name *.co.kr; # 대표 도메인
    
    # HTTP에서 HTTP로 리다이렉션
    return 301 https://$server_name$request_uri;
}

server {
    listen       443 ssl;
    listen  [::]:443 ssl;
    server_name  *.co.kr; # 대표 도메인
    ssl_certificate /etc/nginx/ssl/crt.pem;
    ssl_certificate_key /etc/nginx/ssl/key.pem;

    location / {
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header Host $host;
        proxy_set_header REMOTE_ADDR $remote_addr;
        proxy_set_header X-Forwarded-Host $host;
        proxy_set_header X-Forwarded-Server $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_buffer_size          256k;
        proxy_buffers              4 256k;
        proxy_busy_buffers_size    512k;
        proxy_connect_timeout 300s;
        proxy_send_timeout 300s;
        proxy_read_timeout 600s;
        send_timeout 300s;

        proxy_redirect off;
        proxy_pass http://frontend-server; # 로드 밸런싱 위해 upstream 블록 사용
    }

    location = /favicon.ico {
    return 204;
    access_log     off;
    log_not_found  off;
}
}

 

  1. proxy_http_version 1.1; : 프록시로 전송되는 HTTP 버전을 1.1로 설정함. HTTP/1.1을 사용하는 웹 서버와의 상호 작용을 나타냄
  2. proxy_set_header Upgrade $http_upgrade; : WebSocket 연결과 같은 업그레이드 가능한 연결에 대한 업그레이드 요청을 전달함. 이를 통해 업그레이드 가능한 프로토콜을 지원하는 서버와의 상호 작용이 가능해짐
  3. proxy_set_header Connection "upgrade" :  연결을 "업그레이드"로 설정하여 업그레이드 가능한 연결을 활성화함
  4. proxy_set_header Host $host; : 프록시 서버로 전달되는 요청 헤더에서 호스트 헤더를 설정함. 이것은 원격 서버로 요청을 전달할 때 호스트 정보를 유지하도록 함
  5. proxy_set_header ROMOTE_ADDR $remote_addr; : 원격 주소 정보를 전달함. 이는 원격 서버가 클라이언트의 IP 주소를 인식할 수 있게 함
  6. proxy_set_header X-Forwarded-Host $host; : 전달된 요청의 호스트 정보를 설정함. 이것은 프록시 서버를 거치는 경우 원격 서버가 호스트 정보를 올바르게 이해할 수 있도록 함
  7. proxy_set_header X-Forwarded-Server $host; : 전달된 요청의 서버 정보를 설정함. 이것은 프록시 서버를 거치는 경우 원격 서버가 서버 정보를 올바르게 이해할 수 있도록 함
  8. proxy_set_header X-Forwarded-For $Proxy_Add_x_forwarded_for; : 전달된 요청의 클라이언트 IP 주소를 설정함. 이것은 프록시 서버를 거치는 경우 원격 서버가 클라이언트의 IP 주소를 올바르게 식별할 수 있도록 함
  9. proxy_set_header X-Forwarded-Proto $scheme; : 전달된 요청의 프로토콜 정보를 설정함. 이것은 HTTPS와 같은 보안 프로토콜을 사용하는 경우 원격 서버가 이를 올바르게 인식할 수 있도록 함
  10. proxy_buffer_size 256k;, proxy_buffers 4 256k;, proxy_busy_buffers_size 512k; :  프록시 버퍼의 크기 및 관련 설정을 지정함. 이러한 설정은 프록시 서버의 버퍼 크기를 제어하며, 특히 대용량 파일을 프록시할 때 유용함
  11. proxy_connect_timeout 300s;, proxy_ssend_timeout 300s;, proxy_read_timeout 600s;, send_timeout 300s; : 프록시 연결 및 타임아웃 설정을 지정함. 각각 연결 제한 시간, 송신 제한 시간, 수신 제한 시간, 전체 요청 타임아웃을 설정함

 

 


💡 Nginx 재시작

1. 설정 파일 저장 및 심볼릭 링크 생성

이미 되어 있으면 할 필요 없음

sudo ln -s /etc/nginx/sites-available/default /etc/nginx/sites-enabled/

 

2. 설정 파일 유효성 검사

sudo nginx -t

 

3. Nginx 재시작

sudo systemctl restart nginx

 

4, 오류 로그 확인

sudo tail -f /var/log/nginx/error.log
300x250