AWS - 3. NGINX 설치 및 이중화(CLB)
AWS 에서 VPC 를 생성했으므로 생성된 서버에 접속하여 Nginx 를 설치해볼 것이다.
vpc 생성은 아래 참고
https://mamdragors.tistory.com/25
AWS - 2. VPC생성하여 쉘접속
아래 작업을 진행할 것이다. 1. 도메인생성 (가비아)2. 도메인 등록 (AWS Route 53)3. 도메인과 연결할 인증서 생성 (AWS Certificate Manager)4. VPC 생성 - VPC 생성 - Subnet 생성 - Routing 테이블 생성 - Internet Gatew
mamdragors.tistory.com
전단계에서 만들어둔 Nginx2A 에 접속한다.
아이피를 할당받았는지 확인 하려 하였으나 ifconfig 명령어가 없다.
아래 명령어로 net-tools 를 설치한다.
apt -y install net-tools

설치 후 ifconfig 로 IP 를 할당 받았는지 확인해 본다.
VPC 인스턴스 시작 시 네트워크 설정에서 입력한 기본 IP 가 출력되는지 확인한다.

기본 IP는 AWS 의 "EC2 > 인스턴스" 목록에서 인스턴스를 선택하면 "세부 정보" 탭에서 에서 확인할 수 있다.(프라이빗 IPv4 주소)

nginx 설치전 작업
sudo vi /etc/apt/sources.list.d/nginx.list
아래 내용을 입력하고 :wq 로 저장하고 나온다. 만약 root 계정이면 맨 앞에 sudo 를 삭제해도 된다.
deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] https://nginx.org/packages/ubuntu jammy nginx
deb-src [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] https://nginx.org/packages/ubuntu jammy nginx


GPG 키 추가
curl -fsSL https://nginx.org/keys/nginx_signing.key | sudo gpg --dearmor -o /usr/share/keyrings/nginx-archive-keyring.gpg

저장소 업데이트 및 설치
sudo apt update
sudo apt install nginx

설치 버전확인 및 시작. enable 을 안해도 자동으로 시작되어 있을 수 있다.
sudo systemctl start nginx
sudo systemctl status nginx
sudo systemctl enable nginx

프로세스, 네트워크 상태 확인
ps -ef | grep nginx
netstat -antup | grep nginx

EC2 인스턴스 메타데이터 확인
ec2metadata

브라우저 주소창에 http://퍼블릭IP 를 입력하여 기본 페이지 확인

dpkg 로 파일을 찾고
기본 페이지를 아래 내용으로 바꿔치기 한다
dpkg -L nginx | grep index.html
vi /usr/share/nginx/html/index.html

바꿀 내용
<html>
<head>
<title>Amazon Nginx-2A Connected Success !!!</title>
<style> body {margin-top: 40px; background-color: red;} </style>
</head>
<body>
<div style=color:white;text-align:center>
<h1>Amazon Nginx-2A Connected Success !!!</h1>
<h2>Congratulations!</h2>
<p><em>Your application is now running on a container in Amazon ECS.</em></p> </p> </div>
</body>
</html>
서비스를 재시작하고 브라우저를 새로고침 하면 바뀐 내용으로 적용된 것을 확인할 수 있다.
systemctl restart nginx

이중화 작업
1. BASTION 서브넷 생성
VPC > 서브넷 에서 [서브넷 생성] 클릭

VPC 는 만들어둔 JON-PRD-VPC 선택
서브넷 이름 : JON-PRD-VPC-BASTION-PUB-2A
가용영역 : 아시아 태평양(서울)
IPv4 서브넷 CIDR 블록 : 10.250.4.0/24
[서브넷 생성] 클릭

1. NGINX-2C 서브넷 생성
다시 서브넷 생성 클릭

VPC 는 만들어둔 JON-PRD-VPC 선택
서브넷 이름 : JON-PRD-VPC-NGINX-PUB-2C
가용영역 : 아시아 태평양(서울)
IPv4 서브넷 CIDR 블록 : 10.250.11.0/24
[서브넷 생성] 클릭

서브넷 3개가 생성된것 확인

VPC > 라우팅 테이블로 이동 하여 [라우팅 테이블 생성] 클릭

이름 : JON-PRD-RT-PUB-2C
VPC : JON-PRD-VPC 선택
[라우팅 테이블 생성] 클릭

생성된 라우팅테이블 선택. 라우팅 탭에서 [라우팅 편집] 클릭

[라우팅 추가] 클릭
대상 : 0.0.0.0/0 선택
대상 : 인터넷 게이트웨이 선택
목록에서 내가만든 게이트웨이 JON-PRD-IGW 선택
[변경 사항 저장]

생성된 라우팅테이블 선택. "서브넷 연결" 탭에서 [서브넷 연결 편집] 클릭

이용 가능한 서브넷에서 JON-PRD-VPC-NGINX-PUB-2C 체크하고 [연결 저장]

VPC > 라우팅 테이블 에서 JON-PRD-RT-PUB-2A 를 선택하고 "서브넷 연결" 탭에서 [서브넷 연결 편집] 클릭

이용 가능한 서브넷에서 아래 2개 체크하 [연결 저장]
JON-PRD-VPC-NGINX-PUB-2A
JON-PRD-VPC-BASTION-PUB-2A

저장되면 명시적 서브넷 연결에 2개가 추가된다.

VPC > 보안 그룹 으로 이동하여 [보안 그룹 생성] 클릭

보안 그룹 이름 : JON-PRD-VPC-NGINX-PUB-SG-2C
설명 : 이름과 동일
VPC : JON-PRD-VPC 선택
[보안 그룹 생성] 클릭

목록의 name 을 보안그룹이름과 동일하게 수정한다.

목록에서 JON-PRD-VPC-NGINX-PUB-SG-2C 를 선택하고
"인바운드 규칙" 탭에서 [인바운드 규칙 편집] 클릭

[규칙 추가] 를 4번 클릭
| 유형 | 소스 |
| 모든 ICMP - IPv4 | Anywhere-IPv4 |
| SSH | Anywhere-IPv4 |
| HTTP | Anywhere-IPv4 |
| HTTPS | Anywhere-IPv4 |
유형과 소스를 선택하고 [규칙 저장] 클릭

보안그룹 목록에서 2A, 2C 2개 생성된것 확인. 다시 [보안 그룹 생성 클릭]

보안 그룹 이름 : JON-PRD-VPC-BASTION-PUB-SG-2A
설명 : 이름과 동일
VPC : JON-PRD-VPC 선택
[보안 그룹 생성] 클릭

name 을 보안 그룹 이름으로 수정해준다.

JON-PRD-VPC-BASTION-PUB-SG-2A 선택하고 [인바운드 규칙 편집] 클릭

[규칙 추가] 를 4번 클릭
| 유형 | 소스 |
| 모든 ICMP - IPv4 | Anywhere-IPv4 |
| SSH | Anywhere-IPv4 |
| HTTP | Anywhere-IPv4 |
| HTTPS | Anywhere-IPv4 |
유형과 소스를 선택하고 [규칙 저장] 클릭

EC2 > 인스턴스 에서 [인스턴스 시작] 클릭

이름 : JON-PRD-VPC-BASTION-PUB-2A
이름 규칙 : {VPC ID}-{서버 종류}-{PUB:public | PRI:private}-{가용영역}
애플리케이션 및 OS 이미지 : Ubuntu 선택
Amazon Machine Image : Ubuntu Server 22.04 LTS 선택
선택하면 일림 메시지가 뜬다. [변경 확인] 클릭

인스턴스 유형 : t3.micro
키 페어 이름 : 키페어가 있으면 선택하고 없으면 새 키 페어 생성 클릭
키페어가 선택되면 네트워크 설정 영역의 [편집] 클릭

VPC : JON-PRD-VPC
서브넷 : JON-PRD-VPC-BASTION-PUB-2A
퍼블릭 IP 자동 할당 : 활성화
보안그룹 : JON-PRD-VPC-BASTION-PUB-SG-2A
기본 IP : 10.250.4.240

다시 [인스턴스 시작] 클릭

이름 : JON-PRD-VPC-NGINX-PUB-2C
이름 규칙 : {VPC ID}-{서버 종류}-{PUB:public | PRI:private}-{가용영역}
애플리케이션 및 OS 이미지 : Ubuntu 선택
Amazon Machine Image : Ubuntu Server 22.04 LTS 선택
선택하면 일림 메시지가 뜬다. [변경 확인] 클릭

인스턴스 유형 : t3.micro
키 페어 이름 : 키페어가 있으면 선택하고 없으면 새 키 페어 생성 클릭
키페어가 선택되면 네트워크 설정 영역의 [편집] 클릭

VPC : JON-PRD-VPC
서브넷 : JON-PRD-VPC-NGINX-PUB-2C
퍼블릭 IP 자동 할당 : 활성화
보안그룹 : JON-PRD-VPC-NGINX-PUB-SG-2C
기본 IP : 10.250.11.240

인스턴스 목록에서 아래 3건이 있는지 확인
JON-PRD-VPC-NGINX-PUB-2A
JON-PRD-VPC-NGINX-PUB-2C
JON-PRD-VPC-BASTION-PUB-2A

JON-PRD-VPC-BASTION-PUB-2A 의 세부정보에서 "퍼블릭 IPv4 주소"를 복사하여 쉘 프로그램으로 접속한다.
root 권한으로 변경하고 net-tools 설치
sudo -i
apt -y update && apt -y install net-tools

BASTION 접속 영역에서
JON-PRD-VPC-NGINX-PUB-2A 의 "프라이빗 IPv4 주소" 로 ping 되는지 확인.
JON-PRD-VPC-NGINX-PUB-2C 의 "프라이빗 IPv4 주소" 로 ping 되는지 확인.
ping -c 2 10.250.1.240
ping -c 2 10.250.11.240

Nginx2A 접속 영역에서
JON-PRD-VPC-BASTION-PUB-2A 의 "프라이빗 IPv4 주소" 로 ping 되는지 확인.
JON-PRD-VPC-NGINX-PUB-2C 의 "프라이빗 IPv4 주소" 로 ping 되는지 확인.
ping -c 2 10.250.4.240
ping -c 2 10.250.11.240

JON-PRD-VPC-NGINX-PUB-2C 의 세부정보에서 "퍼블릭 IPv4 주소"를 복사하여 쉘 프로그램으로 접속한다.
root 권한으로 변경하고 net-tools 설치
sudo -i
apt -y update && apt -y install net-tools

Nginx2C 접속 영역에서
JON-PRD-VPC-BASTION-PUB-2A 의 "프라이빗 IPv4 주소" 로 ping 되는지 확인.
JON-PRD-VPC-NGINX-PUB-2A 의 "프라이빗 IPv4 주소" 로 ping 되는지 확인.
ping -c 2 10.250.4.240
ping -c 2 10.250.1.240

Nginx 설치
저장소 파일 생성 및 내용 넣기
vi /etc/apt/sources.list.d/nginx.list
-------- 내용 ------
deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] https://nginx.org/packages/ubuntu jammy nginx
deb-src [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] https://nginx.org/packages/ubuntu jammy nginx
GPG 키 추가
curl -fsSL https://nginx.org/keys/nginx_signing.key | sudo gpg --dearmor -o /usr/share/keyrings/nginx-archive-keyring.gpg
저장소 업데이트 및 설치
apt -y update && apt -y install nginx

설치 완료후 버전확인하고 프로세스 시작한다.
nginx -v
systemctl start nginx
systemctl status nginx

프로세스와 포트 확인
ps -ef | grep nginx
netstat -antup | grep :80

공인아이피 확인
ec2metadata | grep public-ip
브라우저에서 "http://공인아이피" 로 접속해 본다.

기본 페이지의 내용아래 내용으로 바꾼 뒤
nginx 를 재시작
브라우저에서 페이지를 새로고침 한다(Ctrl + F5)
vi /usr/share/nginx/html/index.html
---- 내용 ----
<html>
<head>
<title>Amazon Nginx-2C Connected Success !!!</title>
<style> body {margin-top: 40px; background-color: blue;} </style>
</head>
<body>
<div style=color:white;text-align:center> <h1>Amazon Nginx-2C Connected Success !!!</h1>
<h2>Congratulations!</h2> <p><em>Your application is now running on a container in Amazon ECS.</em></p> </p> </div>
</body>
</html>

nginx 의 index.html 경로 확인 방법
grep -r "root" /etc/nginx

이중화 구성 - CLB(Classic LoadBalancer)
Nginx2A, Nginx2C 서버에 nginx 설치가 완료되었으므로 이중화 작업을 할것이다.
EC2 > 네트워크 및 보안 > 보안 그룹 페이지 에서 [보안 그룹 생성] 클릭

보안 그룹 이름 : JON-PRD-CLB-SG
설명 : 이름과 동일
VPC : JON-PRD-VPC
[보안 그룹 생성] 클릭

Name 을 JON-PRD-CLB-SG 로 바꿔준다.

목록에서 JON-PRD-CLB-SG 를 선택하고
인바운드 규칙 탭에서 [인바운드 규칙 편집] 클릭

[규칙 추가] 클릭
유형 : HTTP
소스 : Anywhere-IPv4
[규칙 저장] 클릭

EC2 > 로드 밸런서 로 이동
[로드 밸런서 생성] 클릭

로드 밸런서 유형 선택 화면에서 하단의 "Classic LoadBalancer - 이전 세대" 클릭

[생성] 클릭


로드 밸런서 이름 : JON-PRD-CLB
체계 : 인터넷 경계
VPC : JON-PRD_VPC
가용영역 둘다 체크 하고 각각 서브넷을 선택한다.
ap-northeast-2a : JON-PRD-NGINX-PUB-2A
ap-northeast-2c : JON-PRD-NGINX-PUB-2C
보안그룹 : JON-PRD-CLB-SG
맨아래 [로드 밸런서 생성] 클릭



목록에서 JON-PRD-CLB 선택.
대상 인스턴스 탭에서 [인스턴스 관리] 클릭

아래 2개 체크 후 [변경 내용 저장] 클릭
JON-PRD-NGINX-PUB-2A
JON-PRD-NGINX-PUB-2C

생성된 로드밸런서 세부 정보에서 DNS 이름 복사

복사한 DNS 이름을 브라우저 주소창에 입력하고 엔터 (http://DNS이름)

브라우저에서 키보드의 F5 를 누르거나 새로고침 하면 Nginx-2A 와 Nginx-2C 가 번갈아 가면서 호출된다.

로드 밸런서 세부 정보의 대상 인스턴스 탭에서 각 인스턴스의 상태를 확인할 수 있다.

Route 53 > 호스팅 영역 페이지에서 호스팅 영역 이름을 클릭

[레코드 생성] 클릭

레코드 이름 : 입력하지 않음
레코드 유형 : A - IPv4 주소 및 일부 AWS .....
별칭 : 클릭하여 활성화
트래픽 라우팅 대상 : Application/Classic Load Balancer에 대한 별칭
아시아 태평양(서울)
JON-PRD-CLB
[레코드 생성] 클릭

생성 후 레코드 목록에 유형 A 로 clb 가 추가된 것을 확인할 수 있다.
다시 [레코드 생성] 클릭

레코드 이름 : www
레코드 유형 : A - IPv4 주소 및 일부 AWS .....
별칭 : 클릭하여 활성화
트래픽 라우팅 대상 : Application/Classic Load Balancer에 대한 별칭
아시아 태평양(서울)
JON-PRD-CLB
[레코드 생성] 클릭

호스팅 영역 세부 정보에서 A 레코드 2개가 추가된 것을 확인할 수 있다.

웹 브라우저에서 구매한 도메인으로 접속이 되는지 확인한다.
http://구매한도메인

http://www.구매한도메인
