Nginx를 역방향 프록시(Reverse Proxy)로 사용하여 보안(SSL)과 관리 편의성을 높이는 것이 권장됩니다.
방법 1: 직접 포트 접근 (포트 포워딩)
Nginx를 거치지 않고 서버의 방화벽에서 포트를 직접 열어주는 방식입니다.
-
설정 방법:
- 서버 방화벽(UFW, AWS Security Group 등)에서
3000과8000포트를 Allow 설정합니다. - 각 앱의 서버(Puma, Gunicorn 등)를 실행할 때
0.0.0.0으로 바인딩합니다.
- 서버 방화벽(UFW, AWS Security Group 등)에서
-
장점: 설정이 가장 단순함.
-
단점:
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-> 서버 IPdjango.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가 대안이 될 수 있습니다.