TIL - 20251219

juni·2025년 12월 19일

TIL

목록 보기
212/316

1219 서버 관리 심화: 가상 호스트와 리버스 프록시 (Nginx)


✅ 1. 가상 호스트 (Virtual Host)

  • 가상 호스트하나의 물리적인 서버(하나의 IP 주소)에서 여러 개의 다른 도메인 이름을 가진 웹사이트를 운영할 수 있게 해주는 기술입니다.

  • 예시: example.comanother-site.org라는 두 개의 다른 웹사이트를 서버 한 대로 동시에 서비스하는 것.

  • 동작 원리:

    1. 클라이언트(브라우저)가 서버에 HTTP 요청을 보낼 때, 요청 헤더(Header)에는 자신이 접속하려는 호스트(Host)의 도메인 이름이 포함됩니다. (e.g., Host: example.com)
    2. 웹 서버(Nginx)는 이 Host 헤더 값을 보고, 여러 server 블록 설정 중에서 server_name이 일치하는 설정을 찾아 해당 웹사이트의 콘텐츠를 응답합니다.

➕ Nginx에서의 가상 호스트 설정

  • Nginx에서는 server 블록 하나가 가상 호스트 하나에 해당합니다. nginx.conf 파일에 여러 개의 server 블록을 작성하여 가상 호스트를 구성할 수 있습니다.

  • 관리의 용이성을 위한 설정 파일 분리:

    • 모든 server 블록을 nginx.conf에 다 넣으면 파일이 너무 길고 복잡해집니다.
    • 모범 사례: /etc/nginx/conf.d/ 디렉토리 안에, 각 사이트별로 별도의 설정 파일(e.g., example.com.conf, another-site.org.conf)을 만들어 관리합니다. Nginx는 시작 시 이 디렉토리 안의 *.conf 파일들을 자동으로 모두 읽어들입니다.
    # /etc/nginx/conf.d/example.com.conf
    
    server {
        listen 80;
        server_name example.com www.example.com;
    
        root /var/www/example.com/html;
        index index.html;
    
        location / {
            try_files $uri $uri/ =404;
        }
    }
    # /etc/nginx/conf.d/another-site.org.conf
    
    server {
        listen 80;
        server_name another-site.org;
    
        root /var/www/another-site.org/html;
        index index.html;
    
        location / {
            try_files $uri $uri/ =404;
        }
    }

✅ 2. 리버스 프록시 (Reverse Proxy)

  • 프록시(Proxy)는 클라이언트와 서버 사이에서 요청과 응답을 중개하는 서버를 의미합니다.
    • 포워드 프록시 (Forward Proxy): 클라이언트 쪽에 위치하며, 클라이언트를 대신하여 인터넷에 접속. (e.g., 사내망에서 특정 사이트 접근, 캐싱)
    • 리버스 프록시 (Reverse Proxy): 서버 쪽에 위치하며, 클라이언트의 요청을 받아서 내부 서버(WAS)로 전달하고, 그 응답을 다시 클라이언트에게 전달. 클라이언트는 자신이 실제 WAS가 아닌 리버스 프록시와 통신하고 있음을 알지 못합니다.

➕ 리버스 프록시의 주요 역할 및 장점

  1. 로드 밸런싱 (Load Balancing):

    • 리버스 프록시가 여러 대의 내부 WAS로 요청을 분산시켜, 단일 서버의 과부하를 방지하고 가용성을 높입니다.
  2. 보안 (Security):

    • 실제 WAS의 IP 주소나 포트와 같은 내부 구조를 외부에 숨길 수 있습니다.
    • 리버스 프록시 서버에서만 보안 설정을 강화(SSL, 방화벽 등)하여, 내부 서버들을 보호할 수 있습니다.
  3. SSL 암호화 처리 (SSL Offloading):

    • HTTPS 통신에 필요한 복잡한 암호화/복호화 작업을 리버스 프록시(Nginx)가 전담하고, 내부 WAS와는 가벼운 HTTP로 통신합니다. 이를 통해 WAS는 비즈니스 로직 처리에만 집중할 수 있습니다.
  4. 캐싱 (Caching):

    • 자주 요청되는 정적 콘텐츠를 리버스 프록시가 캐싱해두었다가, WAS까지 요청을 전달하지 않고 즉시 응답하여 성능을 향상시킵니다.

➕ Nginx를 이용한 리버스 프록시 설정

  • location 블록 내에서 proxy_pass 지시어를 사용하여 요청을 전달할 내부 서버의 주소를 지정합니다.

    # /etc/nginx/conf.d/my-app.conf
    
    server {
        listen 80;
        server_name my-app.com;
    
        # '/' 경로로 들어오는 모든 요청을 처리
        location / {
            # 요청을 http://127.0.0.1:8080 (로컬에서 실행 중인 Spring Boot WAS)로 전달
            proxy_pass http://127.0.0.1:8080;
    
            # 클라이언트의 실제 IP, 프로토콜 등의 정보를 WAS에 전달하기 위한 헤더 설정
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
        }
    }
  • proxy_set_header: WAS가 리버스 프록시 뒤에 있다는 사실을 인지하고, 클라이언트의 실제 IP 주소 등을 올바르게 로깅하거나 처리할 수 있도록 관련 정보를 HTTP 헤더에 담아 전달하는 중요한 설정입니다.


📌 요약

  • 가상 호스트server_name 지시어를 사용하여, 하나의 서버에서 여러 도메인의 웹사이트를 운영할 수 있게 해주는 기술입니다.
  • 리버스 프록시는 클라이언트의 요청을 받아 내부 WAS로 안전하게 전달하는 중개 서버 역할을 합니다.
  • Nginx는 뛰어난 성능 덕분에 리버스 프록시 서버로 매우 널리 사용되며, proxy_pass 지시어를 통해 간단하게 설정할 수 있습니다.
  • 리버스 프록시를 사용하면 로드 밸런싱, 보안 강화, SSL 처리, 캐싱 등 다양한 이점을 얻을 수 있어, 현대적인 웹 아키텍처의 필수적인 구성 요소입니다.

0개의 댓글