nginx - 서브 도메인 포트 라우팅 가이드 (For Windows)

반응형

개요, 웹 서버의 필요성

웹 서비스를 운영할 때, 비용상의 문제로 한 대의 컴퓨터에서 여러 개의 서버를 돌리는 경우가 있다.

특히나 개인용으로 만드는 대부분의 토이 프로젝트는 실질적인 상업 서비스를 하지 않기 때문에

여러 대의 컴퓨터를 두고 서버를 돌리기란 사실상 쉽지 않다.

또한, 한 장소에서의 공유기를 통한 경우에도 결국은 하나의 외부 아이피를 통하기 때문에

여러 개의 웹 서비스를 구축하려면 다음과 같은 문제가 발생한다.

  • 도메인을 연결해야 하는데 80 / 8080 포트는 이미 메인 서비스를 제공한다.
  • 다른 포트를 사용하려니 도메인 뒤에 포트를 입력해야 한다.
  • 도메인 뒤에 포트를 입력하여 사용하려니 보기가 좋지 않다.

 

예시를 들어보자.

현재 서비스 중인 웹 서비스가 있다고 가정하자.

웹 서비스는 예를 들자면 abc.com을 기준으로, api 서버개발 서버를 따로 두고 개발해야 한다고 해보자.

  • api 서버 도메인 예시 : api.abc.com
  • 개발 서버 도메인 예시 : dev.abc.com

위와 같이, 한 개의 메인 도메인(abc.com)을 기준으로 구분자를 넣으면 관리 차원에서 보기가 정말 용이하다.

하지만 실제 서버의 상황을 보면 abc.com:1111, abc.com:2222 이런식으로 진행된다.

그럼 위의 예시 도메인처럼 포트 번호가 필요 없이 깔끔하게 주소만 입력하게 하려면 어떻게 해야할까?

 

이럴 때 필요한 것이 서브 도메인포트 라우팅이다.

각 서비스마다 다른 포트를 사용해야 할 때,

서브 도메인을 통해 특정 포트로 간편하게 접속할 수 있도록 해야 한다.

그 것을 가능하게 해주는 것이 웹 서버로,

대표적으로 아파치(apache)엔진엑스(nginx)가 있다.

 

이 글에서는 nginx를 이용하여 한 개의 웹 서버에서 포트별로 분기를 처리 하고,

특정 포트로 접속할 수 있도록 설정하는 방법을 다룬다.

 

글을 읽기 전에...

이 글은 다음과 같은 상황을 위한 글이다.

  • 여러 개의 웹 서비스를 운영하며 서브도메인 설정이 필요한 경우
  • 윈도우 환경에 익숙하고 Nginx를 사용해보고 싶은 경우
  • 복잡한 포트 번호 대신 깔끔한 서브도메인 주소로 서비스를 운영하고 싶은 경우
  • 프론트엔드와 백엔드 서버를 분리하여 사용하고 싶은 경우

 

서브 도메인이 아직 없고 가비아를 사용하고 있다면 아래의 글을 참고하자.

 

가비아 - 서브 도메인 만들기 (DNS 설정하기, A 레코드 사용)

개요도메인을 구입하여 블로그나 쇼핑몰, 특정 주제를 다루는 웹사이트를 운영하고 있을 때,또 다른 주제로 웹 사이트 확장과 함께 고민해야 할 부분이 있다.그것은 바로 서브 도메인이다. 내

luvris2.tistory.com

 

엔진엑스(NginX)란 무엇인가?

Nginx는 가볍고 빠른 성능으로 유명한 웹 서버이자,

컴퓨터 네트워크에서 클라이언트를 대신해서 한 대 이상의 서버로부터

자원을 추출하는 프록시 서버의 일종인 리버스 프록시 서버이다.

 

웹 서버, 프록시 서버, 로드 밸런서, 캐싱 서버 등

다양한 기능을 제공하는 강력하고 유연한 오픈 소스 웹 서버 소프트웨어로써,

다른 웹 서버에 비해 가볍고 자원을 적게 소모한다는 장점이 있다.

 

엔진엑스 설치하기

검색 엔진에서 nginx를 검색하여 해당 사이트에 들어가서 다운로드 받을 수 있다.

☞  nginx 다운로드 페이지로 이동하기

 

귀찮다면 아래의 링크를 눌러 다운로드를 진행하자.

윈도우용 nginx 1.26.1 (stable version) 다운로드 하기

 

다운로드가 끝나면 압축을 풀고, 놓고 싶은 위치에 저장해두면 된다.

 

 

엔진엑스의 작동 방식 이해하기

인터넷 검색 중, 아래의 그림이 너무 잘 표현된 것 같아서 인용하였다.

스프링 부트를 예로 아래의 그림을 봐보자.

브라우저에서 라우팅 처리는 스프링 부트 앱 자체에서 진행한다.

엔진엑스를 적용하기 전의 스프링 부트 앱 프로세스
엔진엑스를 적용하기 전의 스프링 부트 앱 프로세스

 

그러나 우리가 원하는 것은 한 대의 컴퓨터에서 서브 도메인을 사용하기 위함으로써

메인 도메인과 서브 도메인을 구별하는 포트별 요청을 처리하여 각각의 메인/서브 서버에 요청을 전달해야 한다.

 

아래는 nginx가 적용된 프로세스이다.

엔진엑스를 적용한 백엔드, 프론트엔드 라우팅 프로세스
엔진엑스를 적용한 백엔드, 프론트엔드 라우팅 프로세스

 

즉, nginx는 웹 서버로서 클라이언트의 요청을 받아 해당 요청을 처리할 서버를 선택하고,

선택된 서버로 요청을 전달해주는 역할을 한다.

그에 따라 포트별로 분기점을 나눠 각각의 서버에 전달하여 서브 도메인을 따로 운용할 수 있게 해준다.

 

이 글은 서브 도메인을 위한 라우팅이지만,

같은 의미로 백엔드와 프론트엔드를 한 대의 컴퓨터 서버에서 처리 할 수 있는 방법이기도 하다.

 

서브 도메인 포트 라우팅을 위한 엔진엑스 설정

포트 분기를 통해 서브 도메인 식별을 위한 엔진엑스의 설정을 하기 위해서는 사실 별로 어렵지 않다.

단지, 설정 파일의 값만 바꿔주면 된다.

 

엔진엑스를 다운 받은 폴더로 이동하자.

루트 디렉토리에서 conf 폴더 하위의 nginx.conf 파일을 연다.

밑으로 내리다보면 server 부분이 보일 것이다.

이 부분을에 대한 내용을 수정하면 된다.

서브 도메인을 추가할 때에는 server 파트를 한 번 더 기입한다.

 

예시

  • 도메인
    • 메인 도메인 : babychat.xyz
    • 서브 도메인 : project1.babychat.xyz
  • 서버 포트
    • 메인 : localhost:3999
    • 서브 : localhost:4001
# 메인 도메인
server {
    listen	80; # Nginx 기본 포트
    server_name  babychat.xyz;

    location / {
        proxy_pass http://192.168.0.78:3999;
    }
}

# 서브 도메인
server {
    listen       80;
    server_name  project1.babychat.xyz;

    location / {
        proxy_pass http://192.168.0.78:4001;
    }
}

 

엔진엑스 실행하기

엔진엑스를 다운 받은 폴더를 보면 nginx.exe 파일이 있다.

파일을 실행시키기만 하면 된다.

그러면 아무창도 뜨지 않게 되는데 백그라운드에서 실행되고 있다.

 

확인은 작업 관리자에서 할 수 있다.

작업 관리자에서 엔진엑스 실행을 확인한 화면 예시
작업 관리자에서 엔진엑스 실행을 확인한 화면

 

작업 관리자에서 확인된 프로세스는 작업 끝내기를 통해 쉽게 종료할 수 있다는 장점이 있다.

 

명령 프롬프트(CMD)를 통한 엔진엑스 실행 및 종료

좀 더 개발자스럽게 명령어를 통해 확인해보고 싶다면 아래의 명령어를 CMD에서 입력해보자.

 

  • nginx 실행
nginx경로/nginx.exe

 

  • nginx 실행 여부 확인
tasklist /FI "imagename eq nginx.exe"

nginx 실행 여부 확인 예시 화면
nginx 실행 여부 확인 예시 화면

 

  • nginx 종료
taskkill /IM nginx.exe /F

nginx 종료 예시 화면
nginx 종료 예시 화면

 

도메인 확인

메인 도메인은 3999번(Python Flask)으로 접속하고,

서브 도메인은 4001번(Kotlin SpringBoot)으로 접속하게끔 해두었다.

포트별로 분기 처리가 되어 각각 서버에 접속이 될까?

 

메인 도메인 확인

플라스크로 실행중인 포트로 정상적으로 라우팅되어 잘 표현된다.

메인 도메인 주소 확인 예시
메인 도메인 주소 확인 예시

 

서브 도메인 확인

서브 도메인을 넣어 접속해보았다.

스프링부트로 실행중인 포트로 정상적으로 라우팅되어 API 서버의 테스트 페이지가 잘 표현된다.

서브 도메인 주소 확인 예시
서브 도메인 주소 확인 예시

 

출처

반응형