我正在使用 nginx 缓存来自上游 apache 服务器的请求,但我希望里面的几个块始终从 apache 获取。我希望 ssi 可以做到这一点,但 SSI 标签未经预处理就输出给用户。
location ~* ^.+\.html$ {
proxy_pass http://localhost:9999;
proxy_cache_key "$prime$scheme$host$request_uri";
ssi on;
ssi_silent_errors off;
log_subrequest on;
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_set_header X-Country $country_code;
proxy_cache my-cache;
proxy_cache_bypass $http_x_refresh_cache;
proxy_cache_valid 200 302 30d;
proxy_cache_valid 404 10m;
proxy_cache_valid any 1m;
}
这是相关的 nginx 配置。
答案1
proxy_cache_key "$prime$scheme$host$request_uri";
此行将页面的所有部分缓存在同一个键(用户输入的 URI)下,因此页面的不同部分会相互覆盖,然后只返回最后写入的部分。您需要使用$uri
而不是$request_uri
,以便每个页面的每个部分都缓存在自己的个人名称下。
答案2
确保http://本地主机:9999不压缩输出。只需添加
proxy_set_header Accept-Encoding "";