我知道,如果有后端,nginx 可以充当反向代理来缓存文件。
问题是,我已经使用 nginx 作为 Web 服务器,提供文件(静态和 php),我想知道 nginx 是否可以使用自己的文件充当 proxy_cache ?我知道如果我将 nginx 本身作为上游,它将无法工作。
经典的做法是:nginx => apache backend => cached_result
我想要的是:nginx => 相同的 nginx 实例 => cached_result
有可能吗?如果可以,怎么做?
答案1
假设需要缓存本地文件,我只需将以下配置添加到 nginx 框中,它似乎可以正常工作:
proxy_cache_path /data/nginx/cache keys_zone=one:128m;
server {
listen 127.0.0.1:80;
server_name _;
root /usr/share/nginx/local;
location / {
autoindex on;
allow all;
satisfy any;
try_files $uri $uri/ =404;
}
}
server {
listen ipv4.addr:443 ssl http2;
listen [ipv6addr]:443 ssl http2;
server_name _;
root /usr/share/nginx/html;
include /etc/nginx/ssl.conf;
location /local/ {
allow all;
satisfy any;
proxy_cache one;
proxy_cache_key "$host$request_uri";
proxy_cache_min_uses 1;
proxy_cache_methods GET HEAD;
proxy_pass http://127.0.0.1:80/;
}
}
答案2
您确定需要对本地文件进行缓存吗?缓存的原因是:
Web 缓存位于客户端和“原始服务器”之间,保存其看到的所有内容的副本。如果客户端请求缓存中存储的内容,它会直接返回内容,而无需联系原始服务器。这提高了性能,因为 Web 缓存更接近客户端,并且更有效地利用了应用服务器,因为它们不必每次都从头开始生成页面。
也许您可以在同一个链接上使用proxy_cache
指令示例,但我没有测试过