我在应用程序服务器前使用 nginx 作为反向代理。应用程序响应一个 X-Accel-Redirect 标头,告诉 nginx 要提供哪个静态文件。我希望能够做的是让 nginx 缓存其中一些上游响应,以便它可以在不访问应用程序服务器的情况下提供正确的文件。
不幸的是,这不起作用:nginx 似乎拒绝缓存任何带有 X-Accel-Redirect 标头的响应。如果我不使用 X-Accel-Redirect 并让应用程序服务器返回文件本身,那么缓存工作完美。然而,这不是很有效,因为应用服务器必须从磁盘读取文件并将其发送到 nginx,然后 nginx 将文件写回磁盘(在其缓存中)并将其发送到客户端。
这是我的 nginx 配置的精简版:
proxy_cache_path /tmp/nginx-cache keys_zone=testzone:10m;
server {
location / {
proxy_cache testzone;
proxy_pass http://localhost:8000/;
}
location /static-files/ {
internal;
alias /var/static-files/;
}
}
Run Code Online (Sandbox Code Playgroud)
有谁知道我正在尝试做的事情是否可行?我的怀疑是,当 nginx 发现 X-Accel-Redirect 标头时,它会立即跳转到处理提供的 URI 并跳过正常的缓存逻辑,但最好能确认这一点。