当使用http代理和ngx_http_sub_module时,Nginx无法返回304

时间:2016-03-21 01:51:03

标签: caching nginx proxy

我想用Nginx反向代理网站www.gstatic.com。

  • 使用网站gstatic.178.re反向代理www.gstatic.com
  • 替换包含" www.gstaic.com"在资源中,进一步的请求仍然可以由" gstatic.178.re"。
  • 处理。

基本上它可以工作,但如果我再次访问同一个链接,它将不会返回304。我在Nginx启用了缓存,并尝试设置etag和expires属性。 这是我的Nginx配置,

upstream gstatic { 
server www.gstatic.com; 
} 

proxy_buffering on; 
etag on; 
proxy_temp_file_write_size 1024k; 
proxy_temp_path /var/cache/nginx/temp; 
proxy_cache_path /var/cache/nginx/cache levels=1:2 keys_zone=cache_one:100m inactive=19d max_size=5g; 

server { 
listen 80; 

server_name gstatic.178.re; 

resolver 8.8.8.8; 

location / { 
sub_filter "www.gstatic.com" "gstatic.178.re"; 
sub_filter "https" "http"; 
sub_filter_once off; 
sub_filter_types *; 
proxy_pass_header Server; 
proxy_set_header Host www.gstatic.com; 
proxy_set_header Accept-Encoding ''; 
proxy_redirect off; 
proxy_set_header X-Real-IP $remote_addr; 
proxy_set_header X-Scheme $scheme; 
proxy_pass http://gstatic; 
proxy_cache cache_one; 
proxy_cache_valid 200 304 365d; 
proxy_cache_key $host$uri$is_args$args; 
proxy_cache_min_uses 1; 
expires max; 
proxy_cache_revalidate on; 
add_header X-Proxy-Cache $upstream_cache_status; 
add_header Cache-Control "public"; 
if_modified_since before; 
} 


}

以下是一个用于测试的示例链接:http://gstatic.178.re/charts/loader.js

1 个答案:

答案 0 :(得分:0)

我在提供的资源的响应标头中发现了几个问题。 首先,您违反了RFC之一的规则,其中包含:

  

HTTP / 1.1服务器不应发送多个过期日期      未来一年。

因此,请尽量减少max-age和Expires值以满足该要求。

其次,您在响应标头中没有ETag。