D. *_*ans 6 nginx cache reverse-proxy
我在应用程序服务器前使用 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 并跳过正常的缓存逻辑,但最好能确认这一点。
小智 -1
我建议你重写你的服务器和位置块:
server {
location / {
proxy_cache testzone;
proxy_pass http://localhost:8000;
}
location ~* \.(ico|js|jpg|png|gif|jpeg|mp3|wav|swf|mov|doc|pdf|flv|css)$ {
expires max;
proxy_cache testzone;
proxy_pass http://localhost:8000;
}
}
Run Code Online (Sandbox Code Playgroud)
还要查看 proxy_temp_path http://wiki.nginx.org/HttpProxyModule#proxy_temp_path。尽管默认情况下已启用(我认为),但我喜欢查看此文件夹以查看是否存储了对静态内容的请求。
归档时间: |
|
查看次数: |
3571 次 |
最近记录: |