nginx js和jpg图片缓存设置

server {

listen       80;

server_name  localhost;

index index.htm index.html;

root  /to/path/;

include       mime.types;  #支持的格式,需要压缩什么类型就在这个里面去找。

default_type  application/octet-stream;

#####gzip压缩功能

gzip  on;

gzip_min_length 1k;

gzip_buffers 16 64k;

gzip_http_version 1.1;

gzip_comp_level 6;

gzip_types p_w_picpath/gif p_w_picpath/jpeg p_w_picpath/png text/plain application/x-javascript text/css application/xml;

gzip_vary on;

location ~ .*\.(js|css)?$

{

expires 5d;

}

####防盗链

location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$

{

expires 30d;

valid_referers none blocked www.xxxx *.xxxxxx;

if($invalid_referer) {

rewrite ^/ http://www.xx.com/403.html;

}}

HTTP_Referer是header的一部分,当浏览器向web服务器发送请求的时候,一般会带上Referer,告诉服务器我是从哪个页面链接过来的,服务器籍此可以获得一些信息用于处理。

nginx referer限制

语法:valid_referers [none|blocked|server_names]

使用字段:server, location

这个指令在referer头的基础上为 $invalid_referer 变量赋值,其值为0或1。

可以使用这个指令来实现防盗链功能,如果valid_referers列表中没有Referer头的值, $invalid_referer将被设置为1。

参数可以使如下形式:

none 意为不存在的Referer头(表示空的,也就是直接访问,比如直接在浏览器打开一个图片)

blocked 意为根据防火墙伪装Referer头,如:“Referer: XXXXXXX”。

server_names 为一个或多个服务器的列表,0.5.33版本以后可以在名称中使用“*”通配符。

举例:

location /chat/ {

valid_referers none blocked so.com *.so.com;

if ($invalid_referer) {

return 403;

}

}

Nginx中使用Expires增强浏览器缓存

expires [time|epoch|max|pff]默认值:offexpires指令控制HTTP应答中的“Expires”和“Cache-Control”Header头部信息,启动控制页面缓存的作用time:可以使用正数或负数。“Expires”头标的值将通过当前系统时间加上设定time值来设定。time值还控制"Cache-Control"的值:负数表示no-cache正数或零表示max-age=time epoch:指定“Expires”的值为 1January,1970,00:00:01 GMTmax:指定“Expires”的值为31December2037 23:59:59GMT,"Cache-Control"的值为10年。-1:指定“Expires”的值为当前服务器时间-1s,即永远过期。off:不修改“Expires”和"Cache-Control"的值

expires使用了特定的时间,并且要求服务器和客户端的是中严格同步。

而Cache-Control是用max-age指令指定组件被缓存多久。

对于不支持http1.1的浏览器,还是需要expires来控制。所以最好能指定两个响应头。但HTTP规范规定max-age指令将重写expires头。

如果不想让代理或浏览器缓存,加no-cache参数或private参数:

# expires 1d;

add_header Cache-Control no-cache;

add_header Cache-Control private;

这样浏览器F5刷新时,返回的依然是200,而不是304.

记录一个nginx控制缓存的例子:

expires 1d;

add_header Cache-Control no-cache;

add_header Cache-Control private;

if ( !-e $request_filename) {

rewrite ^(.*) http://test.zhaopin.com/index.html break;

#   add_header Cache-Control no-cache;

#   add_header Cache-Control private;

当我将add_header写在rewrite之后时,发现add_header竟然不起作用了。。是因为写进了if里面..

apache的mod_expires模块使得在使用expires头时能像max-age那样以相对的方式设置日期,通过ExpiresDefault指令完成。例如:图片等过期时间为请求开始的10年之后

<FileMatch"\.(gif|jpg|js|css)$">

ExpiresDefault "access plus 10years"

</FileMatch>

它像响应中发送Expires头和Cache-Control max-age头。

expires|etag控制页面缓存区别expires:像上面文章提到的:expires指令控制HTTP应答中的“Expires”和“Cache-Control”Header头部信息,启动控制页面缓存的作用time:可以使用正数或负数。“Expires”头标的值将通过当前系统时间加上设定time值来设定。time值还控制"Cache-Control"的值:负数表示no-cache正数或零表示max-age=time epoch:指定“Expires”的值为 1January,1970,00:00:01 GMTmax:指定“Expires”的值为31December203723:59:59GMT,"Cache-Control"的值为10年。-1:指定“Expires”的值为当前服务器时间-1s,即永远过期。off:不修改“Expires”和"Cache-Control"的值

expires使用了特定的时间,并且要求服务器和客户端的是中严格同步。

而Cache-Control是用max-age指令指定组件被缓存多久。

对于不支持http1.1的浏览器,还是需要expires来控制。所以最好能指定两个响应头。但HTTP规范规定max-age指令将重写expires头。一般用于页面变化不是很快的时候,如果缓存过期了,浏览器在重用它之前会首先确认他是否有效,就是一个“条件GET请求”,如果有效,返回304状态码。expires通过Last-Modified响应头来确定。

能够使浏览器缓存的HTTP头部信息主要有以下三种:

1、last-modified实现浏览器缓存

last-modified是根据文件更新时间来确定是否再次发送加载。通过返回last-modified头部信息:

GET/wp-content/plugins/crayon-syntax-highlighter/js/min/crayon.min.js HTTP/1.1

Host:www.3mc2.com

User-Agent:Mozilla/5.0(Windows NT6.1;WOW64;rv:26.0)Gecko/20100101Firefox/26.0

Accept:*/*

Accept-Language:zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3

Accept-Encoding:gzip,deflate

Referer:http://www.3mc2.com/category/architecture

Cookie:wp-settings-1=hidetb%3D0%26libraryContent%3Dbrowse%26align%3Dcenter%26urlbutton%3Dnone%26editor%3Dtinymce%26wplink%3D0%26ed_size%3D508%26mfold%3Do;wp-settings-time-1=1389840828

Connection:keep-alive

HTTP/1.1200OK

Server:nginx

Date:Thu,16Jan201415:47:24GMT

Content-Type:application/x-javascript

Last-Modified:Thu,16Jan201402:29:13GMT

Transfer-Encoding:chunked

Connection:keep-alive

Content-Encoding:gzip

再次请求则带有If-Modified-Since头部信息,并返回404:

GET/wp-includes/js/jquery/jquery.js?ver=1.10.2HTTP/1.1

Host:www.3mc2.com

User-Agent:Mozilla/5.0(Windows NT6.1;WOW64;rv:26.0)Gecko/20100101Firefox/26.0

Accept:*/*

Accept-Language:zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3

Accept-Encoding:gzip,deflate

Referer:http://www.3mc2.com/category/architecture/nginx

Connection:keep-alive

If-Modified-Since:Thu,16Jan201402:29:13GMT

HTTP/1.1304Not Modified

Server:nginx

Date:Thu,16Jan201415:53:34GMT

Last-Modified:Thu,16Jan201402:29:13GMT

Connection:keep-alive

我的测试环境为firefox,网址中带有”?ver=”参数的文件会再次发送请求(返回304),其他文件均未再次请求。

2、Etag确定浏览器缓存:

Etag的原理是将文件资源编号一个etag值,Response给访问者,访问者再次请求时,带着这个Etag值,与服务端所请求的文件的Etag对比,如果不同了就重新发送加载,如果相同,则返回304.

3、Expires浏览器缓存:

Expires是给一个资源设定一个过期时间,也就是说无需去服务端验证,直接通过浏览器自身确认是否过期即可,所以不会产生额外的流量。此种方法非常适合不经常变动的资源。如果文件变动较频繁,不要使用Expires来缓存。

对于本博客来说,css样式和JS脚本基本已经定型,所以最适合的方法是Expires来缓存一些内容到访问者浏览器。通过配置Nginx配置文件实现相关功能:

server{

.....

root/www.3mc2.com;

index  index.html index.htm index.php;

location~.*\.(gif|jpg|jpeg|bmp|png|ico|txt|mp3|mp4|swf){

expires15d;

}

location~.*\.(css|js){

expires12h;

}

......

}

转载于:https://blog.51cto.com/tlinux/1727390

nginx 压缩和缓存设置相关推荐

  1. Nginx的代理缓存设置

    Nginx的代理缓存设置 语雀Q群 763215167 expires: 设置浏览器的缓存时间 (客户端缓存) location /files {alias /home/imooc;# expires ...

  2. Nginx请求强制缓存设置

    效果: 通过nginx更改配置项的方式强制缓存 更改所有data服务相关的请求,包括mergedata等 具体命令  add_header 'Cache-Control' 'max-age=3600' ...

  3. Nginx 静态资源缓存配置

    示例 # Media: images, icons, video, audio, HTC location ~* \.(?:jpg|jpeg|gif|png|ico|cur|gz|svg|svgz|m ...

  4. Linux系统下的Nginx的缓存设置、压缩配置和自动列目录配置

    (本文内所有的centos系统命令均使用斜体加粗表示,以便各位阅读) 注意!本人使用的是Lnmp脚本模式安装的Nginx 1.8.0稳定版,如果是从官网下载的版本,nginx.conf的配置文件有些不 ...

  5. nginx学习--nginx下的gzip与vary、预压缩、缓存、反向代理的结合

    2019独角兽企业重金招聘Python工程师标准>>> 来自:nginx系列(十七)nginx下的gzip与vary.预压缩.缓存.反向代理的结合 介绍 在http的协议里,为了减少 ...

  6. nginx系列(十七)nginx下的gzip与vary、预压缩、缓存、反向代理的结合

    前言  在http的协议里,为了减少网络传输,允许将报文进行gzip压缩以后再传输.虽然网络传输体积减小了,但是服务器压缩和浏览器的解压缩消耗了CPU的计算. 后来出现了预压缩技术,就是提前把静态文件 ...

  7. nginx静态资源缓存与压缩

    一.静态资源缓存 参考文章 (1)apache设置max-age或expires 这里需要修改.htaccess文件. <IfModule mod_headers.c><FilesM ...

  8. Nginx一网打尽:动静分离、压缩、缓存、黑白名单、跨域、高可用、性能优化......

    干货!文章有点长,建议先收藏 引言 一.性能怪兽-Nginx概念深入浅出 二.Nginx环境搭建 三.Nginx反向代理-负载均衡 四.Nginx动静分离 五.Nginx资源压缩 六.Nginx缓冲区 ...

  9. Nginx一网打尽:动静分离、压缩、缓存等,想要的这都有

    引言 早期的业务都是基于单体节点部署,由于前期访问流量不大,因此单体结构也可满足需求,但随着业务增长,流量也越来越大,那么最终单台服务器受到的访问压力也会逐步增高.时间一长,单台服务器性能无法跟上业务 ...

最新文章

  1. nagios监控+pnp4出图
  2. 【深度学习入门到精通系列】什么是消融实验(Ablation experiment)
  3. 其他数据类型的一些操作
  4. NYOJ 325 zb的生日
  5. 三层设计模式初步分离
  6. 富文本++php+源码,自己实现富文本编辑器
  7. 小程序button去除边框
  8. cov(m[, y, rowvar, bias, ddof, fweights, …])
  9. eclipse 安装python开发工具 PyDev
  10. T-SQL AVG Functions
  11. 你真的懂病毒式营销吗
  12. python安装哪个版本比较好,python选择哪个版本安装
  13. android iphone滑动解锁,苹果iOS10锁屏详解:“滑动来解锁”已成为过去
  14. AAAI2021知识图谱论文集
  15. 怎样更改计算机应用图标,win7如何更改软件图标_win7修改应用程序图标的教程
  16. 2022 极术通讯-安谋科技参与起草的PSA相关物联网终端安全标准介绍(电信终端产业协会发布)
  17. 将汉字数字转换成数字
  18. python中的figure什么意思_Python Matplotlib.figure.Figure.text()用法及代码示例
  19. 美学心得(第二百二十四集)罗国正
  20. VMM实践:当虚拟化遇到虚拟机

热门文章

  1. UltraEdit中OracleSQL的syntax文档
  2. 【泰语歌】กลับคำสาหล่า 歌手:Mike Piromporn
  3. 文件系统损坏导致虚拟机无法正常启动的问题及解决方法
  4. 【Alpha】第一次Daily Scrum Meeting
  5. 无根树转为有根数(图论) By ACReaper
  6. 2.25~当svn服务器ip地址变了怎么办?
  7. .NET两种图片上传方式
  8. 2.5 Hive中外部表的讲解
  9. 简易的CRM系统案例之SpringMVC+JSP+MySQL+hibernate框架版本
  10. suList() 和 asList()