Win-9 / Focus

0 stars 0 forks source link

등록 변경사항 #28

Closed Win-9 closed 1 month ago

Win-9 commented 3 months ago
Win-9 commented 3 months ago

리버시 프록시를 이용하여 포트별 서비스 분리하기

AWS의 비용과 프리티어의 성능 이슈로 인해 필자가 구축한 홈서버에서 배포를 진행하고 있다.
클라이언트에서 API 요청을 위한 자바스크립트에 IP가 그대로 노출되면 해킹 위협에 노출이 될 수 있다고 생각하였고,
프론트 개발자의 번거롱무 또한 증가할 것이라고 생각하였다.
이러한 이유에서 도메인을 적용하기로 하였다.

도메인 구매

우선 도메인을 구매하자.
가비아와 같은 유명한 사이트도 있지만, 비교적 저렴한 호스팅 kr에서 도메인을 구매하였다.

image

kr 도메인을 연간 9800원이라는 저렴한 가격에 구매할 수 있었다.

IP 연결하기

IP는 크게 두가지가 존재한다.
공인 IP와 사설 IP가 존재한다.
홈서버는 외부에 노출되지 않기 때문에 외부에서는 공인 IP를 기반으로 접속해야 한다.
공인 IP를 레코드에 추가시켜 주도록 하자.

image

도커 컴포즈로 등록한 두개의 서비스를 접근하도록 할 것이기 때문에 A레코드에 공인 IP를 연결해주자.

도메인 없이 포트포워딩만을 적용시킨다면 공인IP:port 만으로 내부 서비스로 쉽게 접근이 가능하기 때문에
쉽게 해결할 수 있을 것이라고 생각했다.

그러나 A레코드는 포트를 기술하는 것이 불가능하다. 그렇다면 바로 등록한 레코드를 접근하게 되면 AP 설정 페이지로 리다이렉트가 된다.

따라서 Nginx를 이용해서 ip 접근시 80포트로 리다이렉트가 되면서
각 서비스로 요청이 가능한 리버스 프록시 전략을 사용하도록 했다.

리버스 프록시 적용하기

우선 nginx를 설치하자.

$ apt-get install nginx

이후, /etc/nginx/sites-available 경로의 default 파일을 편집기로 열어 서브도메인으로 사용할 가상호스트 설정들을 추가해준다.

$ vi /etc/nginx/sites-available/default
# ... 기존 설정 ...

# 가상 호스트 설정

server {
    listen 80;
    listen [::]:80;

    server_name 첫 A레코드 도메인/;

    location / {
        proxy_pass http://localhost:portNum/; // focus
    }
}

server {
    listen 80;
    listen [::]:80;

    server_name 두번째 A 레코드 도메인/;

    location / {
        proxy_pass http://localhost:portNum/; // imagehost
    }
}

설정 파일에 추가를 완료했으면 Nginx를 재시작하여 변경사항을 적용한다.

### nginx 재시작
$ systemctl restart nginx

포트 포워딩 설정하기

기존에는 외부에서 접근하려는 포트를 내부에서 서비스 하는 포트로 그대로 매핑시켜 주었다.
그러나 지금은 Nginx를 사용하기 때문에 외부의 80포트를 내부 nginx 포트인 80으로 매핑시켜 주었다.

이제 설정한 도메인으로 각 요청을 보내면 각자 다른 서비스로 요청이 보내지는 것을 확인할 수 있다.

이후 다른 서비스를 제작할 때에도 다른 EC2를 추가로 사용하지 않고 확장시킬 수 있다!