가비아 DNS 설정 및 Nginx를 활용한 FastAPI 배포

김민수·2025년 2월 14일
0
post-thumbnail

1. 가비아에서 DNS 설정하기

가비아에 로그인한 후, DNS 관리 페이지(예: 가비아 DNS 관리)로 이동합니다.
여기서 도메인에 대해 다음과 같이 DNS 레코드를 설정합니다.
링크 : https://dns.gabia.com/dns/internals/total_set

DNS 레코드 예시

  • 타입: A
  • 호스트: @
  • 값: 서버의 공인 IP 주소
  • TTL(Time To Live): 600

TTL(Time To Live)란?

  • TTL은 DNS 레코드가 DNS 서버나 클라이언트에 캐시되어 있는 시간을 초 단위로 나타낸 값입니다.
  • 예를 들어, TTL이 600초로 설정되어 있으면, 변경 사항이 최대 600초(10분) 후에 반영될 수 있다는 의미입니다.
  • TTL 값을 낮추면 DNS 변경사항이 더 빠르게 반영되지만, 너무 낮게 설정하면 잦은 DNS 조회로 인해 부하가 증가할 수 있으므로 적당한 값을 선택하는 것이 좋습니다.
  • 따라서, TTL 600은 일반적인 설정으로 적당합니다.

이렇게 설정하면, 도메인(example.com)서버의 IP 주소를 가리키게 되어 웹 브라우저에서 접속할 수 있습니다.

이후 보안을 포함한 부하 분산, SSL 인증서 적용 등을 편리하게 하기 위해 Nginx를 적용하겠습니다.

그렇게되면 외부에서 서버로 바로 요청이 들어오는게 아니라, Nginx가 역방향 프록시 역할을 하여 클라이언트의 요청을 받아 내부 서버로 전달하게 됩니다.

예를 들어 fastapi를 이용해 웹서버를 구축했다면,
클라이언트 -> fastapi 서버 방식이 아니라
클라이언트 -> Nginx -> fastapi 단계로 이루어져 중간에서 SSL 통신 처리, 부하분산 등의 역할을 손쉽게 도와줍니다.

2. Nginx를 이용한 역방향 프록시 구성

보안을 강화하고 부하 분산, SSL 인증서 적용 등을 용이하게 하기 위해 Nginx를 사용합니다.
Nginx는 외부에서 들어오는 요청을 받아 내부의 FastAPI 서버(예: uvicorn)로 전달하는 역방향 프록시(reverse proxy) 역할을 합니다.

예를 들어 FastAPI 애플리케이션을 uvicorn으로 실행하면,
직접 외부에서 접속하는 방식(클라이언트 → FastAPI)보다는
클라이언트 → Nginx → FastAPI 방식으로 요청이 전달되어, Nginx에서 SSL 종료, 요청 헤더 처리, 부하 분산 등의 추가 기능을 활용할 수 있습니다

Nginx 적용 방법 (우분투 기준)

  1. Nginx 설치
sudo apt update
sudo apt install nginx
  1. Nginx 설정 파일 작성
    /etc/nginx/sites-available/ 디렉토리에 새로운 설정 파일(예: fastapi.conf)을 생성합니다.
sudo vi /etc/nginx/sites-available/fastapi.conf

아래와 같이 내용을 입력합니다.
(이 설정은 외부의 80 포트로 들어온 요청을 내부의 127.0.0.1:8000 포트로 전달합니다.)

server {
    listen 80;
    server_name example.com www.example.com;  # 구매한 도메인 입력

    location / {
        proxy_pass http://127.0.0.1:8000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}
  1. 방화벽(UFW) 설정
  • 외부에서 80 포트(HTTP)와 443 포트(HTTPS)에 접근할 수 있도록 UFW 설정을 업데이트합니다.
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp # HTTPS를 사용
  1. nginx 설정 활성화 및 재시작
  • sites-available에 작성한 설정 파일을 sites-enabled에 심볼릭 링크로 등록합니다.
sudo ln -s /etc/nginx/sites-available/fastapi.conf /etc/nginx/sites-enabled/
  • 설정 문법을 확인한 후 Nginx를 재시작합니다
sudo nginx -t  # 설정 파일 (문법)테스트
sudo systemctl restart nginx # 재시작

5.SSL 인증서 적용 (Certbot 사용) SSL을 적용하여 HTTPS 통신을 가능하게 하려면 Certbot을 사용합니다.

sudo apt install certbot python3-certbot-nginx
sudo certbot --nginx -d example.com -d www.example.com

참고 : Nginx 명령어

Nginx 상태 조회 명령어
sudo systemctl status nginx 

Nginx 시작 명령어
sudo systemctl start nginx

Nginx 중지 명령어
sudo systemctl stop nginx
재시작
sudo systemctl restart nginx

Nginx 자동 시작 설정: 서버 부팅 시 Nginx가 자동으로 시작되도록 설정하려면 다음 명령어를 사용합니다.
sudo systemctl enable nginx

위 설정을 완료하면, 서버의 IP 주소 대신 도메인으로 웹사이트에 접속할 수 있으며, Nginx가 역방향 프록시로 작동하여 FastAPI 애플리케이션으로 요청을 전달합니다. 또한, Certbot을 통한 SSL 인증서 적용으로 HTTPS 연결도 사용할 수 있습니다.

이제 여러분의 도메인을 통해 안전하고 효율적인 웹 서비스 운영이 가능합니다.

profile
인공지능을 공부하고 가르치는 김민수 강사입니다. 공부한 내용 및 수업 자료가 업로드 됩니다.

0개의 댓글