Nginx实现静态资源的缓存

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;

}

}

}

时间: 2024-11-10 01:06:56

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

利用Proxy Cache使Nginx对静态资源进行缓存

前言 Nginx是高性能的HTTP服务器,通过Proxy Cache可以使其对静态资源进行缓存.其原理就是把静态资源按照一定的规则存在本地硬盘,并且会在内存中缓存常用的资源,从而加快静态资源的响应. 配置Proxy Cache 以下为nginx配置片段: proxy_temp_path   /usr/local/nginx/proxy_temp_dir 1 2; #keys_zone=cache1:100m 表示这个zone名称为cache1,分配的内存大小为100MB #/usr/local/

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

最近公司需要做一个宣传片播放  视频有点大 好几百M 就想到使用Nginx来代理静态资源,在过程中出现了一些问题,比如端口没开.访问是403等,没有成功,后面慢慢查找问题,才发现大部分博客资料的都不全,所以在这里记录一下. 安装过程本文就不提了 网上都有很多 本文主要说明 nginx.conf 的配置 如下: 进入编辑nginx.conf 文件 输入密码 配置nginx.conf 上传文件到配置的路径 在网页地址栏输入对应的地址 如果出现 nginx静态资源文件无法访问,403 forbidde

nginx发布静态资源

nginx发布静态资源 参考 ngx_http_index_module index指令 ngx_http_core_module http指令 location指令 listen指令 root指令 server指令 server_name指令 步骤 创建静态资源 为 conf/nginx.conf http模块中新增server模块 静态资源结构 E:\mozq\00store\frxx ├─frxx │ bug.png │ weixin.png server模块配置 server{ list

HappyAA服务器部署笔记2(nginx的静态资源缓存配置)

我近期对服务器进行了少量改进,虽然之前使用了nginx反向代理之后性能有所提高,但仍然不够,需要使用缓存来大幅度提高静态资源的访问速度. 服务器上的静态资源主要有这些:png, jpg, svg, js, css等.下面,我通过新的nginx配置来实现缓存.对红色的字我会额外进行说明. worker_processes 1; events { worker_connections 1024; multi_accept on; use epoll; } http { include mime.ty

Nginx配置静态资源缓存时间及实现防盗链

环境源主机:192.168.10.158系统:centos 7.4域名:www.wuxier.cn盗链主机:192.168.10.191(使用Nginx+Tomcat实现负载均衡.动静分离的实验主机,点我进行复盘)系统:centos 7.4域名:www.ajie.com 和 www.taobao.com 创建软件包存放目录 [[email protected] ~]# mkdir /root/software [[email protected] ~]# cd /root/software/ [

百度UEditor图片上传、SpringMVC、Freemarker、Tomcat、Nginx、静态资源

个人官网.公司项目都需要 可视化编辑器,百度UEditor做得很不错,就用的这个.项目后台用到了SpringMVC.Freemarker,开发过程中部署在Jetty,线上部署用Tomcat,最后可能配置Nginx代理.     在实际使用过程中,遇到了太多的问题,因此有必要梳理和总结下. 1. 先说百度UEditor在Java环境中的使用:1.1   Html页面或者Freemarker模版里,引入百度UEditor的相关JS和CSS,如下 <script type="text/javas

使用nginx处理静态资源请求,其余交给node

由于项目后台使用的是node,然而node不适合对静态资源的处理,因为他的异步处理(事件轮询)机制,所以更擅长的是密集I/O型的应用,所以我就有了一个想法,使用nginx来做反向代理,当请求的是静态资源的时候,直接由nginx(监听80端口)自己处理并返回,其他非静态资源请求转发至node(8080端口),由node来处理.下面是我的nginx配置文档,nginx安装请自行百度,大把资料啦~ #user nobody; worker_processes 1; #error_log logs/er

nginx 代理静态资源报 403

用tomcat跑了一个上传服务,文件上传到指定nginx的html目录,用nginx来代理静态资源,结果上传能够成功,访问却报403. 解决办法,将html的拥有者改成nobody: chown -R nobody /usr/local/nginx/html 或者在nginx的配置文件nginx.conf中添加 use root; 之后刷新nginx的配置 /usr/local/nginx/bin/nginx -s reload 原文地址:https://www.cnblogs.com/flyi

静态资源请求缓存

静态资源请求是有缓存机制的 , 这是浏览器自带的特性 例如我请求服务器上的某文件 , 但是该文件在我请求后被操作过 , 我再次请求拿到的还是原来的文件 , 你抓包的时候会发现你第二次请求的没走 , 抓不到, 解决方法 就是在get请求后面携带一段不一样的字符串 , 这段字符串没有实际意义 , 你可以是一段哈希字符串 , 可以是时间戳 , 只要保证你请求的不重复就好 原文地址:https://www.cnblogs.com/sunjinggege/p/9962713.html