Назад | Перейти на главную страницу

nginx разные бэкенды кеш статических файлов

У меня в тестовой среде 3 сервера:

Я пытаюсь настроить кеши статических файлов. Серверы 2 и 3 имеют совершенно разное содержимое.
Вот моя конфигурация кеша:

proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=static_cache:100m inactive=120m max_size=900M;
proxy_cache_min_uses 1;

и вот основной файл конфигурации nginx:

server {
   listen       80;
   server_name  _;

   proxy_read_timeout             600s;
   proxy_send_timeout             600s;   

   location /foo/ {
        proxy_set_header   X-Real-IP        $remote_addr;
        proxy_set_header   Host             $host;
        proxy_pass      "http://192.168.11.11:8888/foo/";
    proxy_set_header X-debug-message-foo request_method|$host|$request_uri|$proxy_add_x_forwarded_for";
   }


   location /bar/ {
    proxy_set_header   X-Real-IP        $remote_addr;
        proxy_set_header   Host             $host;
        proxy_pass      "http://192.168.11.10:8885/bar/";
    proxy_set_header X-debug-message-bar "$request_method|$host|$request_uri|$proxy_add_x_forwarded_for";

   }

    location ~* ^.+/foo/.+.(jpg|jpeg|gif|css|png|js|ico|gz) {
        expires 60d;

        proxy_pass http://192.168.11.11:8888;
        proxy_redirect     off;

        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_cache static_cache;
        proxy_cache_key "$request_method|$host|$request_uri";
        proxy_cache_valid 1d;
  }

  location ~* ^.+/bar/.+.(jpg|jpeg|gif|css|png|js|ico|gz) {
        expires 60d;

        proxy_pass http://192.168.11.10:8885;
        proxy_redirect     off;

        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_cache static_cache;
        proxy_cache_key "$request_method|$host|$request_uri";
        proxy_cache_valid 1d;
  }
}

Итак, я хочу создать кеш со статическими файлами для разных мест, и если кеш устарел, nginx должен загружать контент с внутреннего сервера (а не из корня локального сервера). К сожалению sudo ls -la /var/cache/nginx показывает мне, что каталог кеша всегда пуст.

Также я попробовал, как кеш работает только для одного внутреннего сайта, изменив местоположение следующим образом

location ~* ^.+.(jpg|jpeg|gif|css|png|js|ico|gz) 

и

proxy_pass http://192.168.11.11:8888; 

В этом случае кеш расположения foo работает нормально, и папка кеша не пуста. Конечно, в «полосе» нет статических файлов.

UDP

Наконец я разобрался. Единственное рабочее решение - использование вложенного контекста местоположения. Как в этом примере:

server {
   listen       80;
   server_name  _;

   proxy_read_timeout             600s;
   proxy_send_timeout             600s;   

   location /foo/ {
        proxy_set_header   X-Real-IP        $remote_addr;
        proxy_set_header   Host             $host;
        proxy_pass      "http://192.168.11.11:8888/foo/";

        location ~* ^.+.(jpg|jpeg|gif|css|png|js|ico|gz) {
            expires 60d;

            proxy_pass http://192.168.11.11:8888;
            proxy_redirect     off;

            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_cache static_cache;
            proxy_cache_key "$request_method|$host|$request_uri";
            proxy_cache_valid 1d;
      }
   }


   location /bar/ {
        proxy_set_header   X-Real-IP        $remote_addr;
        proxy_set_header   Host             $host;
        proxy_pass      "http://192.168.11.10:8885/bar/";

        location ~* ^.+.(jpg|jpeg|gif|css|png|js|ico|gz) {
            expires 60d;

            proxy_pass http://192.168.11.10:8885;
            proxy_redirect     off;

            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_cache static_cache;
            proxy_cache_key "$request_method|$host|$request_uri";
            proxy_cache_valid 1d;
      }

   }
}

Имейте в виду, если ваш внутренний сервер не находится в подкаталоге (например, непосредственно в каталоге public_html, а не в этом public_html / foo), вам необходимо удалить двойной подкаталог с помощью rewrite /foo(.*) /$1 break; внутри вложенного контекста местоположения.

Ваше регулярное выражение кажется неправильным.

^.+/foo/.+.(jpg|jpeg|gif|css|png|js|ico|gz) не может соответствовать URL как /foo/test.jpg но только URL-адреса вроде /t/foo/test.jpg.

+ означает один или несколько раз.