일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- JVM
- flet
- 코틀린
- 뉴턴역학
- 웹 크롤링
- Java
- write by chatGPT
- write by GPT-4
- Spring boot
- kotlin
- Database
- NIO
- lombok
- android
- chatGPT's answer
- 시스템
- 리눅스
- 자바네트워크
- python
- 소프트웨어공학
- oracle
- GIT
- 고전역학
- 인프라
- 파이썬
- 역학
- 자바
- 자바암호
- 유닉스
- GPT-4's answer
- Today
- Total
Akashic Records
NGINX 부하 분산 및 Proxy 본문
NGINX는 HTTP, TCP, 그리고 UDP 트래픽에 대한 부하 분산을 지원하여, 다양한 유형의 트래픽과 서비스에 유연하게 대응할 수 있습니다. 각 프로토콜에 대한 부하 분산 설정 방법과 기법을 자세히 살펴보겠습니다.
1. HTTP 부하 분산
HTTP 부하 분산은 웹 애플리케이션 서버에 대한 요청을 관리하는 가장 흔한 경우입니다. NGINX는 HTTP 레벨에서 세션 지속성, 다양한 로드 밸런싱 알고리즘 및 동적 콘텐츠 관리를 지원합니다.
http {
upstream myapp {
server server1.example.com;
server server2.example.com;
server server3.example.com;
}
server {
listen 80;
location / {
proxy_pass http://myapp;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
}
2. TCP 부하 분산
TCP 부하 분산은 TCP 수준에서 어떤 유형의 네트워크 트래픽도 처리할 수 있습니다. 이를 통해 이메일 서버, FTP 서버 및 기타 TCP 기반 서비스의 부하를 분산할 수 있습니다.
NGINX에서 TCP 부하 분산을 설정하려면 stream
모듈을 사용해야 하며, 대부분의 경우 이 모듈이 설치되어 있지만 NGINX의 일부 버전에서는 이 모듈이 기본적으로 포함되어 있지 않을 수 있습니다. 이는 컴파일 시 --with-stream
매개변수를 포함시켜 활성화할 수 있습니다.
stream {
upstream tcpapp {
server tcpserver1.example.com:12345;
server tcpserver2.example.com:12345;
}
server {
listen 12345;
proxy_pass tcpapp;
}
}
3. UDP 부하 분산
UDP 부하 분산은 주로 스트리밍, 게임 서버, 일부 실시간 서비스에서 사용됩니다. NGINX의 stream
모듈을 사용하여 UDP 부하 분산을 설정할 수 있습니다.
stream {
upstream udpapp {
server udpserver1.example.com:12345;
server udpserver2.example.com:12345;
}
server {
listen 12345 udp;
proxy_pass udpapp;
proxy_responses 1; # UDP 응답 수 조절 (기본값 1)
}
}
4. Proxy 설정(포트 포워드)
NGINX steam 모듈을 이용해 Proxy Server기능을 설정할 수 있습니다.
user nginx;
worker_processes auto;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
stream {
server {# Real DB JMS WEB
listen 8088;
proxy_pass 10.30.1.6:8088;
}
server {# test DB JMS WEB
listen 8089;
proxy_pass 10.30.1.8:8088;
}
server {# Real DB SSH
listen 50032;
proxy_pass 10.30.1.6:50022;
}
server {# test DB SSH
listen 50033;
proxy_pass 10.30.1.8:50022;
}
}
참고: NGINX Docker Install
Docker에서 NGINX를 설치하고 TCP/UDP 스트림 프록시를 구성하는 과정은 몇 단계로 나눌 수 있습니다. 이 설정은 NGINX를 통해 TCP 또는 UDP 트래픽을 특정 내부 네트워크 서비스로 포워딩하는 데 사용됩니다.
1. NGINX Docker 이미지 준비
Docker Hub에서 공식 NGINX 이미지를 사용할 수 있으며, 필요에 따라 커스텀 NGINX 이미지를 만들어 stream
모듈을 포함시킬 수 있습니다. 여기서는 기본적인 NGINX 이미지를 사용하고, 필요한 설정을 추가하는 방식을 설명합니다.
2. NGINX 컨테이너 생성 및 구성
컨테이너를 실행하기 전에, NGINX 설정 파일을 준비하고 이를 컨테이너 내부로 마운트해야 합니다. NGINX가 TCP/UDP 트래픽을 처리하도록 stream
블록을 설정 파일에 추가합니다.
Dockerfile 예시
커스텀 NGINX 이미지를 만들기 위한 Dockerfile
:
# 기본 NGINX 이미지 사용
FROM nginx:latest
# NGINX 설정 파일 복사
COPY nginx.conf /etc/nginx/nginx.conf
COPY stream.conf /etc/nginx/stream.conf
# 포트 열기
EXPOSE 80 12345
# NGINX 실행
CMD ["nginx", "-g", "daemon off;"]
NGINX 설정 파일 (nginx.conf
)
nginx.conf
파일에서는 HTTP 설정과 함께 스트림 설정을 포함할 수 있도록 수정합니다.
user nginx;
worker_processes 1;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 80;
server_name localhost;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
}
}
include /etc/nginx/stream.conf;
스트림 설정 파일 (stream.conf
)
stream.conf
파일에서 실제로 TCP 또는 UDP 포트를 리스닝하고, 트래픽을 내부 서비스로 포워딩합니다.
stream {
server {
listen 12345; # NGINX가 TCP/UDP 트래픽을 리스닝할 포트
proxy_pass backend-service:12345; # 내부 서비스의 호스트명과 포트
}
}
3. Docker 컨테이너 실행
위의 Dockerfile
과 설정 파일을 사용하여 NGINX 컨테이너를 빌드하고 실행합니다.
docker build -t custom-nginx .
docker run -d -p 80:80 -p 12345:12345 custom-nginx
이 명령은 NGINX 컨테이너를 백그라운드에서 실행하고, 호스트의 80번(HTTP)과 12345번 포트(TCP/UDP)를 컨테이너에 연결합니다.
'Library' 카테고리의 다른 글
DevSecOps에서 자동화를 적용하는 방법 (0) | 2024.10.10 |
---|---|
DevSecOps 란 무엇인가 (0) | 2024.10.10 |
NGINX 설정 (0) | 2024.09.10 |
NGINX 기본 개념 및 설치하기 (2) | 2024.09.09 |
Java ProcessBuilder와 Process API (1) | 2024.04.26 |