Совместное использование кеша 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