Почитайте про фукнцию кэширования ответов вышестоящего веб-сервера (зачастую Apache).
http://sysoev.ru/nginx/docs/http/ngx_http_proxy_module.html#proxy_cache
http://wiki.nginx.org/HttpProxyModule#proxy_cache
У себя настраивал так.
В секции server основного конфига nginx.conf описываем кэш:
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=upstream_cache_zone:10m max_size=300m; # upstream_cache_zone - имя зоны, путь к хранилищу кэша (/var/cache/nginx) может быть любой удобный
proxy_cache_valid 200 302 5m; # ответы с HTTP кодами 200 (OK) и 302 (Found) кэшируем на 5 минут
proxy_cache_valid 301 1h; # ответы с HTTP кодом 301 (Moved Permanently) кэшируем на 1 час
proxy_cache_valid any 1m; # все остальные ответы - на 1 минуту
proxy_cache_methods GET HEAD; # методы кэшируюемых запросов
proxy_cache_key "$host$request_method$request_uri$cookie_PHPSESSID"; # уникальный ключ для страниц в хранилище кэша, внимательнее отнесетись к его составлению, особенно если сайт предполагает авторизацию/аутентификацию (в моём случае пользовательские сессии различаются по куки с именем PHPSESSID)
proxy_cache_bypass $http_pragma $http_authorization; # не кэшируем в случае наличия заголовков Pragma (обычно задаёт отключение кэширования) или при наличии HTTP авторизации
proxy_cache_min_uses 1; # ответы вышестоящего веб-сервера попадают в кэш после первого же запроса
В нужной секции server (весь виртуальный хост) или любом конкретном location прописываем директиву proxy_cache с именем ранее описанной зоны:
proxy_cache upstream_cache_zone;