본문 바로가기

# Development/DevOps

[Nginx] 같은 도메인에 다른 어플리케이션(WAS) 연결: location 추가하기

 

같은 도메인에 다른 어플리케이션(WAS) 연결: location 추가하기

 

운영하고 있는 AWS EC2 인스턴스에 Flask 백엔드(어플리케이션A)가 돌아가고 있었는데,  동일한 도메인에 크롤링용 Flask 백엔드(어플리케이션B)를 하나 더 추가했다. 간단한 설정인데 본인은 삽질을 오래해서 다른 사람들은 편히 설정하길 바라는 염원을 담아 글을 썼다.

 

결론부터 얘기하자면, systemd에 추가하려는 어플리케이션B 등록한 다음,

기존에 돌아가고 있는 어플리케이션A의 nginx 설정 파일에 location을 추가해주면 된다.

 

systemd 서비스 등록

우선 아래 글을 참조해서 새로 추가하고자 하는 어플리케이션B를 nginx 설정 전까지(git clone - python 가상환경 어플리케이션 설정 - uWSGI 설정 - systemd 서비스 등록  - uWSG 시작) 진행한다.

 

[Nginx] ubuntu 환경에서 Flask 배포하기 (Git, uWSGI, Socket)

ubuntu 환경에서 Flask 배포하기 (Git, uWSGI, Nginx) 사전준비 패키지 매니징 툴 apt(Advance Packging Tools) 업데이트 $ sudo apt update Git에서 소스코드 다운로드 1. Git 설치 $ sudo apt install git 2. Git 초기화 프로젝

yoon001.tistory.com

 

Nginx 설정 파일 수정 

환경설정 파일 위치는 Ubuntu에 기본 설정된 버전(1.18.0)으로 apt install nginx를 했을 경우에는 

/etc/nginx/sites-available/default.conf

최신 버전의 Nginx를 다운로드 했을 경우에는 아래에 위치하는데,

/etc/nginx/conf.d/default.conf

 

기존 어플리케이션A의 설정파일이 다음과 같이 설정되어 있을때

server {
    listen 80;
    server_name test.co.kr;

    location /{
        include uwsgi_params;
        uwsgi_pass unix:/home/ubuntu/aplication_a/aplication_a.sock;
    }
    
    listen 443 ssl; # managed by Certbot
    ssl_certificate /etc/letsencrypt/live/test.co.kr/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/test.co.kr/privkey.pem; # managed by Certbot
    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
}

 

기존 파일에 신규로 등록한 어플리케이션B 서비스의 location을 추가한다.

server {
    listen 80;
    server_name test.co.kr;

    location /{
        include uwsgi_params;
        uwsgi_pass unix:/home/ubuntu/aplication_a/aplication_a.sock;
    }

    location /aplication_b/ {
        rewrite ^/crawler(/.*)$ $1 break;
        include uwsgi_params;
        uwsgi_pass unix:/home/ubuntu/aplication_b/aplication_b.sock;
    }
    
    listen 443 ssl; # managed by Certbot
    ssl_certificate /etc/letsencrypt/live/test.co.kr/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/test.co.kr/privkey.pem; # managed by Certbot
    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
}

 

위의 예시에서는 /aplication_b/ 경로에 대한 요청이 어플리케이션B 서비스로 전달되도록 설정했다.

location 블록 안에 rewrite 지시어를 사용하여 /aplication_b/를 제거하고 실제 요청 경로만을 전달한다.

 

Nginx 재시작

설정 적용을 위해서는 Nginx를 재시작 해야한다.

$ systemctl restart nginx

 

위의 작업을 수행한 후 test..co.kr/aplication_b로 접근하면 어플리케이션B  서비스에 액세스할 수 있다. 

 

Nginx는 /aplication_b/ 경로의 요청을 어플리케이션B 서비스로 전달하고,

나머지 경로는 여전히 어플리케이션A 서비스로 전달한다.