이전에 배포한 EC2 인스턴스
에 Route 53
에 등록했던 도메인과 Elastic Load Balancer
, ACM SSL/TLS 인증서
, nginx
를 설정해보려고한다.
먼저, Route 53에 EC2 퍼블릭 IPv4 주소
레코드를 생성해준다.
이제 EC2
에서 React
프로젝트를 실행 후 3000 Port
에 접속해보면, 해당 도메인이 연결된 것을 확인할 수 있다.
이제 배포가 완료되었지만 몇가지 문제가있다.
hoons.store:3000
에 3000 Port
가 붙어있는 것. https
연결이 되지 않는 것. 위의 문제를 Load Balancer
와 Nginx
를 사용해서 해결해볼려고한다.
Nginx
:경량 웹 서버
이며 클라이언트로부터 요청을 받았을 때 요청에 맞는 정적 파일을 응답해주는HTTP Web Server
로 활용되기도 하고,Reverse Proxy Server
로 활용하여 WAS 서버의 부하를 줄일 수 있는로드 밸런서
로 활용되기도 한다.
Nginx
는 프론트서버 앞에 존재하는데 80 port
를 가지고 있어서 여기로 접속하는 사람들에게 3000 Port
로 돌려주거나 build 된 index 파일
을 보여줄 것이다.
아래의 명령어를 통해 Nginx
를 설치해준다.
$ sudo apt update
$ sudo apt install nginx
이제 설치해준 Nginx
를 실행시켜 보면, EC2 퍼블릭 DNS
또는 설정한 도메인 hoons.store
혹은 hoons.store:80
에 접근하면 아래와 같이 Welcome to nginx
페이지를 확인 할 수 있다.
$ sudo service nginx start
$ sudo service nginx status
먼저, https
연결 문제를 해결하려고한다.
Load Balancer
: 가용영역에 있는 대상으로들어오는 트래픽
을자동으로 분산
시켜주는 서비스이다.
이제 http
로 들어오는 요청은 Load Balancer
를 통해 https
로 리디렉션 시켜준 뒤 Load Balancer
에서 설정한 EC2 의 원하는 Port
로 내보내줄것이다.
EC2 대시보드
좌측에 있는 대상 그룹
에 들어가준다.
EC2의 80 Port
로 이동시킬 타겟 그룹
을 생성해 EC2 인스턴스
를 대상으로 선택해 준다.
이제 Application Load Balancer (ALB)
를 생성해준다.
네트워크 매핑 부분은 EC2 인스턴스
가 속한 가용영역을 포함해 2개 이상 선택해준다. (모르면 4개 다 선택...)
보안 그룹
은 EC2
와 똑같이 설정해준다.
http 80 Port
와 https 443 Port
를 리스너
로 추가해주고 대상은 설정한 대상 그룹
으로 지정해준다. 또한, https 리스너
에는 이전에 발급받은 ACM SSL/TLS
인증서를 추가해준다.
추가로 http
로 접속하여도 https
로 리디렉션
시켜주기 위해서 80 Port 리스너
의 규칙을 아래와 같이 수정해준다.
이제 다시 Route 53
으로 가서 처음에 EC2 인스턴스
에 등록했던 레코드
를 아래와 같이 생성한 Load Balancer
로 바꿔준다.
이제 http 80 Port
로 접속시 => https 443 Port
로 리디렉션 후 Load Balancer
에서 대상 그룹
으로 지정한 80 Port
로 넘어가서 아래와 같이 https://hoons.store
에 접속 된 것을 볼 수 있다.
이제 Port Fowarding
을 해주기 위해 아래의 명령어를 통해서 아래의 Nginx
기본 설정 default
파일을 지워준다.
$ sudo rm -rf /etc/nginx/sites-available/default
$ sudo rm -rf /etc/nginx/sites-enabled/default
이제 위의 default
파일을 대신할 파일을 생성해 열어준다.
$ sudo vi /etc/nginx/sites-available/hoons.conf
아래의 내용을 입력해준다. 80 Port
로 들어왔을 경우 /home/${user_name}/${프로젝트 명}/${build 경로}
에 있는 index.html
파일을 보여주겠다는 설정이다.
// /etc/nginx/sites-available/hoons.conf
server {
listen 80;
server_name hoons.store;
location / {
root /home/ubuntu/React-Project/build;
index index.html;
try_files $uri $uri/ /index.html;
}
}
Nginx
는 sites-available
에 파일을 작성하고, 실제 연결되어야 하는 파일만 심볼릭 링크
를 통해 sites-enabled
폴더로 연결할 수 있다. 아래의 명령어를 통해 심볼릭 링크
를 설정해주자.
$ sudo ln -s /etc/nginx/sites-available/hoons.conf /etc/nginx/sites-enabled/hoons.conf
이제 다시 Nginx
를 실행시켜보면 https
연결과 Port
가 나오지 않는 제대로 된 React Project
가 배포된 것을 확인할 수 있다.
만약 Nginx
를 사용하였고, 정적 웹 사이트
배포가 아닌 pm2
를 사용해서 다른 port
에 프로젝트를 돌린다면 80 Port
로 들어온 요청을 다른 Port
로 Port Fowarding
해주는 방식을 사용하면 된다. (Load Balancer
로도 수행 가능)
위에 작성했던 경로의 /etc/nginx/sites-available/hoon.conf
파일에 아래와 같이 작성해준다. 80 Port
로 들어왔을 경우 3000 Port
로 보내주겠다는 설정이다.
// /etc/nginx/sites-available/hoons.conf
server {
listen 80;
server_name hoons.store;
location / {
proxy_pass http://127.0.0.1:3000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
또 다시 위와 마찬가지로 심볼릭 링크
도 설정해준다.
$ sudo ln -s /etc/nginx/sites-available/hoons.conf /etc/nginx/sites-enabled/hoons.conf
이제 EC2
환경에서 clone 받은 프로젝트 경로로 가서 프로젝트를 3000 Port
에 실행한 뒤 Nginx
를 실행해보면 마찬가지로 잘 배포된것을 확인할 수 있다.