我在nginx代理后面有一个REST API。代理工作正常,但是我无法缓存任何响应。任何帮助将非常感激:
Nginx配置:
worker_processes 10;
error_log logs/error.log;
error_log logs/error.log notice;
error_log logs/error.log info;
pid logs/nginx.pid;
events {
worker_connections 1024;
}
http {
proxy_cache_path /path/to/cache/dir keys_zone=one:60m;
proxy_cache_methods GET HEAD POST;
upstream backend {
server server1 backup;
server server2 weight=5;
}
access_log logs/access.log;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
#gzip on;
server {
listen 7076;
server_name localhost;
#charset koi8-r;
access_log logs/host.access.log;
location / {
add_header 'Access-Control-Allow-Origin' *;
add_header 'Access-Control-Allow-Credentials' 'true';
add_header 'Access-Control-Allow-Headers' 'Content-Type,Accept';
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
proxy_cache one;
proxy_cache_key $host$uri$is_args$args;
add_header X-Proxy-Cache $upstream_cache_status;
proxy_ignore_headers X-Accel-Expires Expires Cache-Control Set-Cookie;
proxy_ignore_headers Set-Cookie;
proxy_ignore_headers Cache-Control;
proxy_hide_header Cache-Control;
proxy_hide_header Set-Cookie;
proxy_pass http://backend;
}
}
}
无论我尝试了什么,代理缓存始终会以MISS的形式返回:
请求标头为:
Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Encoding:gzip,deflate,sdch
Accept-Language:en-US,en;q=0.8
Cache-Control:max-age=0
Connection:keep-alive
Host:nginxserver:portnumber
User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.124 Safari/537.36
响应标题为:
Access-Control-Allow-Credentials:true
Access-Control-Allow-Headers:Content-Type,Accept
Access-Control-Allow-Methods:GET, POST, OPTIONS
Access-Control-Allow-Origin:*
Connection:keep-alive
Content-Type:text/plain;charset=UTF-8
Date:Wed, 15 Oct 2014 16:30:18 GMT
Server:nginx/1.7.4
Transfer-Encoding:chunked
X-Proxy-Cache:MISS
我怀疑这与客户端标头有关,但是即使我通过curl发出呼叫并检查标头,也没有响应。
提前致谢
有没有办法让我忽略客户端标头中的内容?这并不能解释为什么它也不能通过卷曲工作
—
。...– user2630270
@ user2630270初始请求URL和方法是什么?中间反应是什么?
—
Xavier Lucas
@XavierLucas上面标题的方法是GET,因为我现在正在解决Chrome问题。该请求类似于nginxserver:port / solr / asd / select?q = *:*。我不知道如何捕捉中间反应。在哪里可以找到相关说明?
—
user2630270
如果我不经过nginx而直接打应用程序,使用完全相同的查询,我将得到以下响应标头:Content-Type:text / plain; charset = UTF-8 Transfer-Encoding:分块
—
user2630270 2014年
Cache-Control:max-age=0
...表示“不要缓存此请求”。