링크 접속
다음
클릭 -> key설정
후 다음
클릭 -> 다음
클릭 -> 스택 생성
클릭
ELB-EC2-1
sudo su -
tree /var/www/html
/var/www/html
cat /var/www/html/xff.php
ELB-EC2-2
sudo su -
tree /var/www/html
/var/www/html
cat /var/www/html/xff.php
EC21= 아이피 주소
EC22= 아이피 주소
echo $EC21
echo $EC22
# 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
Load Banlancer 생성
클릭 -> ALB 찾아서 생성
클릭
1. 기본 구성
- 이름(ALB-TEST), 인터넷 경계
- 리스너 : 프로토콜(HTTP), 포트(80)
- 가용 영역 : ELB-VPC, 2a 와 2c 선택
2. 보안 설정 구성 : skip
3. 보안 그룹 구성 : 기존보안그룹 (###-ELBSG-### , TCP 80, 22 허용) 선택
4. 라우팅 구성
- 대상 그룹(새 대상 그룹), 이름(ALB-TG), 대상 유형(인스턴스), 프로토콜(HTTP), 포트(80)
- 상태 검사 → 고급 상태 검사 설정 : 정상 임계 값(3), 간격(10), 나머지는 기본값
5. 대상 등록 : 하단 인스턴스 선택 → 등록된 항목에 추가
6. 검토 → 생성
EC2 -> 네트워크 및 보안 -> 네트워크 인터페이스에서 IP주소랑, 인스턴스 소유자 확인
ALB=ALB DNS 주소
echo $ALB
# curl 접속 테스트 - ALB 는 기본 라운드 로빈 방식으로 대상 분산
dig $ALB +short
while true; do dig $ALB +short && echo "------------------------------" && date; sleep 5; done
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
curl $ALB/xff.php ;echo
curl $ALB/xff.php ;echo
# /dev/index.html 접근
curl $ALB/dev/index.html --silent
curl $ALB/dev/index.html --silent
# /mgt/index.html 접근
curl $ALB/mgt/index.html --silent
curl $ALB/mgt/index.html --silent
tail -f /var/log/httpd/access_log
tail -f /var/log/httpd/access_log |grep -v "ELB-HealthChecker/2.0"
tcpdump tcp port 80 -nn
# Apache 기본 로그 설정 정보 확인
grep -n LogFormat /etc/httpd/conf/httpd.conf
# Apache 기본 로그 설정 변경 : 196번째 줄에 %{X-Forwarded-For}i 추가
nano /etc/httpd/conf/httpd.conf
# CTRL+X Y Enter 로 저장하고 빠져나오기
# HTTP 다시 로드
systemctl reload httpd
# 실시간 로그 출력 후 외부에서 접속 시도
tail -f /var/log/httpd/access_log |grep -v "ELB-HealthChecker/2.0"
- 대상 그룹 생성 : Dev-Group(ELB-EC2-1) , Mgt-Group(ELB-EC2-2)
- 리스너 규칙 편집 : 경로 /dev/* → 전달 대상(Dev-Group) , 경로 /mgt/* → 전달 대상(Mgt-Group)
Create target group
클릭
Target group name 'Dev-Group' 입력
VPC ELB-VPC
로 변경
Next
클릭
ALB-EC2-1 클릭 -> Include as pending below
클릭
추가 됐으면 Create target group
클릭
Mgt-Group도 똑같이 만들기
EC2 -> 로드밸런서 -> ALB-TEST 선택 후 리스너 클릭 -> 규칙 보기/편집
클릭
상단에 +
버튼 클릭
규칙 삽입
클릭
조건 -> 경로 -> 값 /dev/*
전달 대상 -> 대상 그룹: Dev-Group
저장
클릭
Mgt-group에도 똑같이 리스너 규칙을 추가해줍니다.
규칙 설정 전
규칙 설정 후
목적: HTTP header 에 이름이 user 이고 값이 이름인 쿠키(Cookie)가 매칭되면 고정된 응답을 반환
EC2 -> 로드밸런서 -> ALB-TEST 선택 후 리스너 클릭 -> 규칙 보기/편집
클릭
상단에 +
버튼 클릭 -> 규칙 삽입
클릭
리스너 규칙 편집 : HTTP 헤더 - Cookie 는 user=닉네임 → 고정 응답 반환 200 "Hello 닉네임"
curl --cookie "user=닉네임" $ALB ;echo
목적: 소스IP 주소가 매칭되면 고정된 응답을 반환
규칙 삽입
클릭
리스너 규칙 편집 : 소스IP -확장='My-EC2 공인 IP입력' → 고정 응답 반환 200 "Hello EC2 Instance. Your IP address #"
# 인터넷 사용 시 자신의 IP 주소(공인IP)를 확인하는 법
curl -4 icanhazip.com
# 규칙 확인
curl $ALB
목적: 쿼리 문자열 값이 매칭되면 고정된 응답을 반환
리스너 규칙 편집 : 쿼리 문자열='ABTest' → 고정 응답 반환 200 "A/B Test, option A selected"
curl $ALB
curl $ALB?ABTest=A
HTTP Request method 기반 라우팅 설정 - 고정 응답 반환
목적: HTTP 특정 메소드가 매칭되면 고정된 응답을 반환
리스너 규칙 편집 : HTTP 요청 메서드='READ' → 고정 응답 반환 200 "Custom READ method invoked"
[root@ip-172-31-7-124 ~]$ curl --request READ $ALB
Custom READ method invoked
리스너 규칙:
HTTP 헤더 → **User-Agent** 는 *iPhone*
고정 응답 반환 : 503 iPhone Access Deny
리스너 규칙 설정 전
리스너 규칙 설정 후
ELB-EC2-1 인스턴스 중지
ELB-1 으로 접속은 안 되네요
EC2 -> 대상 그룹 -> 모니터링 클릭
비정상 호스트 확인 -> 음 ... 잘못한 건가
참고 자료 : AFOS[2기] 노션 내용