5
回答
Nginx静态资源缓存的问题
开发十年,就只剩下这套Java开发体系了   

目前我在服务器上面有一个tomcat的集群,想在外层在架一个nginx来做反向代理和静态资源缓存的。

由于我刚刚接触,不懂概念

我想问下咋nginx做静态资源缓存的时候,也就是把一些项目用到的图片视频等不常修改的静态文件存储到nginx服务器上面,那么问题是这些文件是什么时候被放到nginx服务器上面的?

举报
王建观
发帖于3年前 5回/3K+阅
共有5个答案 最后回答: 3年前

一般在配置nginx代理缓存时都会设置以下一条配置:

proxy_cache_key $host$uri$is_args$args

所以当用户第一次请求某个url后,nginx会把url当成key生成一个hash,再根据目录hash算法,到你设置的proxy_temp_path找,有则返回无则请求后端服务返回并在本地保存一份记录供下次使用

你只要自己尝试一次然后注意观察基本就都明白了,还有不建议缓存视频类型的资源!

至于哪些类型的缓存,缓存多久,缓存大小限制等, 直接搜索相关资料一目了然

第一次取这些文件的时候就会缓存到nginx服务器上, 第二次的时候就不会从tomcat服务器那边取了, 当然, nginx上可以设置过期时间等参数, 当过期后又会从tomcat上取一次, 类似这样的循环
如果nginx和tomcat在一台服务器上,可以配置反向代理,同时设置静态资源不走反向代理,直接由nginx响应即可

我最近也在搭nginx,还在测试当中。

#请求url以.html、js、css、png、gif结尾和此location匹配成功

location ~ \.( html|js|css|png|gif|jpg|jpeg|bmp|swf)$ {   

#如果后端的服务器返回502、504、执行超时等错误,自动将请求转发到 upstream负载均衡池中的另一台服务器,实现故障转移。

       proxy_next_upstream http_502 http_504 error timeout invalid_header;

       proxy_cache cache_one;

       #对不同的HTTP状态码设置不同的缓存时间

       proxy_cache_valid 200 10m;

       proxy_cache_valid 304 1m;

       proxy_cache_valid 301 302 1h;

       proxy_cache_valid any 1m;

      #以域名、URI、参数组合成Web缓存的Key值,Nginx根据Key值哈希

      proxy_cache_key $host$uri$is_args$args;

      proxy_set_header Host  $host;

      proxy_set_header X-Forwarded-For  $remote_addr;

      #如果没有缓存则通过proxy_pass转向tomcat请求

      proxy_pass http://tomcat_server_pool;

顶部