리버스 프록시 캐싱은 클라이언트의 요청을 먼저 받아서 캐시된 응답을 제공하고, 캐시되지 않은 경우 백엔드 서버에 요청을 전달하는 방식
Nginx 설정 파일에 캐싱을 추가하는 예시
http {
# 캐시할 위치 설정
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m max_size=1g inactive=60m use_temp_path=off;
server {
listen 80;
location / {
# 백엔드 서버로 요청 전달
proxy_pass http://backend_server;
# 캐시 설정
proxy_cache my_cache;
proxy_cache_valid 200 1h; # 200 OK 응답에 대해 1시간 동안 캐시
proxy_cache_valid 404 1m; # 404 응답에 대해 1분 동안 캐시
proxy_cache_use_stale error timeout updating; # 백엔드 서버가 에러를 반환하거나 시간이 초과되면 캐시된 응답 사용
add_header X-Cache-Status $upstream_cache_status; # 캐시 상태를 헤더에 추가
}
}
}
- proxy_cache_path: 캐시 파일이 저장될 디렉토리와 캐시 관련 설정을 정의
- proxy_cache: 사용할 캐시 영역을 지정
- proxy_cache_valid: 특정 상태 코드에 대해 캐시할 유효 시간을 설정 (예를 들어, 200 OK 응답에 대해 1시간 동안 캐시)
- proxy_cache_use_stale: 백엔드 서버에서 오류나 타임아웃이 발생하면 캐시된 데이터를 사용하도록 설정
- add_header: 클라이언트에게 캐시 상태를 알리기 위해 응답 헤더에 캐시 상태를 추가
리버스 프록시의 캐싱 동작 원리
- 클라이언트 요청 수신
클라이언트가 브라우저를 통해 서버에 요청을 보낼 때, 이 요청은 리버스 프록시를 통해 전달된다. - 캐시 확인
리버스 프록시는 캐시에 요청한 데이터가 저장되어 있는지 확인한다.- 캐시 히트(Cache Hit): 요청한 데이터가 캐시에 존재하는 경우, 원본 서버에 요청을 전달하지 않고 캐시에서 즉시 데이터를 반환
- 캐시 미스(Cache Miss): 요청한 데이터가 캐시에 없을 경우, 리버스 프록시는 원본 서버에서 데이터를 가져와 클라이언트에 반환하고, 해당 데이터를 캐시에 저장
- 캐시 갱신
캐시에 저장된 데이터가 오래되거나 변경된 경우, 리버스 프록시는 원본 서버에서 최신 데이터를 가져와 캐시를 업데이트한다.
리버스 프록시 캐싱의 주요 특징
1. 정적 콘텐츠 제공
- 리버스 프록시는 HTML, CSS, JavaScript 파일 및 이미지와 같은 정적 콘텐츠를 캐싱하여 요청이 들어올 때마다 원본 서버에 연결할 필요를 없앤다.
- 정적 콘텐츠는 변경 빈도가 낮아 캐싱에 적합하다.
2. 동적 콘텐츠 캐싱
- 일부 리버스 프록시는 동적 콘텐츠도 캐싱할 수 있다.
예를 들어, 사용자 별로 동일한 결과를 반환하는 검색 요청이 있다면 이를 캐싱하여 서버 부담을 줄인다. - 이를 위해 동적 콘텐츠의 캐시 정책(예: 사용자 세션 기반)을 설정해야 한다.
3. TTL(Time to Live)
- 각 캐시 데이터는 유효 기간(TTL)을 갖는다.
- TTL이 지나면 캐시는 해당 데이터를 무효화하고 원본 서버에서 최신 데이터를 가져온다.
'네트워크' 카테고리의 다른 글
[네트워크] NGINX 로 Reverse Proxy 및 로드밸런싱 이해하기 (0) | 2024.12.29 |
---|---|
HTTPS와 SSL/TLS 암호화 (0) | 2024.12.22 |
[네트워크] 포트번호 (0) | 2024.12.15 |
[네트워크] Redirect 와 Forward (0) | 2024.12.15 |
[네트워크] localhost 와 127.0.0.1 (0) | 2024.12.12 |