Nginx역할대리 기술적 분석: 워크로드 분산을 위한 URL루팅 전략

사이트의 규모가 급증함에 따라 서버 수가 2년 전의 수십 대에서 2개 데이터센터로 확장된 400대 서버와 수십 대의 WebApi 사이트, 수십 개의 도메인을 운영 중입니다.

이처럼 많은 WebApi 사이트와 도메인을 관리하고유지보수 하는 것은 상당한 비용이 발생합니다.

향후 규모 확장에 대비해 일원화된 도메인 관리 체계를 구축하고 Nginx를 통해 역할대리와 동적 라우팅을 수행할 계획입니다.

실제 운영 환경을 바탕으로 어떤 방식으로 작업이 진행되는지 살펴보겠습니다.

예를 들어: http://api.***.com/action 요청이 들어오면 http://192.168.0.11/api/action로转发됩니다.

  • Header: *** Header: ***
  • Body: *** Body: ***

요청된 Action에 따른 내부 서버 주소를 동적으로 파싱한 후 서비스를 전달합니다.

  1. Nginx의 기술적 기반
  • HTTP 기반 기능: 정적 파일 서비스, 인덱스 파일 자동 생성, 인덱스 페이지 자동 열람
  • 역할대리 및 로드밸런싱
  • FastCGI 통합 지원
  • 모듈화 구조로 필터링 기능 (gzip, byte range, chunked 응답, SSI)
  • SSL/TLS SNI 지원
  • IP 기반 가상호스트 서비스
  • Memcached 통합 지원
  • keep-alive 및 파이프라인 연결 지원
  • 재구성 및 온라인 업그레이드 지원
  • _access log_ 기능 및로그 버퍼링
  • 4xx-5xx 오류 코드 리다이렉션
  • PCRE 기반 URL 라우팅
  • 클라이언트 IP 및 HTTP 기본 인증 지원
  • PUT, DELETE, MKCOL 메서드 지원
  • FLV 파일 지원
  • 밴드 보너스 제어
  1. 메일 프로토콜 역할대리 기능
  • 외부 HTTP 인증서버를 통해 IMAP/POP3 뒷단 서버로 연결
  • SMTP 서비스 연결
  • 인증 방법: POP3(APOP, AUTH LOGIN PLAIN CRAM-MD5), IMAP(LOGIN), SMTP(AUTH LOGIN PLAIN CRAM-MD5)
  • SSL/TLS 지원
  • IMAP/POP3 모드에서 STARTTLS/STLS 지원
  1. 운영체제 호환성
  • FreeBSD 3.x, 4.x, 5.x, 6.x (i386, amd64)
  • Linux 2.2, 2.4, 2.6 (i386, amd64)
  • Solaris 8, 9 (i386, sun4u, amd64)
  • MacOS X 10.4 PPC
  1. Nginx의 핵심적 운영 사례
  • 웹 서버로운용: Apache 대비 더 적은 자원 사용, 더 많은 동시 접속 대수용, 이는 가상호스트 서비스 제공업체에게도 인기
  • 로드밸런싱 서버로운용: 내부적으로 Rails 및 PHP를 지원하거나 외부로 서비스를 제공
  • 메일 역할대리 서버로운용: 우수한 성능을 발휘
  1. CentOS에서의 Nginx 설치 및 운영 필요한 도구 설치
sudo yum install gcc gcc-c++ make automake autoconf libtool

PCRE 설치

sudo yum install pcre pcre-devel

Zlib 설치

sudo yum install zlib zlib-devel

OpenSSL 설치

sudo yum install openssl openssl-devel

Nginx 설치

sudo yum install nginx
  1. 역할대리 설정 URL 사용 계획을 명확히 세우는 것이 중요합니다. 이는 향후 확장성 및 관리 용이성을 결정짓기 때문입니다.

Nginx의 URI 매칭 방식:

  • =: 정확한 경로 일치
  • ^~: 경로가 특정 문자열로 시작하는 경우
  • ~: 정규표현식 일치 (대소문자 구별)
  • ~*: 정규표현식 일치 (대소문자 무시)
  • /: 모든 요청에 적용되는 기본 매칭

로드밸런싱 예제

upstream backend-servers {
    server 192.168.0.11:8080;
    server 192.168.0.12:8080;
}

server {
    listen 80;
    server_name example.com;

    location /api/ {
        proxy_pass http://backend-servers;
    }
}
  1. 동적 라우팅 Nginx의 upstream 모듈은 고정된 라우팅 테이블을 사용합니다. 이는 유지보수에 어려움을 초래할 수 있습니다. 대신 Lua 및 Redis와의 통합을 통해 동적 라우팅을 구현할 수 있습니다.

추천资구

  • OpenResty: Nginx와 Lua를 결합한 고성능 플랫폼

참고자료

  • OpenResty 공식 문서
  • Lua 언어 문서

태그: nginx Lua 역할대리 로드밸런싱 웹서버

7월 14일 17:44에 게시됨