我正在尝试在两个服务器配置中使用一个 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;
}
}
Run Code Online (Sandbox Code Playgroud)
小智 5
假设两个地址:server1
和server2
都指向同一个应用程序
带配置:
proxy_cache_key $uri;
对于两个地址:server1
和server2
将创建一个缓存文件
在第一项,无论地址如何,都会创建一个缓存文件,这个文件将用作两个地址的缓存
我的实验室配置:
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;
}
}
Run Code Online (Sandbox Code Playgroud)
例如
第一个请求 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
Run Code Online (Sandbox Code Playgroud)
空缓存确认标题 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>
Run Code Online (Sandbox Code Playgroud)
对 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
Run Code Online (Sandbox Code Playgroud)
以上来自 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
Run Code Online (Sandbox Code Playgroud)
第一个请求到server2.com,响应来自访问地址server1.com时创建的缓存