Nginx, 서브도메인 구성방법

Nginx를 역방향 프록시(Reverse Proxy)로 사용하여 보안(SSL)과 관리 편의성을 높이는 것이 권장됩니다.

방법 1: 직접 포트 접근 (포트 포워딩)

Nginx를 거치지 않고 서버의 방화벽에서 포트를 직접 열어주는 방식입니다.

  • 설정 방법:

    1. 서버 방화벽(UFW, AWS Security Group 등)에서 30008000 포트를 Allow 설정합니다.
    2. 각 앱의 서버(Puma, Gunicorn 등)를 실행할 때 0.0.0.0으로 바인딩합니다.
  • 장점: 설정이 가장 단순함.

  • 단점: https 적용이 어렵고, URL 뒤에 포트 번호가 붙어 미관상 좋지 않으며 보안에 취약합니다.

방법 2: Nginx 경로(Path) 분리

하나의 도메인 뒤에 /rails, /django 같은 경로를 붙여 구분하는 방식입니다.

Nginx 설정 파일 (/etc/nginx/sites-available/default):

server {
    listen 80;
    server_name kdm.smartspace.co.kr;

    # Rails 설정
    location /rails/ {
        proxy_pass http://localhost:3000/; # 끝에 '/'를 붙이면 경로가 치환됩니다.
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }

    # Django 설정
    location /django/ {
        proxy_pass http://localhost:8000/;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}
  • 주의사항: 앱 내부의 정적 파일(CSS, JS) 경로가 /rails/static/... 형태로 호출되도록 앱 내 기본 경로(Base URL) 설정이 추가로 필요할 수 있습니다.

방법 3: 서브도메인(Subdomain) 분리**

가장 전문적이고 깔끔한 방식입니다. 도메인 관리 서비스(DNS)에서 레코드를 먼저 추가해야 합니다.

1. DNS 설정:

  • rails.kdm.smartspace.co.kr -> 서버 IP
  • django.kdm.smartspace.co.kr -> 서버 IP

2. Nginx 설정:

# Rails용 서버 블록
server {
    listen 80;
    server_name rails.kdm.smartspace.co.kr;

    location / {
        proxy_pass http://localhost:3000;
        proxy_set_header Host $host;
    }
}

# Django용 서버 블록
server {
    listen 80;
    server_name django.kdm.smartspace.co.kr;

    location / {
        proxy_pass http://localhost:8000;
        proxy_set_header Host $host;
    }
}
  • 장점: 서비스 간 간섭이 전혀 없고, 나중에 서버를 물리적으로 분리하기에도 매우 유리합니다.

추천

가장 깔끔한 운영을 원하신다면 방법 3(서브도메인)을 추천함.

만약 도메인 추가 설정이 번거롭다면 방법 2가 대안이 될 수 있습니다.

댓글 남기기