개인 프로젝트를 AWS에 배포하는 단계에서 EC2앞에 nginx를 두고, F.E, B.E 모두 포트 포워딩을 해야 하는 상황이 생겼다.
어떻게 EC2에 nginx를 설치하고 멀티 포트 포워딩을 할 수 있는지 정리해보고자 한다.
내가 nginx를 이용하여 EC2에서 포트 포워딩 하고자 하는 구조는 아래와 같다.
EC2 환경
참고로 내 EC2 환경은, 프리티어를 이용하기 위한 t2.micro으로, ubuntu 22.04(LTS) 버전을 사용하고 있다.
환경에 따라 아래 기술한 명령어는 조금씩 달라 질 수 있으나, 큰 차이는 없다.
Nginx 설치
먼저 아래 명령어를 이용하여 nginx를 EC2에 설치 해 준다.
# Ubuntu 환경
sudo apt-get install nginx
//Linux 환경
sudo amazon-linux-extras install nginx1
Nginx 실행
아래 명령어를 통해 nginx를 실행시켜 주고, 정상적으로 구동되었는지 확인 해 보자.
sudo service nginx start
//상태 확인
sudo service nginx status
정상적으로 구동되었다면 아래처럼 확인할 수 있다.
Nginx 포트 포워딩 설정
정상적으로 작동하는 것을 확인했으니, 원하는 대로 포트 포워딩 하는 설정을 해주자.
아래 명령어를 치면 nginx 설정 파일로 접근 할 수 있다.
sudo vi /etc/nginx/nginx.conf
근데, 버전이 바뀌었는지 다른 블로그에서 얘기하는 파일형식이 조금 달랐다.
보통 http 안에 server라는 키가 존재 해야 하는데, 보이지 않는다.
하지만 가장 하단 부분을 보면 include 해서 sites-enabled 폴더 안에 있는 파일들을 모두 끌어 오고 있는 모습을 볼 수 있다.
우리는 이 부분을 수정해줄 것이다.(만약, server키가 바로 보인다면 여기에서 수정해주면 된다.)
1. 프론트엔드 포트포워딩
먼저, 아래 명령어를 통해 default 파일을 열어준다.
sudo vi /etc/nginx/sites-available/default
그럼 아래와 같은 모습의 파일이 보일 것이다.
server {
listen 80 default_server;
listen [::]:80 default_server;
root /var/www/html;
server_name _;
location / {
# First attempt to serve request as file, then
# as directory, then fall back to displaying a 404.
#try_files $uri $uri/ =404;
proxy_set_header HOST $http_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;
proxy_set_header X-NginX-Proxy true;
# 여기에 원하는 포트 번호를 [PORT] 자리에 넣어준다.
proxy_pass http://localhost:[PORT];
proxy_redirect off;
charset utf-8;
}
}
http는 기본포트 80번을 사용한다.
예를 들어 http://habits.co.kr 이라는 사이트에 포트 번호를 적지 않고 접속을 한다고 하면, 80번 포트로 접속하게 된다는 것이다.
따라서 나는 80번 포트를 프론트엔드쪽 서버 포트로 포트 포워딩 해주기로 했다.
proxy_pass 부분에 내가 원하는 포트 번호를 적어주고, :wq를 눌러 저장 후 종료해준다.
2. 백엔드 포트포워딩
아직 끝나지 않았다.
나는 하나의 EC2에서 백엔드, 프론트엔드 두 개의 서버를 돌리고 있으니 백엔드 쪽 포트포워딩은 따로 해줘야 했다.
여러 개의 포트를 포워딩 하는 방법은 간단하다. 앞서 include 되어있던 /etc/nginx/sites-available/ 경로에 하나의 파일을 더 생성해주면 된다.
cd /etc/nginx/sites-available/
sudo touch backend
나는 backend 서버쪽 포트 포워딩을 해 줄 것이라 backend라고 네이밍 했지만, 원하는 대로 정해주면 된다.
목록을 보니 기존에 있던 default 이외에 backend가 정상적으로 생성된 것을 확인 할 수 있다.
이제 해당 파일에 들어가서 아래처럼 설정 값들을 세팅 해 주자.
server {
listen [PORT] default_server;
listen [::]:[PORT] default_server;
root /var/www/html;
# Add index.php to the list if you are using PHP
index index.html index.htm index.nginx-debian.html;
server_name backend;
location / {
# First attempt to serve request as file, then
# as directory, then fall back to displaying a 404.
#try_files $uri $uri/ =404;
proxy_set_header HOST $http_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;
proxy_set_header X-NginX-Proxy true;
proxy_pass http://localhost:[PORT];
proxy_redirect off;
charset utf-8;
}
}
앞서 설정 했던 것과 거의 흡사하다. [PORT] 부분에는 원하는 값을 세팅해주고, server_name에는 원하는 대로 서버 네임을 설정해주면 된다.
3. nginx 설정 값 적용
이제 nginx에서 설정하여야 하는 부분들은 모두 끝났고, 가장 중요한 실제 적용을 해주어야 한다.
먼저 아래 명령어를 통해 정상적으로 config 값들이 세팅되는지 확인해 볼 수 있다.
nginx -t
만약 오타 없이 nginx가 지원하는 syntax대로 잘 설정 했다면 아래와 같은 모습을 볼 수 있을 것이고,
무언가 에러가 있다면 그 부분을 다시 수정 해 주자.
이제 아래 명령어를 통해 구동되고 있는 nginx를 재시작 시켜주자.
service nginx reload
service nginx restart
다시 한번 service nginx status를 이용해 상태 체크를 해보면 정상적으로 작동하고 있는 것을 볼 수 있다.
4. EC2 보안 설정(인바운드 설정)
nginx 쪽 설정은 위 처럼 하면 모두 끝났지만, 나는 80번 포트 이외의 포트(backend 포트)로 접근 할 때, 포트 포워딩이 안되는 상황을 겪었다. 이 부분은 EC2에서 인바운드 설정을 바꿔 주어야 한다.
AWS에서 EC2 -> 인스턴스 선택 -> 하단 보안 탭 클릭 -> 보안 그룹 명을 클릭 한다.
그런 다음 하단의 인바운드 규칙 탭 선택 -> 인바운드 큐칙 편집 버튼을 클릭하면 아래와 같은 화면으로 접근이 된다.
여기에서 가장 하단의 규칙 추가 버튼을 클릭 해 준다.
여기에서 규칙 추가 버튼 부분을 클릭하여, 추가로 포트를 열어준다. 설정 값을 아래처럼 선택해 주면 된다.
- 유형은 사용자 지정 TCP
- 포트범위에 내가 원하는 포트 번호
- 소스는 사용자 지정 클릭 후, 우측 돋보기 버튼을 이용하여 0.0.0.0/0을 선택해 준다.
최종적으로 하단에 있는 규칙 저장 버튼을 누르면 AWS에서 우리가 원하는 포트를 정상적으로 오픈 해준 것이다.
이제 백엔드 포트로 접근하면 nginx가 정상적으로 포워딩 해주는 것을 볼 수 있다!🤩
'CI CD' 카테고리의 다른 글
[AWS] CodeDeploy 설정 및 생성(feat. Deploy 역할 생성) (0) | 2023.12.10 |
---|---|
[AWS] IAM 역할 생성(EC2에 IAM 역할 부여) (0) | 2023.12.10 |
[AWS] S3 시작하기 (0) | 2023.12.10 |
[AWS] ec2 npm install 멈춤 현상 해결(feat. swapfile) (0) | 2023.12.10 |
[AWS] EC2 서비스 시작하기 (0) | 2023.09.13 |