오래된 프로그래머의 요즘 이야기

그리고 소소한 일상들...

허니의 소소한 일상들이 켜켜이 쌓여가고......

Tech Story

[Docker / NginX] 하나의 Domain을 Multi Site로 운영

쭝허니 2025. 5. 31. 21:23

하나의 Docker 컨테이너로 무한한 웹사이트 운영의 세계를 경험하세요

요즘 웹 개발은 멀티사이트 운영 없이는 살아남기 힘든 시대입니다.  개발 환경, 테스트 환경, 심지어는 여러 개의 서비스를 동시에 운영해야 할 경우도 많죠.  이럴 때마다 서버를 여러 대 띄워야 한다면?  비용과 관리의 부담은 상상을 초월할 겁니다.  하지만 오늘, 여러분의 고민을 해결해 줄 혁신적인 방법을 소개합니다! 바로 Docker와 Nginx를 활용한 멀티사이트 운영입니다.  단 하나의 Nginx 컨테이너로 여러 웹사이트를 효율적으로 관리하는 마법을 함께 경험해보시죠.

**1. Nginx 가상 호스트:  한 서버, 여러 웹사이트의 마술**

Nginx는 웹 서버이자 강력한 리버스 프록시 역할도 수행하는 만능 도구입니다.  핵심은 바로 "가상 호스트(Virtual Hosts)" 기능입니다.  가상 호스트는 단 하나의 서버에서 여러 웹사이트를 운영할 수 있도록 해주는 기술이죠.  마치 한 건물에 여러 개의 사무실이 있는 것과 같습니다.  Nginx는 포트 기반 또는 도메인 기반으로 가상 호스트를 설정할 수 있습니다.

**(이미지 삽입:  한 건물에 여러 사무실이 있는 이미지, 각 사무실은 다른 웹사이트를 나타내도록 함)**

**포트 기반 가상 호스트:**  각 웹사이트에 다른 포트 번호를 할당하여 구분하는 방식입니다.  예를 들어,

* `http://localhost:8081`:  사이트 1

* `http://localhost:8082`:  사이트 2

* `http://localhost:8083`:  사이트 3

**도메인 기반 가상 호스트:**  각 웹사이트에 다른 도메인 이름을 할당하여 구분하는 방식입니다. (이 부분은 후속 포스팅에서 자세히 다루겠습니다.)  예를 들어,

* `http://site1.example.com`:  사이트 1

* `http://site2.example.com`:  사이트 2

* `http://site3.example.com`:  사이트 3

**2. 실전 투입! Docker와 Nginx를 이용한 멀티사이트 설정**

이제 본격적으로 Docker와 Nginx를 이용하여 멀티사이트를 구축하는 과정을 살펴보겠습니다.  포트 기반 가상 호스트를 예시로 설명합니다.

**1) 웹사이트 디렉토리 및 파일 생성:**

먼저, 각 웹사이트를 위한 디렉토리를 생성하고, 간단한 `index.html` 파일을 만들어 봅시다. 다음 명령어를 사용합니다.

```bash
mkdir -p /c/docker-nginx/web/site1
mkdir -p /c/docker-nginx/web/site2
mkdir -p /c/docker-nginx/web/site3

echo '<h1>Site 1</h1>' > /c/docker-nginx/web/site1/index.html
echo '<h1>Site 2</h1>' > /c/docker-nginx/web/site2/index.html
echo '<h1>Site 3</h1>' > /c/docker-nginx/web/site3/index.html
```

**2) Nginx 설정 파일 수정:**

Nginx 설정 파일(`/etc/nginx/nginx.conf`)을 수정하여 각 포트에 대한 가상 호스트를 정의해야 합니다.  다음은 `nginx.conf` 파일의 예시입니다.  `/c/docker-nginx/conf` 디렉토리에 `nginx.conf` 파일을 생성하고 아래 내용을 작성합니다.

```nginx
worker_processes 1;
events {
    worker_connections 1024;
}

http {
    include       mime.types;
    sendfile      on;

    # Site 1 (포트 8081)
    server {
        listen 8081;
        server_name localhost;

        location / {
            root /web/site1;
            index index.html;
        }
    }

    # Site 2 (포트 8082)
    server {
        listen 8082;
        server_name localhost;

        location / {
            root /web/site2;
            index index.html;
        }
    }

    # Site 3 (포트 8083)
    server {
        listen 8083;
        server_name localhost;

        location / {
            root /web/site3;
            index index.html;
        }
    }
}
```

**3) Docker 컨테이너 실행:**

다음 명령어를 사용하여 Nginx 컨테이너를 실행합니다.  `-v` 옵션을 통해 호스트의 디렉토리를 컨테이너 내부에 마운트하여 설정 파일과 웹사이트 파일을 공유합니다.

```bash
docker run -d --name nginx-multisite -p 8081:8081 -p 8082:8082 -p 8083:8083 \
  -v /c/docker-nginx/conf/nginx.conf:/etc/nginx/nginx.conf \
  -v /c/docker-nginx/web:/web \
  nginx:latest
```

**(이미지 삽입: Docker 컨테이너가 실행되는 시각적인 이미지)**

**4) 설정 확인 및 브라우저 테스트:**

`docker ps` 명령어를 통해 컨테이너가 정상적으로 실행되었는지 확인하고, 브라우저에서 `http://localhost:8081`, `http://localhost:8082`, `http://localhost:8083`으로 접속하여 각 웹사이트가 정상적으로 작동하는지 확인합니다.

**3. 장점과 활용 사례:  멀티사이트 운영의 새로운 지평**

이 방법의 장점은 무엇일까요?

* **단일 컨테이너 관리:**  여러 웹사이트를 단 하나의 Docker 컨테이너로 관리할 수 있어 효율적입니다.

* **환경 격리:**  개발 환경을 오염시키지 않고 안전하게 개발 및 테스트를 진행할 수 있습니다.

* **빠른 개발/테스트:**  설정 변경 후 바로 결과를 확인할 수 있어 개발 속도를 높일 수 있습니다.

* **리버스 프록시 활용:**  리버스 프록시 기능을 활용하여 보안 및 성능 향상을 도모할 수 있습니다.

* **실시간 설정 변경:** Docker 볼륨을 이용해 설정 파일을 실시간으로 변경하고 적용할 수 있습니다.


**활용 사례:**

* 프론트엔드, 백엔드, API 서버 등 다양한 서비스를 하나의 서버에서 운영

* 마이크로서비스 아키텍처(MSA) 환경 구축

* 다양한 버전의 웹사이트를 동시에 운영하는 테스트 환경 구축


**결론:  Docker와 Nginx로 멀티사이트 운영의 꿈을 이루세요!**

이제 Docker와 Nginx를 이용한 멀티사이트 운영의 효율성을 직접 경험하셨을 것입니다. 더 이상 복잡한 서버 관리에 시간을 낭비하지 마세요!  Docker와 Nginx를 활용하여 여러분의 웹 개발 역량을 한 단계 더 발전시켜 보세요!