nginx에 여러 서버, 여러 도메인(Subdomain) 연동하기 (+ ssl 적용)

1. 기존의 설정 파일 삭제

rm /etc/nginx/sites-enabled/default
rm /etc/nginx/sites-available/default

2. 새로운 설정 파일

apple이라는 서비스와 banana라는 서비스를 nginx에 연동한다고 가정

각각의 서버에 맞게 설정 파일을 생성
vi /etc/nginx/sites-enabled/apple.conf
vi /etc/nginx/sites-enabled/banana.conf
sites-enabled와 sites-available를 심볼링 링크로 엮어줌
ln -s /etc/nginx/sites-enabled/apple.conf /etc/nginx/sites-available/
ln -s /etc/nginx/sites-enabled/banana.conf /etc/nginx/sites-available/
nignx 설정 파일 작성

기본적으로 하나의 서버만 연결할 때와 크게 다르지 않다.
(nginx 사용하기 (Node.js / Tomcat 등 서버와 연동)

apple.confbanana.conf 해당 서비스에 맞는 포트와 도메인, 루트 디렉토리만 다르고 다른 내용은 동일
server {
	listen 80;        #default_server 삭제
	listen [::]:80;        #default_server 삭제

    root [[root directory]];
    server_name [[domain]];

    location / {
            # First attempt to serve request as file, then
            # as directory, then fall back to displaying a 404.
            try_files $uri $uri/ =404;
            proxy_pass [[http://IP주소:port]];
    }

}

3. HTTPS 통신을 위한 SSL 인증서 적용

apple.confbanana.conf 해당 서비스에 맞는 포트와 도메인, 루트 디렉토리만 다르고 다른 내용은 동일
server {
        listen 80;
        listen [::]:80;
        root [[root directory]];

        server_name [[domain]];
        return 301 https://[[domain]]$request_uri;
}

server {
        listen 443 ssl;
        listen [::]:443 ssl;
        server_name [[domain]];

        ssl_certificate [[fullchain.pem path]];
        ssl_certificate_key [[privkey.pem path]];

        location / {
                proxy_pass http:[[http://IP주소:port]];
                proxy_set_header Host $host;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header X-Forwarded-Proto $scheme;
                proxy_set_header Upgrade $http_upgrade;
                proxy_set_header Connection "upgrade";
                proxy_set_header X-Real-IP $remote_addr;
                proxy_redirect off;
        }
}

위와 같이 작성 후 /etc/init.d/nginx restart으로 재시작하면 된다.


아래는 예제 설정 파일


1. 가정 조건

Let’s Encrypt 인증서 사용

Apple Service

Server: Nginx
Port: 3000
Domain: fruit.com www.fruit.com
Root Directory: /var/html/www/apple

Banana Service

Server: Tomcat9
Port: 8080
Domain: banana.fruit.com
Root Directory: /var/html/www/banana

2. Example

apple.conf
server {
        listen 80;
        listen [::]:80;
        root /var/html/www/apple;

        server_name www.fruit.com fruit.com;
        return 301 https://fruit.com$request_uri;
}

server {
        listen 443 ssl;
        listen [::]:443 ssl;
        server_name fruit.com;

        ssl_certificate /etc/letsencrypt/live/fruit.com/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/fruit.com/privkey.pem;

        location / {
                proxy_pass http://localhost:3000;
                proxy_set_header Host $host;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header X-Forwarded-Proto $scheme;
                proxy_set_header Upgrade $http_upgrade;
                proxy_set_header Connection "upgrade";
                proxy_set_header X-Real-IP $remote_addr;
                proxy_redirect off;
        }
}
banana.conf
server {
        listen 80;
        listen [::]:80;
        root /var/html/www/banana;

        server_name banana.fruit.com;
        return 301 https://fruit.com$request_uri;
}

server {
        listen 443 ssl;
        listen [::]:443 ssl;
        server_name banana.fruit.com;

        ssl_certificate /etc/letsencrypt/live/fruit.com/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/fruit.com/privkey.pem;

        location / {
                proxy_pass http://localhost:8080;
                proxy_set_header Host $host;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header X-Forwarded-Proto $scheme;
                proxy_set_header Upgrade $http_upgrade;
                proxy_set_header Connection "upgrade";
                proxy_set_header X-Real-IP $remote_addr;
                proxy_redirect off;
        }
}

One Comment

jun 11월 16, 2021 Reply

안녕하세요 질문이 있어서 답글 남깁니다.

banana.conf 에서 server 블록내
return 301 https://fruit.com$request_uri;
부분이
return 301 https://banana.fruit.com$request_uri;
이 되어야 하는것 아닌가요?

답글 남기기