[실습 목표]
- ALB 생성 및 DNS 적용
- NLB 생성
# ELB-EC2-1
# 관리자 권한으로 세팅
sudo su -
# 디렉토리(폴더) 트리 구조 출력
[root@ELB-EC2-2 ~]# tree /var/www/html
/var/www/html
├── index.html
├── dev
│ └── index.html
└── xff.php
1 directory, 3 files
# xff 파일 확인하기
cat /var/www/html/xff.php
xff.php 파일 내용
- 시간 출력
- CPU 부하도 출력
- IP 주소 출력
<?php
date_default_timezone_set("Asia/Seoul");
Print(date(DATE_RFC822));
echo "\n";
echo "\n";
$idleCpu = exec('vmstat 1 2 | awk \'{ for (i=1; i<=NF; i++) if ($i=="id") { getline; getline; print $i }}\'');
echo "Current CPU Load:";
echo 100-$idleCpu;
echo "%";
echo "\n";
echo "\n";
header('Content-Type: text/plain');
echo "Last Client IP: ".$_SERVER['REMOTE_ADDR'];
echo "\nServer Public IP = ".$_SERVER['HTTP_HOST'];
echo "\nServer Private IP: ".$_SERVER['SERVER_ADDR'];
echo "\nX-Forwarded-for: ".$_SERVER['HTTP_X_FORWARDED_FOR'];
#echo "\nDNS name used by client = ".$_SERVER['SERVER_NAME'];
?>
# ELB-EC2-2
# 관리자 권한으로 세팅
sudo su -
# 디렉토리(폴더) 트리 구조 출력
[root@ELB-EC2-2 ~]# tree /var/www/html
/var/www/html
├── index.html
├── mgt
│ └── index.html
└── xff.php
1 directory, 3 files
# xff 파일 확인하기
cat /var/www/html/xff.php
# 관리자 권한으로 세팅
sudo su -
# ELB-EC2-1 ELB-EC2-2 퍼블릭IP를 변수에 지정
EC21=3.38.106.166
EC22=54.180.24.96
# 변수 잘 들어갔는지 확인
echo $EC21
echo $EC22
# ELB-EC2-1 서비스 확인 = curl : http 요청 보내기
curl $EC21
# ELB-EC2-1dml xff 파일 실행하기
curl $EC21/xff.php
# 출력내용
Mon, 26 Jul 21 23:53:42 +0900
Current CPU Load:1%
Last Client IP: 13.125.230.163 # 클라이언트 IP
Server Public IP = 3.38.106.166 # ELB-EC2-1 의 퍼블릭 IP
Server Private IP: 10.0.0.154 # ELB-EC2-1 의 프라이빗 IP
X-Forwarded-for: # Blank
# 자신의 IP 확인 = 클라이언트IP
curl ipinfo.io
# sysName은 사용자가 장비에 설정한 장비명(Linux의 Hostname)
snmpget -v2c -c public $EC21 1.3.6.1.2.1.1.5.0
# 출력내용
SNMPv2-MIB::sysName.0 = STRING: ELB-EC2-1
# sysUpTimeInstance(sysUpTime)값은 장비가 부팅되어 현재까지 동작한 milli-second 값이며, 쿼리 시 업데이트 되는 정보
# 아래 값의 경우 부팅 후 2분 10초가 경과된 정보이다
[root@MyEC2 ~]# snmpget -v2c -c public $EC22 1.3.6.1.2.1.1.3.0
DISMAN-EVENT-MIB::sysUpTimeInstance = Timeticks: (13098) 0:02:10.98
# ELB-EC2-1 서비스 확인
curl $EC21
curl $EC21/xff.php;echo
curl $EC21/dev/
snmpget -v2c -c public $EC21 1.3.6.1.2.1.1.5.0
snmpget -v2c -c public $EC21 1.3.6.1.2.1.1.3.0
# ELB-EC2-2 서비스 확인
curl $EC22
curl $EC22/xff.php;echo
curl $EC22/mgt/
snmpget -v2c -c public $EC22 1.3.6.1.2.1.1.5.0
snmpget -v2c -c public $EC22 1.3.6.1.2.1.1.3.0
# ALB DNS 이름을 변수로 지정
ALB=ALB-TEST-1485545638.ap-northeast-2.elb.amazonaws.com
# ALB 변수 지정 확인
echo $ALB
# curl 접속 테스트 - ALB 는 기본 라운드 로빈 방식으로 대상 분산 되는 것을 확인할 수 있음
dig $ALB +short
while true; do dig $ALB +short && echo
# 접속 테스트 - 1:1 비율로 바꿔가며 Ec1과 ec2 반응을 하는 것을 볼 수 있음
curl $ALB
curl $ALB
for i in {1..20}; do curl $ALB --silent ; done | sort | uniq -c | sort -nr
for i in {1..100}; do curl $ALB --silent ; done | sort | uniq -c | sort -nr
## 출력내용 - 50:50 으로 ELB-EC2-1, ELB-EC2-2 반응
[ec2-user@MyEC2 ~]$ for i in {1..100}; do curl $ALB --silent ; done | sort | uniq -c | sort -nr
50 <h1>ELB-EC2-2 Web Server</h1>
50 <h1>ELB-EC2-1 Web Server</h1>
# xff 실행으로 ip 주소 보기
curl $ALB/xff.php ;echo
## 출력내용 - Last Client IP 와 X-Forwarded-for 가 어떻게 바뀌었는지 위와 비교해볼것 (중요)
Tue, 27 Jul 21 00:44:14 +0900
Current CPU Load:0%
Last Client IP: 10.0.1.145 # ALB의 IP
Server Public IP = alb-test-910493210.ap-northeast-2.elb.amazonaws.com
Server Private IP: 10.0.1.91
X-Forwarded-for: 13.125.184.198 # 접속한 사람의 주소
사용자의 IP 주소를 출력해줍니다.
ALB를 사용하게 되면 Last Client IP가 ALB의 IP가 출력되기 때문에 Last Client IP로는 누가 접근했는지 알 수 없는 문제가 발생하게 되는데, 이를 X-Forwarded-for을 이용해서 해결할 수 있습니다.