클라우드 | 가상화/AWS

AWS - 3. NGINX 설치 및 이중화(CLB)

mamdragors 2025. 12. 5. 18:26

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-2ANginx-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.구매한도메인