Search
🌐

[HTTP 완벽 가이드] 5. 웹서버 & 6. 프록시

[HTTP 완벽 가이드] 7. 캐시
Study
Web
2023/06/0613:57
[HTTP 완벽 가이드] 7. 캐시
Study
Web
2023/06/0613:57

1. 웹서버

1.1. 커넥션 수락

새 커넥션 생성
역방향 DNS (reverse DNS)
클라이언트 IP → 클라언트 호스트 명으로 변환
hostname lookup은 time consuming
필요이유
호스트명을 구체적인 접근 제어와 로깅을 위해 사용할 수 있음
ident 프로토콜을 통해 어떤 사용자가 HTTP 커넥션 초기화 했는지 확인 가능

1.2. 요청 메세지 수신

네트워크 커넥션에서 데이터 읽고 파싱 후 요청 메세지 구성
네트워크 커넥션은 언제든 무효화 가능
파싱 후 이해가 가능한 수준의 양 확보될 때까지 메시지 일부분을 메모리에 저장
요청 메세지 쉽게 다루기 위해 내부의 자료 구조 저장
커넥션 입/출력 처리 아키텍처
단일 스레드 아키텍처
멀티 프로세스와 멀티 스레드 아키텍처
다중 I/O 아키텍처
다중 멀티스레드 I/O 아키텍처

1.3. 요청 처리

메서드, 리소스, 헤더, 본문 얻어 처리

1.4. 리소스 맵핑 및 접근

docroot
문서 루트
특정 폴더를 웹 컨텍츠를 위해 예약
특정 파일을 해당 폴더에 저장하여 리소스 맵핑 및 접근
directoryIndex
디렉토리 URL에 대한 요청 처리
동적 컨텐츠 리소스 맵핑
SSI (서버사이드 인클루드)

1.5. 응답 생성

응답 엔티티
Content-Type
응답 본문의 MIME 타입 서술
예) image/gif
Content-Length
응답 본문의 길이
예) 8572
실제 응답 본문 내용
리다이렉션
3XX 응답

1.6. 응답 전송

지속적으로 커넥션 상태 추적 및 관리 필요

2. 프록시

2.1. 프록시 서버

서버와 클라이언트 사이 트랜잭션 수행 중개인

2.2. 프록시 서버 사용 예시

실용적이고 유용한 일들 수행
보안 개선, 성능 향상, 비용 절약
필터링 프록시
예) 성인 컨텐츠 차단
중앙 접근 제어 프록시
문서 접근 제어
클라이언트에 따라 접근 제어 가능
방화벽 프록시
필터링 라우터 사이의 방화벽 프록시 사용
프록시 캐시
웹 캐시
대리 프록시 (Surrogate)
서버 가속기
공용 컨텐츠에 대한 느린 웹서버 성능 개선을 위해 사용
CDN?
컨텐츠 라우터
트래픽 조건과 컨텐츠 종류에 따라 요청을 특정 웹서버로 유도
트랜스코더
컨텐츠를클라이언트에 전달하기 전에 본문 포맷 수정
데이터 표현 방식 변환
익명화 프록시 (Anonymizer)
HTTP 신원 식별 가능한 특성드을 적극적으로 제거
클라이언트 IP 주소, From 헤더, Refer 헤더, 쿠키, URL 세션 아이디

2.3. 프록시 서버 배치

출구(Egress) 프록시
로컬 네트워크와 인터넷 사이에 오가는 트래픽 제어
로컬 네트워크 출구에 프록시 위치
용도
회사 밖 해커 방화병 제공
인터넷 요금 절약 및 인터넷 트래픽 성능 개선
접근(입구) 프록시
ISP 접근 지점에 위치
사용자들의 다운로드 속도 개선
인터넷 대역폭 비용 절감
대리(리버스) 프록시
네트워크 가장 끝에 있는 웹서버 바로 앞에 위치
웹서버로 향하는 모든 요청을 처리하고 필요할때만 웹서버에 자원 요청
보안 기능 추가, 성능 개선 가능
네트워크 교환 프록시
네트워크 사이의 인터넷 피어링 교환 지점에 위치
인터넷 교차로 혼잡 완화, 트래픽 흐름 감시

2.4. 프록시 계층

클라이언트와 웹서버 사이에 여러 프록시가 있는 경우 계층이라고 함
프록시들은 부모 자식 관계를 가짐
인바운드 프록시
서버에 가까운 프록시
부모 프록시
아웃바운드 프록시
클라이언트에 가까운 프록시
자식 프록시
프록시 계층의 종류
정적 계층
동적 계층 (동적 부모 선택)
부하 균형
자식 프록시가 부하 분산을 위해 부모들의 작업량 수준에 근거해서 부모 프록시 선택
지리적 인접성에 근거한 라우팅
자식프록시가 원 서버의 지역을 담당하는 부모 선택
프로토콜/타입 라우팅
URI에 근거하여 다른 부모나 원서버로 라우팅

2.5. 프록시 트래픽 처리 방법

웹 요청을 프록시로 보내는 방법 (클라이언트 트래픽 → 프록시)
클라이언트 수정
수동 설정
브라우저 기본 설정
PAC 파일 (프록시 자동 설정 파일)
자바스크립트 함수로 적절한 프록시 서버 선택
자바스크립트 PAC 파일의 URI를 브라우저에 설정 필요
WPAD (웹 프록시 자동 발견 프로토콜)
브라우저에 맞는 PAC 파일을 자동으로 찾아주는 알고리즘
네트워크 수정
트래픽을 가로채어 프록시로 리다이렉트
스위칭 장치, 라우팅 장치 사용
인터셉터 프록시
DNS 이름 공간 수정 (대리 프록시)
웹 서버의 이름 및 IP 주소를 프록시가 직접 사용
DNS 이름 테이블 수동 편집 또는 동적 DNS 서버를 이용해 조정 가능
웹서버 수정
HTTP 리다이렉션
서버 → 클라이언트 → 프록시로 디이렉트

2.6 .프록시 요청 특징

프록시 URI는 서버 URI랑 다름
클라이언트가 서버 대신 프록시로 보낼 때 요청 URI가 달라짐
to 웹서버
부분 URI 사용
스킴, 호스트, 포트 번호가 없어도 전송 가능
to 프록시서버
완전한 URI 사용
가상 호스팅
가상 호스팅 웹서버는 여러 웹서버가 물리적 웹서버 공유
따라서 접근하고자 하는 웹사이트의 호스트명을 알 필요가 있음
해결 방법
1.
명시적 프록시 사용
2.
호스트와 포트 정보가 담긴 Host 헤더를 웹서버가 요구
명시적 프록시
완전한 URI 받음
리버스 프록시 (대리 프록시)
원 서버의 호스트명, IP 주소를 사용해 원 서버를 대신하는 프록시 서버
부분 URI를 받음
인터셉터 프록시
네트워크 흐름에서 클라이언트 → 서버 트래픽을 가로채 캐시된 응답을 돌려주는 등의 역할을 수행
부분 URI를 받음
완전 URI와 부분 URI 사용 규칙
완전 URI → 프록시가 사용
부분 URI + Host 헤더 → Host 헤더를 이용해 원서버 이름과 포트 넘버 탐색
부분 URI + Host 헤더(x) →
대리 프록시 → 프록시에 실제 서버 주소 및 포트 넘버 설정 되어 있을 수 있음
인터셉터 프록시로 부터 온 트래픽 & 인터셉터 프록시에 실제 서버 주소 및 포트 넘버 사용가능하게 설정 → IP 주소 및 포트 번호 사용 가능
위의 사용 규칙 모두 실패 → 에러 메세지 반환
전송중 URI 변경
요청 URI 변경에 주의해야 함
URI 클라이언트 자동확장 및 호스트명 분석(Hostname Resolution)
프록시 존재 여부에 따라 요청 URI 다르게 분석 진행
프록시 없는 경우
사용자가 입력한 URI로 IP 주소 찾음.
호스트가 발견되면 그에 대응하는 IP 주소 연결 성공까지 시도
호스트가 발견 되지 않으면, 호스트명 확장 제공을 위해 몇가지 시도 진행

2.7. 메세지 추적

프록시가 흔해지면서 프록시를 넘나드는 메시지 흐름을 추적하는 니즈가 발생
Via 헤더
중간 노드 정보 나열
예) Via: 1.1 proxy-62.xxx.net, 1.0 cache.joe-hardware.com
TRACE 메서드 (TRACE 요청)
어던 프록시를 진가고 어떻게 각 프록시가 요청 메세지를 수정하는지 관찰 추적 가능
프록시 흐름 디버깅에 유용
TRACE 요청 시, 전체 요청 메세지를 HTTP 응답 메세지 본문에 포함시켜 송신자에게 그대로 전달