NGINX-SSL-proxy 설정

yongseok·2023년 5월 16일
1

Web

목록 보기
4/4
post-thumbnail
  • NGINX를 사용해 SSL을 적용하고, 리버스 프록시를 적용하는 방법에 대한 포스팅 입니다.

    리버스프록시
    클라이언트와 서버 사이에서 중개자 역할을 하는 서버로 클라이언트는 리버스 프록시 서버에 요청을 보내고, 리버스 프록시 서버는 해당 요청을 대상 서버로 전달하여 응답을 받아 클라이언트에게 전달

사전작업

  • 인스턴스
    - 리눅스 생성(우분투)
    • 방화벽 설정(TCP 80, 443 open)
  • 도메인 설정: HOST_NAME, TYPE(A), DATA(IP)
  • 프록시 대상 서버 실행
    ss -tuln
    • port 확인(prot:3000, node echo서버 사용)

Nginx-Certbot

1. install

  • python 버전 확인(없으면 설치 후 진행해야 합니다.)
    python3 --version
  • nginx certbot python3-certbot-nginx 설치
    sudo apt-get install nginx certbot python3-certbot-nginx
    • 정상적으로 설치가 완료(80/http로 접속 가능합니다.)

2. SSL

  • certbot 실행(DNS에 IP를 등록한 상태여야 합니다.)
    sudo certbot
    • e-mail, 정책 동의, 이메일 수신동의, 도메인 순차적으로 입력
    • certbot 적용 성공 (443/https로 접속 가능합니다.)

3. proxy

  • NGINX proxy 설정(원하는 에디터로 작업하시면 됩니다.)

    sudo nano /etc/nginx/sites-enabled/*
  • server_name에 도메인이 들어간 곳을 찾아서 root, index, location 내부 값을 주석처리하고, 다음을 입력한다.

    # location / {} 내부에 작성
     # 프록시 주소
     proxy_pass http://localhost:3000;
     # 클라이언트가 요청한 원래 호스트 정보를 유지
     proxy_set_header Host $host;
     # 실제 클라이언트의 IP 주소를 유지
     proxy_set_header X-Real-IP $remote_addr;
     # 프록시 서버를 통해 전달된 클라이언트의 IP 주소 목록을 유지
     proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
     # 원래 프로토콜 (예: HTTP 또는 HTTPS)을 유지하는 데 사용
     proxy_set_header X-Forwarded-Proto $scheme;
    • 완료 후 저장 (nano의 경우 ctrl+X - y - enter 입력)
  • 변경사항 확인 후 재실행

    sudo nginx -t
    sudo service nginx restart
    • 도메인으로 접속시 설정 포트로 프록시 되는 것을 확인할 수 있습니다.

4. cron setting

  • cron 설정 인증서 업데이트 자동화
    sudo crontab -e
    • 편한 에디터 선택
  • cron 주기 명령 입력
    0 0 * * 0 sudo certbot renew --quiet
    • 매주 일요일 자정 sudo certbot renew --quiet명령이 실행됩니다.
  • certbot renew 인증서 갱신 작업을 시뮬레이션
    sudo certbot renew --dry-run
    • 실제 인증서를 갱신하지 않으면서 갱신을 테스트합니다.

위의 과정을 통해서 NGINX를 사용해 도메인에 SSL을 적용하고, 서버의 다른 포트로 리버스 프록시 설정을 할 수 있었다.

추가적으로 살펴볼 것은 호스트 네임, location 경로에 따라서 프록시 설정을 다르게 하고 싶은 경우와 Socket등의 사용으로 헤더에 어떤 설정을 해 줘야할까? 등의 주제다.

심화주제로 로드벨런싱, 무중단 배포에 대해서 알아보면 좋을 것 같다.

[참고] git, node, npm 설치

  1. Git install
    • advanced Package tool 목록 최신화
      sudo apt update
    • git install
      sudo apt install git
    • 버전확인
      git --version
  2. node npm install
    • 스크립트
      curl -fsSL https://deb.nodesource.com/setup_lts.x | sudo -E bash -
    • install
      sudo apt-get install -y nodejs
    • 버전확인
      node -v
      npm -v

[참고] 오라클 클라우드(OCI:Oracle Cloud Infrastructure)

  • 인스턴스 방화벽 규칙에 해당 포트 오픈 추가필요

0개의 댓글