Nginx를 이용하여 Docker로 호스팅한 웹 애플리케이션의 포트 번호 숨기기 - Reverse Proxy

Seung Hyeon ·2023년 10월 24일
0

백엔드

목록 보기
8/19
post-thumbnail

CD(자동 배포)를 구축하기 전, 배포 주소를 한번 체크해보았다. AWS EC2에서 배포하기 때문에 DNS 주소가 ec2 ~~ amazonaws.com였는데 문제는 뒤에 포트번호를 붙여야만 웹 어플리케이션이 실행되었다.

일반적으로 주소 뒤에 포트번호를 없애고 배포하는 것이 맞고, 또 포트번호와 실제 웹서버 주소가 그대로 노출되면 보안 취약의 위험성이 있기 때문에 포트번호를 숨기는 방법에 대해 고민하고 구글링 하던 중 Reverse Proxy를 이용해 해당 문제를 해결할 수 있다는 것을 알았다.

Proxy란?

Proxy는 "대리"라는 뜻으로, 인터넷 용어로 말하자면 익명 사용자의 직접적인 서버로의 접근을 차단하고 다른 네트워크 서비스에 간접적으로 접속할 수 있게 해주는 응용 프로그램 혹은 컴퓨터 시스템을 가리킨다.

Reverse Proxy

리버스 프록시는 클라이언트로부터 오는 요청을 서버 대신 처리하거나 중계한다.
아래와 같이 사용자 → nginx → 웹 서버 로 구성해서 사용자의 요청을 nginx가 대신 웹서버로 전달해준다.

리버스 프록시를 설정해주면 Nginx을 프록시 서버로 둬서 실제 포트를 숨길 수 있다.

순서

순서는 간단하다. 리눅스 안에 Nginx을 설치하고 Nginx의 conf설정 파일을 수정해주면 된다.

1. Nginx 설치

$ sudo apt update
$ sudo apt install nginx

2. Nginx 프록시 설정
이제 Nginx의 설정 파일을 수정하여 웹 애플리케이션을 프록시하도록 구성한다.
Nginx의 기본 설정 파일은 /etc/nginx/nginx.conf (또는 /etc/nginx/sites-available/default)에 위치한다.
nginx.conf파일에 들어가서 원하는 포트와 도메인 이름을 추가해주자.

$ sudo vi /etc/nginx/nginx.conf
server {
    listen 80;
    server_name your_domain.com;  #  Nginx가 처리할 실제 도메인 이름

    location / {
        proxy_pass http://localhost:5173;  # 웹 애플리케이션 포트 입력
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

이렇게 설정하면 클라이언트가 웹 애플리케이션을 80번 포트로 액세스하더라도 실제로는 5173 포트로 전달되므로,클라이언트에게는 5173포트를 노출시키지 않으면서 웹 애플리케이션을 사용할 수 있게 된다.

  • proxy_pass http://localhost:5173; : "Nginx가 받은 요청을 "http://localhost:5173" 주소로 프록시하라" 즉, 웹 애플리케이션은 로컬에서 5173 포트에서 실행 중인 것으로 가정한다.

3. Nginx 설정을 저장하고 Nginx를 재시작하여 변경 사항 적용

$ sudo service nginx restart

이제 도커 컨테이너를 실행하고 포트번호 없이 DNS주소로만 접속해보자

profile
안되어도 될 때까지

0개의 댓글