어플리케이션을 배포할 때 어플리케이션의 포트를 직접 외부에 노출시키면 보안에 좋지 않다. 그래서 HTTP는 80, HTTPS는 443을 기본으로 사용하는데 이 포트로 온 요청을 어플리케이션의 포트로 전달하는 포트포워딩을 사용해서 이 문제를 해결할 수 있다.
NGINX를 이용하면 포트포워딩뿐만 아니라 특정 경로에 맞게 요청을 이동시키는 로드밸런싱이나 HTTP 요청을 HTTPS로 리다이렉트 시키는 등의 처리를 할 수 있다. 하지만 나는 일단 포트포워딩만 필요한 것이니 해당 설정만 진행했다.
NGINX 설치
sudo apt update
sudo apt install nginx
일단 NGINX를 설치해준다. 모든 설치 과정은 Ubuntu 20.04 기준으로 진행한다.

설치 후에 /etc/nginx/ 경로로 들어가 보면 위와 같은 파일과 폴더들을 확인할 수 있다.
여기서 사용할 파일은 nginx.conf이고,
사용할 폴더는 sites-available과 sites-enabled이다.


sites-available과 sites-enabled 내에는 모두 default라는 파일이 있는데 사실 진짜 파일은 sites-available 내의 default이고, sites-enabled 내의 default 파일은 sites-available의 default를 가리키는 심볼릭 링크 파일이다.
default 파일에는 기본적으로 수행할 설정 내용이 들어있다.

사실 원래 위 내용은 아니고 다른 내용이 있었는데 나는 80으로 오는 요청을 8080으로 포트포워딩하기 위해서 위와 같이 작성해주었다. server_name에는 도메인명을 작성하면 되는데 나는 현재 일단 도메인명은 없어서 localhost로 지정하였다.
만약 default가 아닌 다른 파일로 만들었다면 sites-enabled에 해당 파일을 참조하는 심볼릭 링크 파일을 만들어 주어야 한다.
해당 과정은 진행해야 하는 이유는 다음과 같다.

/etc/nginx/ 내의 nginx.conf 파일에 동작 관련 설정 내용이 작성되어 있다.

아래로 조금 내려보면 62행에 include로 작성된 행을 볼 수 있는데 여기서 위에서 설정한 파일을 포함시키는 것이다. 그래서 sites-enabled에 심볼릭 링크 파일을 만들어서 위 파일 내에 포함시키는 역할을 하는 것이다.
사실 따로 파일을 만들지 않고 위 http 블록 내에 직접 작성해도 된다.
변경을 다 했으면 systemctl restart nginx로 nginx 서비스를 재시작시킨다.
sudo systemctl restart nginx
iptables 설정 변경하기
사실 위 nginx 설정만으로는 작동하지 않을 수도 있다.
iptable에서 해당 포트에 대한 허용 내역이 없으면 외부에서 접근할 수 없기 때문이다.
sudo iptables -L --line-numbers -v -n
위 명령어로 현재 iptables 설정 내역을 확인해보자.

뭔가 쭉 길게 나오는데 맨 윗부분만 보면 된다.
위 내용은 내가 이미 추가한 내용이 있어서 그렇고 아마 처음 진행하면 4번이 없고 총 6행만 나올 것이다.
여기서 80 포트를 허용하는 명령어를 작성해야 한다.
sudo iptables -I INPUT 4 -p tcp --dport 80 -j ACCEPT
4번 행 위치에 TCP 80 포트로 오는 요청을 허용하는 명령어이다.
sudo iptables-save | sudo tee /etc/iptables/rules.v4
재부팅 후에도 설정이 유지되도록 위 명령어를 수행한다.
테스트 해보기
이제 해야 할 설정은 모두 했으니 실제로 동작하는지 확인해 보자!

내 어플리케이션이 있는 가상 인스턴스의 퍼블릭 IP 주소로 조회 요청을 보냈더니 조회가 잘 되는 것을 확인할 수 있었다.
무엇보다 80 포트를 이용하기 때문에 포트 번호를 작성하지 않아도 되는 장점이 있다.
나중에는 인증서를 발급받아 443 포트를 이용하여 구성할 수도 있다.
'공부 > 기타' 카테고리의 다른 글
| [HTTPS] 하나의 IP에서 여러 도메인 HTTPS 처리하기 (0) | 2024.11.18 |
|---|---|
| [Git] 잔디 안 심어지는 문제 해결하기 (0) | 2024.10.09 |
| [Git] 서브모듈(Submodule)로 설정 파일 분리하기 (0) | 2024.10.03 |
| [RabbitMQ] 우분투 22.04에 RabbitMQ 설치하기 (0) | 2024.09.21 |
| 프론트에서 쿠키를 사용 시 withCredentials 또는 credential 포함시켜야 하는 이유 (0) | 2024.06.15 |