Совместное использование кеша nginx между двумя конфигурациями серверов

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

Это безопасно и поддерживается ли это Nginx?

Конфиг рабочий. Но я не уверен в последовательности

В документации ничего не написано

proxy_cache_path /home/mycache levels=1:2 keys_zone=mycache:90m max_size=200G inactive=15d;

server {
   server_name server1;
   ...
   location / {
          proxy_temp_path /home/temp;
          proxy_cache mycache;
          proxy_cache_key $uri; # only URI
          expires 50d;
          proxy_pass        http://blabla;
   }
}

server {
   server_name server2;
   ...
   location / {
          proxy_temp_path /home/temp;
          proxy_cache mycache;
          proxy_cache_key $uri; # only URI
          expires 50d;
          proxy_pass        http://blabla;
   }
}

1 ответ

Решение

Предполагая , что оба адреса: server1 и server2 указывают на одно и то же приложение

с конфигурацией:

proxy_cache_key $uri;

для обоих адресов: server1 и server2

один файл cahe будет создан

при первой записи, независимо от адреса, будет создан один файл кеша, этот файл будет использоваться как кеш для обоих адресов

моя лабораторная конфигурация:

proxy_cache_path /tmp levels=1:2 keys_zone=my_cache:10m max_size=10g inactive=60m use_temp_path=off;

server {
   listen       80;
   server_name server1.com;
   add_header X-Proxy-Cache $upstream_cache_status;
   location / {
          proxy_cache my_cache;
          proxy_cache_key $uri; # only URI
          proxy_cache_valid 200 10m;
          proxy_pass http://192.168.0.101:8080;
   }
}

server {
   listen       80;
   server_name server2.com;
   add_header X-Proxy-Cache $upstream_cache_status;
   location / {
          proxy_cache my_cache;
          proxy_cache_key $uri; # only URI
          proxy_cache_valid 200 10m;
          proxy_pass http://192.168.0.101:8080;
   }
}

например

первый запрос к server1.com [пустой кеш]

curl -X GET -I server1.com
HTTP/1.1 200 OK
Server: nginx/1.17.6
Date: Sun, 29 Dec 2019 15:32:51 GMT
Content-Type: text/html
Content-Length: 45
Connection: keep-alive
Last-Modified: Mon, 11 Jun 2007 18:53:14 GMT
ETag: "2d-432a5e4a73a80"
X-Proxy-Cache: MISS
Accept-Ranges: bytes

пустой кеш подтверждает заголовок X-Proxy-Cache: MISS

MISS - ответ не был найден в кеше, поэтому был получен с исходного сервера. Тогда ответ мог быть кэширован.

кеш:

cat tmp/9/7d/6666cd76f96956469e7be39d750cc7d9
{^▒mF#^▒▒▒yXL"2d-432a5e4a73a80"
KEY: /
HTTP/1.1 200 OK
Date: Sun, 29 Dec 2019 15:32:51 GMT
Server: Apache/2.4.41 (Unix)
Last-Modified: Mon, 11 Jun 2007 18:53:14 GMT
ETag: "2d-432a5e4a73a80"
Accept-Ranges: bytes
Content-Length: 45
Connection: close
Content-Type: text/html

<html><body><h1>It works!</h1></body></html>

второй запрос на server1.com

curl -X GET -I server1.com
HTTP/1.1 200 OK
Server: nginx/1.17.6
Date: Sun, 29 Dec 2019 15:32:56 GMT
Content-Type: text/html
Content-Length: 45
Connection: keep-alive
Last-Modified: Mon, 11 Jun 2007 18:53:14 GMT
ETag: "2d-432a5e4a73a80"
X-Proxy-Cache: HIT
Accept-Ranges: bytes

и abve из кеша nginx: X-Proxy-Cache: HIT

HIT - ответ содержит действительный свежий контент прямо из кеша.

теперь первый запрос на server2.com:)

curl -X GET -I server2.com
HTTP/1.1 200 OK
Server: nginx/1.17.6
Date: Sun, 29 Dec 2019 15:33:01 GMT
Content-Type: text/html
Content-Length: 45
Connection: keep-alive
Last-Modified: Mon, 11 Jun 2007 18:53:14 GMT
ETag: "2d-432a5e4a73a80"
X-Proxy-Cache: HIT
Accept-Ranges: bytes

первый запрос на server2.com, и ответ из кеша, который был создан при посещении адреса server1.com

Другие вопросы по тегам