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

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

  • Linux, работающий nginx
  • Победа рабочий IIS с приложением ASP
  • Linux рабочий Apache с PHP.

Я пытаюсь установить статические кэши файлов. Серверы 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; 

В этом случае кэш местоположений нечто работает хорошо, и папка кэша не пуста. Конечно, местоположение 'панели' не служит никаким статическим файлам.

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; во вложенном контексте местоположения.

0
задан 2 September 2015 в 09:51
1 ответ

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

^. + / Foo /.+. (Jpg | jpeg | gif | css | png | js | ico | gz) не может соответствовать URL типа /foo/test.jpg , но только URL типа /t/foo/test.jpg .

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

0
ответ дан 5 December 2019 в 12:21

Теги

Похожие вопросы