1.1   需求

1、对静态文件进行缓存:html,js,css,png,gif,jpg,jpeg,bmp,swf。

2、对符合url规则的请求进行缓存。

3、针对某个url进行清除缓存。

1.1   安装ngx_cache_purge

ngx_cache_purge是第三方开发的一个nginx模块,不包含在 Nginx 的源码发布版,它的作用是清理nginx缓存,对FastCGI、proxy、SCGI 和uWSGI缓存进行清除

第一步:把模块上传到服务器

第二步:重新编译nginx
第三步:解压ngx_cache_purge-2.3.tar.gz

第四步:重新编译nginx

1、进入nginx目录

2、重新设置编译参数

./configure \

--prefix=/usr/local/nginx \

--pid-path=/var/run/nginx/nginx.pid \

--lock-path=/var/lock/nginx.lock \

--error-log-path=/var/log/nginx/error.log
\

--http-log-path=/var/log/nginx/access.log
\

--with-http_gzip_static_module \

--http-client-body-temp-path=/var/temp/nginx/client
\

--http-proxy-temp-path=/var/temp/nginx/proxy
\

--http-fastcgi-temp-path=/var/temp/nginx/fastcgi
\

--http-uwsgi-temp-path=/var/temp/nginx/uwsgi
\

--http-scgi-temp-path=/var/temp/nginx/scgi
\

--add-module=/usr/local/java/ngx_cache_purge-2.3

第五步:make

第六步:make
install

1.1   配置nginx缓存

http {

include       mime.types;

default_type  application/octet-stream;

#log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '

#                  '$status $body_bytes_sent "$http_referer" '

#                  '"$http_user_agent" "$http_x_forwarded_for"';

#access_log  logs/access.log  main;

sendfile        on;

#tcp_nopush     on;

#keepalive_timeout  0;

keepalive_timeout  65;

#gzip  on;

upstream tomcat_server_pool{

server 192.168.25.148:8080 weight=10;

server 192.168.25.148:8081 weight=10;   #配置负载均衡的参数权重

}

#proxy_temp_path代理临时目录

proxy_temp_path /var/temp/nginx/proxy;

#proxy_cache_path代理缓存目录,和proxy_temp_path必须在同一个分区

#/var/temp/nginx/proxy_cache_dir缓存目录

#levels指定该缓存空间有两层hash目录,第一层目录名是1个字母或数字长度,第二层目录名为2个字母或数字长度

#keys_zone=cache_one:50m缓存区名称为cache_one,在内存中的空间是50M,inactive=1d表示1天清空一次缓存 ,max_size指定磁盘空间大小为500M

proxy_cache_path /var/temp/nginx/proxy_cache_dir levels=1:2 keys_zone=cache_one:50m inactive=1d max_size=500m;

server {

listen 80;

server_name cache.test.com;

#清空缓存配置,注意必须放在最上边,当在请求的url前加/purge/时将此url的缓存清空

location ~ /purge(/.*)

{

#安全设置,指定请求客户端的IP或IP段才可以清除URL缓存,这里为了方便测试设置为all

#allow          127.0.0.1;

allow           all;

#指定清空缓存的区域名称cache_one(要和上边proxy_cache_path缓存配置中指定的缓存区域名称一致)

#指定缓存的key规则$host$1$is_args$args,要和下边设置缓存的key一致$host$uri$is_args$args

#注意$host$1$is_args$args中的$1表示当前请求的uri,$host$1$is_args$args=$host$uri$is_args$args

proxy_cache_purge cache_one $host$1$is_args$args;

}

#请求url以/item/开头的进行缓存,使用此location

location ~ /item(/.*){

#指定缓存区域名称

proxy_cache cache_one;

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

proxy_cache_key $host$uri$is_args$args;

#请求头中添加请求的主机名

proxy_set_header Host  $host;

#请求头中添加真实的客户端ip,通过X-Forwarded-For可获取

proxy_set_header X-Forwarded-For  $remote_addr;

#代理访问后端tomcat

#请求item从缓存中找,如果缓存中没有则向tomcat请求

#$1表示取出正则表达式(/.*)所匹配的内容,使用$1的效果例如请求http://ccc.test.com/item/100010.html则请求tomcat服务器 http://ip:port/100010.html

#如果不使用$1则会将/item/...加在tomcat服务地址之后访问,即http://ip:port/item/100010.html

proxy_pass http://tomcat_server_pool$1;

}

#请求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;

}

#所有的location规则都不满足走/,使用proxy_pass将请求转发给tomcat

location /{

proxy_pass http://tomcat_server_pool;

index index.jsp index.html index.htm;

}

}

}

Nginx实现静态资源的缓存的更多相关文章

  1. nginx静态资源设置缓存的方法

    nginx静态资源设置缓存的方法 直接加expires 30d; 就是就可以了 缓存时间30天完整如下 <pre> location / { root /home/www/wordpres ...

  2. Nginx作为静态资源web服务之缓存原理

    Nginx作为静态资源web服务之缓存原理 大致理一下http浏览器缓存原理: 浏览器第一次请求服务器,此时浏览器肯定没有缓存,则直接调用服务器端,服务器在返回的信息的信息头中添加 ETag和Last ...

  3. Nginx针对前端静态资源的缓存处理

    当用户上报一个线上的bug后,开发者修改前端代码的bug上新后,用户反映问题依旧存在的问题...这种情况是不是曾经遇到过,这个问题跟浏览器的缓存机制有很大关系(强制缓存和协商缓存,这里我就不介绍具体的 ...

  4. nginx处理静态资源的配置

    修改nginx.conf文件,用于nginx处理静态资源. 主要配置如下(在server配置中加入location配置即可): server { listen 80; server_name 123. ...

  5. linux使用Nginx搭建静态资源服务器

    最近公司需要做一个宣传片播放  视频有点大 好几百M 就想到使用Nginx来代理静态资源,在过程中出现了一些问题,比如端口没开.访问是403等,没有成功,后面慢慢查找问题,才发现大部分博客资料的都不全 ...

  6. nginx 配置静态资源路径(url不同于static path)

    目的         用nginx做静态资源代理可以减少请求对后台服务器的压力,使响应更加迅速. 配置        情景一           url : 127.0.0.1:8000/images ...

  7. Nginx之静态资源WEB服务

    本篇主要记录学习Nginx的静态资源WEB服务的几种常见的功能记录学习 Nginx开发常用的命令 nginx -tc /etc/nginx/nginx.conf vim /etc/nginx/conf ...

  8. nginx发布静态资源

    nginx发布静态资源 参考 ngx_http_index_module index指令 ngx_http_core_module http指令 location指令 listen指令 root指令 ...

  9. nginx/apache静态资源跨域访问问题详解

    1. apache静态资源跨域访问 找到apache配置文件httpd.conf 找到这行 #LoadModule headers_module modules/mod_headers.so把#注释符 ...

随机推荐

  1. 浅谈Android应用性能之内存

    本文来自http://blog.csdn.net/liuxian13183/ ,引用必须注明出处! 文/ jaunty [博主导读]在Android开发中,不免会遇到许多OOM现象,一方面可能是由于开 ...

  2. 【转】编写更好的CSS代码

    原文转自:http://blog.jobbole.com/55067/ 编写好的CSS代码,有助提升页面的渲染速度.本质上,引擎需要解析的CSS规则越少,性能越好.MDN上将CSS选择符归类成四个主要 ...

  3. The name 'Scripts' does not exist in the current context error in MVC

    创建完成ASP.NET MVC4应用程序以后,试着运行其中一个Create页面, 程序报出运行是错误: CS0103: The name 'Scripts' does not exist in  th ...

  4. magento中比较好的博客

    magento web-开发   http://www.magentofront-end.com/magentomuban/category/web-frontend 水水博客专栏   http:// ...

  5. tcpdump抓包规则命令大全

    下面的例子全是以抓取eth0接口为例,如果不加”-i eth0”是表示抓取所有的接口包括lo. 1.抓取包含10.10.10.122的数据包 # tcpdump -i eth0 -vnn host 1 ...

  6. USB协议-检测设备连接与速度

    在USB设备连接时,USB系统能自动检测到这个连接,并识别出其采用的数据传输速率.USB采用在D+或D-线上增加上拉电阻的方法来识别低速和全速设备. USB支持3种类型的传输速率:1.5Mb/s的低速 ...

  7. ResponsiveSlides.js最轻量级的幻灯片插件

    摘要:ResponsiveSlides.js是一个展示同一容器内图片的轻量级响应式jQuery幻灯片插件它支持包括IE6在内的几乎所有的浏览器,在IE6中还支持最大宽度属性,但在其它浏览器中并不原生支 ...

  8. 70. Climbing Stairs

    You are climbing a stair case. It takes n steps to reach to the top. Each time you can either climb ...

  9. ZOJ 1005 Jugs

    原题链接 题目大意:有一大一小两个杯子,相互倒水,直到其中一个杯子里剩下特定体积的水.描述这个过程. 解法:因为两个杯子的容积互质,所以只要用小杯子不断往大杯子倒水,大杯子灌满后就清空,大杯子里迟早会 ...

  10. DataTransfer(setData()方法)

    DataTransfer对象专门用来存储拖放时要携带的数据,它可以被设置为拖放事件对象的DataTransfer属性.---把拖动的数据存入其中setData有两个参数:1.第一个参数为携带数据的数据 ...