주소
EC2
목표
SNMP
ELB-EC-1 은 mgt 라는 경로를 가지고
ELB-EC-2 은 dev 라는 경로를 가지고 있다.
# ELB-EC2-1
# 관리자 권한으로 세팅
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
<?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'];
?>
# 관리자 권한으로 세팅
sudo su -
# ELB-EC2-1 ELB-EC2-2 퍼블릭IP를 변수에 지정
EC21=3.36.72.41
EC22=13.125.58.86
# 변수 잘 들어갔는지 확인
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.184.198 # 클라이언트 IP
Server Public IP = 3.36.72.41 # ELB-EC2-1 의 퍼블릭 IP
Server Private IP: 10.0.0.140 # ELB-EC2-1 의 프라이빗 IP
X-Forwarded-for:
# 자신의 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
EC2 > 로드밸런싱 > 로드밸런서 > Load Balancer 생성
Application Load Balancer 생성
Load Balancer 구성
보안 설정구성
보안그룹구성
라우팅 구성
대상 등록
검토 후 생성
# ALB DNS 이름을 변수로 지정
ALB=ALB-TEST-910493210.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 # 접속한 사람의 주소
# ELB-EC2-1/2
tail -f /var/log/httpd/access_log
## 출력결과 - health check 들이 대부분 보이게 됨 ( ALB 생성할 떄 서버의 health check 설정 기억하기)
# health check를 제외하고 로그 출력하기
tail -f /var/log/httpd/access_log |grep -v "ELB-HealthChecker/2.0"
# Apache 기본 로그 설정 정보 확인
grep -n LogFormat /etc/httpd/conf/httpd.conf
# Apache 기본 로그 설정 변경 : 196번째 줄에 %{X-Forwarded-For}i 추가 > ctrl+x > y > enter
nano /etc/httpd/conf/httpd.conf
LogFormat "%{X-Forwarded-For}i %h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
# HTTP 다시 로드(시스템 다시 시작)
systemctl reload httpd
# 실시간 로그 출력 후 외부에서 접속 시도
tail -f /var/log/httpd/access_log |grep -v "ELB-HealthChecker/2.0"
EC2 > 로드밸런싱 > 로드밸런서 > Load Balancer 생성
Network Load Balancer 선택
Load Balancer 구성
검토 후 생성
로드 밸런서 삭제 (EC2 → 로드 밸런싱 → 로드 밸런서 → 작업 → 삭제)
대상 그룹 삭제 (EC2 → 로드 밸런싱 → 대상 그룹 → 작업 → 삭제)
CloudFormation 스택 삭제 (CloudFormation → 스택 → 스택 삭제)