프로그래밍/개발

[개발] Nginx에서 여러 도메인 적용하기

riroan 2023. 2. 20. 18:50

최근 진행하는 프로젝트가 꽤 많아져서 배포를 위해 인스턴스 한대를 혹사시키고 있다.

Oracle Cloud에 있는 인스턴스 한 대에 백엔드서버 3개와 프론트엔드 페이지를 2개 배포중이다.

그러다보니 서로 다른 프로젝트의 도메인들이 같은 서버를 가리키고 있다.

현재, aaa.riroan.com, bbb.riroan.com이 하나의 서버 ip를 가리키고 있는 상태이다.

이를 위한 nginx 설정이 필요했다.

riroan1.com, riroan2.com같이 도메인이 통채로 다른 경우도 가능하고 aaa.riroan.com, bbb.riroan.com처럼 접두어(prefix)만 다른 경우도 가능하다. (어떻게 생각해보면 당연하다.)

 

파일 작성

기본적으로 nginx설정을 하기 위해 /etc/nginx/sites-available에 파일을 만들어야 한다.

파일이름은 상관이 없고 문법만 잘 맞추면 된다.

그 후 sites-enabled에다가 심볼릭 링크를 걸어주면 된다. (윈도우에서의 바로가기)

하나의 파일에 작성해도 되지만 가독성을 위해 분리했다.

 

예를들어 aaa.riroan.com이라는 사이트에 접속한다고 하자.

우선 해당 도메인에 접속하는 파일을 만들고 심볼릭 링크를 걸어준다.

touch /etc/nginx/sites-available/aaa.riroan.com
ln -s /etc/nginx/sites-available/aaa.riroan.com /etc/nginx/sites-enabled/aaa.riroan.com
vi /etc/nginx/sites-enabled/aaa.riroan.com

이제 파일을 작성한다.

# /etc/nginx/sites-enabled/aaa.riroan.com

server {
	listen 80;
	server_name aaa.riroan.com;
    location / {
    	proxy_pass http://localhost:8080;
    }
}

이 후 nginx를 재시작한다.

service nginx restart

이제 도메인단에서 aaa.riroan.com가 서버를 가리키게 설정하고 aaa.riroan.com으로 접속하면 8080포트에서 열려있는 서버를 볼 수 있다.

!! 주의 !!

nginx파일은 띄어쓰기에 민감하다. 오류가 난다면 괄호랑 문자가 붙어있는 오류가 아닌지 확인하자.

 

다른 도메인 추가

같은 내용으로 파일을 작성하면 된다.

touch /etc/nginx/sites-available/bbb.riroan.com
ln -s /etc/nginx/sites-available/bbb.riroan.com /etc/nginx/sites-enabled/bbb.riroan.com
vi /etc/nginx/sites-enabled/bbb.riroan.com
# /etc/nginx/sites-enabled/bbb.riroan.com

server {
	listen 80;
	server_name bbb.riroan.com;
    location / {
    	root /{some_path};
        index index.html index.htm;
        try_files $uri $uri/ /index.html;
    }
}

bbb.riroan.com은 {some_path}라는 곳에 있는 빌드된 정적 페이지를 보여준다.

 

이제 같은 서버에 aaa.riroan.com, bbb.riroan.com 두개의 서버를 배포했다.

 

도메인 경로에 따른 분리

예를들어 aaa.riroan.com/a 로 접속하면 8080포트로, aaa.riroan.com/b 로 접속하면 8000포트로 보내고 싶다.

이런 경우는 아래와 같이 작성한다.

# /etc/nginx/sites-enabled/aaa.riroan.com

server {
	listen 80;
	server_name aaa.riroan.com;
    location /a {
    	rewrite ^/a/(.*)$ /$1 break;
    	proxy_pass http://localhost:8080;
    }
    
    location /b {
    	rewrite ^/b/(.*)$ /$1 break;
        proxy_pass http://localhost:8000;
    }
}

이런식으로 작성하면 원하는 작업이 가능하다.


++ 댓글에서 알게된 내용 추가

지금까지 설정된 파일을 적용하기 위해 service nginx restart를 사용했지만 nginx -s reload를 사용해도 적용이 된다.

 

차이가 있다면 전자는 nginx를 완전히 재시작하는 것이고 후자는 설정된 내용만 반영해서 후자가 더 빠르다.