2015-03-25 4 views
1

У меня возникли проблемы с получением NGINX для кэширования эскизов, которые я извлекаю из Dropbox с помощью команды proxy_pass. На том же сервере, что NGINX запущен я запускаю следующую команду несколько разNGINX proxy_pass не кеширующий контент

wget --server-response --spider http://localhost:8181/1/thumbnails/auto/test.jpg?access_token=123 

и получить точно такой же ответ с X-Cache: MISS каждый раз

HTTP/1.1 200 OK Сервер: Nginx/1.1.19 Дата: Ср, 25 марта 2015 20:05:36 GMT Content-Type: изображение/JPEG Content-Length: 1691 соединения: держать-жив прагму: нет-кэш кэш-контроль: no-cache X-Robots-T AG: NOINDEX, NOFOLLOW, noimageindex X-Cache: MISS

Вот мое мясо моего файла nginx.conf .. любые идеи о том, что я делаю неправильно здесь?

## Proxy Server Caching 
proxy_cache_path /data/nginx/cache keys_zone=STATIC:10m max_size=1g; 


## Proxy Server Setting 
server { 
    listen *:8181; 

    proxy_cache  STATIC; 
    proxy_cache_key "$request_uri"; 
    proxy_cache_use_stale error timeout invalid_header updating 
        http_500 http_502 http_503 http_504; 

    location ~ ^/(.*) { 
    set $dropbox_api 'api-content.dropbox.com'; 
    set $url '$1'; 

    resolver 8.8.8.8; 

    proxy_set_header Host $dropbox_api; 

    proxy_cache  STATIC; 
    proxy_cache_key  "$request_uri"; 
    proxy_cache_use_stale error timeout invalid_header updating 
        http_500 http_502 http_503 http_504; 

    add_header X-Cache $upstream_cache_status; 

    proxy_pass https://$dropbox_api/$url$is_args$args; 
    } 

    ##Error Handling 
    error_page 500 502 503 504 404 /error/; 
    location = /error/ { 
    default_type text/html; 
    } 
} 

ответ

5

Оказывается, что запросы уменьшенных возвращенный из Dropbox, включает заголовок

Cache-Control: no-cache 

и Nginx будут придерживаться этих заголовков , если они явно игнорируются, что можно сделать, просто используя следующую конфигурационную строку, которая будет игнорировать любой элемент управления кешированием.

proxy_ignore_headers X-Accel-Expires Expires Cache-Control; 

Мы также имели проблемы размещения опции «proxy_ignore_headers» в различных областях, в файле nginx.conf. Наконец, после многократного разыгрывания, мы получили его для работы, явно установив его в блок «location». Полный фрагмент конфигурационного файла можно найти ниже

## Proxy Server Caching 
proxy_cache_path /data/nginx/cache levels=1:2 keys_zone=STATIC:50m inactive=2h max_size=2g; 

## Proxy Server Setting 
server { 
    listen *:8181; 

    location ~ ^/(.*) { 
    set $dropbox_api 'api-content.dropbox.com'; 
    set $url '$1'; 

    resolver 8.8.8.8; 

    proxy_set_header Host $dropbox_api; 
    proxy_hide_header x-dropbox-thumbcachehit; 
    proxy_hide_header x-dropbox-metadata; 
    proxy_hide_header x-server-response-time; 
    proxy_hide_header x-dropbox-request-id; 

    proxy_hide_header cache-control; 
    proxy_hide_header expires; 

    add_header cache-control "private"; 
    add_header x-cache $upstream_cache_status; # HIT/MISS/BYPASS/EXPIRED 

    proxy_cache  STATIC; 
    proxy_cache_valid  200 1d; 
    proxy_cache_use_stale error timeout invalid_header updating 
       http_500 http_502 http_503 http_504; 
    proxy_ignore_headers X-Accel-Expires Expires Cache-Control; 

    proxy_pass https://$dropbox_api/$url$is_args$args; 
    } 
} 
0

Для того, чтобы кэшировать ответ проксите запрос между Nginx и происхождением должен быть печеньем меньше:

proxy_hide_header  Set-Cookie; 
    proxy_ignore_headers Set-Cookie; 

См полной конфигурации с методами недостоверности: https://gist.github.com/mikhailov/9639593