Nginx Stati c кэширование содержимого proxy_cache_bypass proxy_no_cache - PullRequest
0 голосов
/ 30 мая 2020

У меня проблема с использованием nginx в качестве балансировщика нагрузки. Я мог бы настроить его для работы в качестве балансировщика нагрузки, но я не знаю, как заставить его кешировать содержимое c с прокси-серверов в бэкэнде, например html, css, js, и c ... Это означает, что я хочу, чтобы nginx был погодным для кеширования или нет, в зависимости от содержимого ответа от бэкэнд-серверов, если он изменился на обход кеша и отправку запросов на бэкэнд, а если не для обслуживания из кеша. Я много пробовал и искал в inte rnet, чтобы сделать это с помощью многих директив, таких как proxy_cache_bypass и proxy_no_cache, но не смог. Есть ли средства для этого, если у кого есть опыт работы с такими топами c. это конфигурации:

upstream backend {
    server www.webserver1.com:443 max_fails=3 fail_timeout=15s;
    server www.webserver2.com:443 max_fails=3 fail_timeout=15s;
}

server {
    listen      443 ssl;

    rewrite_log on;
    error_log   /var/log/nginx/lb.error.log;
    proxy_set_header Host      $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_set_header X-Proxy-Cache $upstream_cache_status;
    ssl_certificate         /etc/nginx/client.crt;
    ssl_certificate_key     /etc/nginx/client.key;
    ssl on;

    location / {
        proxy_cache backcache;
        #proxy_cache_methods GET HEAD POST;
        #proxy_cache_bypass $cookie_nocache $arg_nocache;
        #proxy_no_cache $cookie_nocache $arg_nocache;
        proxy_cache_min_uses 1;
        #proxy_cache_revalidate on;
        #proxy_cache_valid 200 4m;
        proxy_cache_lock on;
        proxy_cache_background_update on;
        add_header X-Proxy-Cache $upstream_cache_status;
        proxy_pass https://backend;
    }

}

server {
    listen 80 ;
    if ($http_x_forwarded_proto != 'https') {
        rewrite ^(.*) https://$host$1 redirect;
    }
}

это содержимое config. файл в /etc/nginx/conf.d/, который включен в основную конфигурацию. файл /etc/nginx/nginx.conf, а также эти 2 строки находятся в основной конфигурации. файл:

    proxy_cache_path /var/lib/nginx/cache keys_zone=backcache:20m max_size=100m;
    proxy_cache_key "$scheme$request_method$host$request_uri$is_args$args$cookie_user";

1 Ответ

0 голосов
/ 31 мая 2020

Ваши внутренние серверы могли быть root причиной этой проблемы, если эти серверы были неправильно настроены. Например, отправка заголовков Cache-Control по запросам к файлам stati c.

Согласно этому docs по умолчанию, NGINX учитывает заголовки Cache-Control с исходных серверов. Он не кэширует ответы с Cache-Control, установленным на Private, No-Cache или No-Store, или с Set-Cook ie в заголовке ответа.

Вы можете навсегда изменить это поведение, добавив эти директивы :

proxy_ignore_headers Cache-Control;
proxy_cache_valid any 30m; 

Итак, конфигурация будет выглядеть так:

    location / {
        proxy_cache backcache;
        proxy_cache_revalidate on;
        proxy_cache_min_uses 3;
        proxy_cache_valid 200 302 10m;;
        proxy_cache_lock on;
        proxy_cache_background_update on;
        proxy_ignore_headers Cache-Control;
        proxy_cache_valid any 30m;
        add_header X-Proxy-Cache $upstream_cache_status;
        proxy_pass https://backend;
    }

Надеюсь, это поможет вам разобраться.

...