원문 https://serversforhackers.com/nginx-caching


- varnish 마찬가지로 nginx 매우 합리적인 용도의 web cache이다.

- nginx static content 처리 못지 않게 dynamic content proxy 처리하는 것도 수준급이다.


Use Cases

- nginx 다른 서버로부터 수신한 content cache 처리할 있다.

- use case as nginx as a cache server

  - 웹서버의 앞단에 위치 : gateway 동작, LB 유사하게 동작.

  - cache result of FastCGI/uWSGI process.

    - 보통의 유저는 사이트의 dynamic 요소를 요구하지 않음. 단지 content 보기 원할 .

- cache server 주요 이점 : app. server load 경감. static or dynamic content 두루 cache.


How It Will Work

- Origin Server

 - static file 또는 dynamic하게 생성한 HTML 서비스

 - assets(혹은 content) cache 있는지 결정. (HTTP cache header 이용)

- Cache Server

 - frontman : client로부터 HTTP request 수신. 직접 처리(요청받은 리소스의 신선한 캐시를 가지고 있다면)할지 Origin Server 처리를 맡길지 결정

 - Origin Server 처리를 맡긴 후에는 Origin Server 응답한 헤더에서 리소스를 캐시할지 간단히 전달만 할지 결정

 - 역할

  - HTTP request 캐싱된 응답을 허용하는지, 현재 내가 가진 캐시 리소스가 신선한지 결정

  - 위에서 request 캐싱을 허용하지 않거나, 캐시 리소스가 오래된 버전이면, HTTP request Origin Server 전달.

  - HTTP response 적절히 응답

- Client

 - local(private) cache 가짐

  - ex) browser cache

  - image, CSS, JS file

 - local cache fresh item 있으면 재요청하지 않음

 - 역할

  - 요청을 보냄

  - 응답을 캐싱

  - local cache에서 item 쓸지, HTTP request 보낼지 결정


Origin Server

- origin server cache 리소스의 헤더를 적당히 세팅할 책임

- origin server 리소스 타입별 expires 헤더 세팅 예제

- html,xml,json (-1) < rss, atom (1h) < image (1M) < css,js (1y)

- Cache-Control "public" : 누구나 캐시 가능!

- "private" : browser private cache 캐싱!

- Cache-Control: no-cache : don't cache!


Cache Server

- reverse proxy + caching function

- proxy_cache_path : level MD5 hash 이용하여 cache item hierarchy 구성, 검색 용이

- proxy_cache_key : static entry $scheme$request_method$proxy_host$uri

dynamic (CGI) entry FastCGI, SCGI, uSGI 별로 각각 cache_key가 설정되는 듯. (추가 연구 필요)

+ Recent posts