nginx 压缩和缓存设置
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 压缩和缓存设置相关推荐
- Nginx的代理缓存设置
Nginx的代理缓存设置 语雀Q群 763215167 expires: 设置浏览器的缓存时间 (客户端缓存) location /files {alias /home/imooc;# expires ...
- Nginx请求强制缓存设置
效果: 通过nginx更改配置项的方式强制缓存 更改所有data服务相关的请求,包括mergedata等 具体命令 add_header 'Cache-Control' 'max-age=3600' ...
- Nginx 静态资源缓存配置
示例 # Media: images, icons, video, audio, HTC location ~* \.(?:jpg|jpeg|gif|png|ico|cur|gz|svg|svgz|m ...
- Linux系统下的Nginx的缓存设置、压缩配置和自动列目录配置
(本文内所有的centos系统命令均使用斜体加粗表示,以便各位阅读) 注意!本人使用的是Lnmp脚本模式安装的Nginx 1.8.0稳定版,如果是从官网下载的版本,nginx.conf的配置文件有些不 ...
- nginx学习--nginx下的gzip与vary、预压缩、缓存、反向代理的结合
2019独角兽企业重金招聘Python工程师标准>>> 来自:nginx系列(十七)nginx下的gzip与vary.预压缩.缓存.反向代理的结合 介绍 在http的协议里,为了减少 ...
- nginx系列(十七)nginx下的gzip与vary、预压缩、缓存、反向代理的结合
前言 在http的协议里,为了减少网络传输,允许将报文进行gzip压缩以后再传输.虽然网络传输体积减小了,但是服务器压缩和浏览器的解压缩消耗了CPU的计算. 后来出现了预压缩技术,就是提前把静态文件 ...
- nginx静态资源缓存与压缩
一.静态资源缓存 参考文章 (1)apache设置max-age或expires 这里需要修改.htaccess文件. <IfModule mod_headers.c><FilesM ...
- Nginx一网打尽:动静分离、压缩、缓存、黑白名单、跨域、高可用、性能优化......
干货!文章有点长,建议先收藏 引言 一.性能怪兽-Nginx概念深入浅出 二.Nginx环境搭建 三.Nginx反向代理-负载均衡 四.Nginx动静分离 五.Nginx资源压缩 六.Nginx缓冲区 ...
- Nginx一网打尽:动静分离、压缩、缓存等,想要的这都有
引言 早期的业务都是基于单体节点部署,由于前期访问流量不大,因此单体结构也可满足需求,但随着业务增长,流量也越来越大,那么最终单台服务器受到的访问压力也会逐步增高.时间一长,单台服务器性能无法跟上业务 ...
最新文章
- nagios监控+pnp4出图
- 【深度学习入门到精通系列】什么是消融实验(Ablation experiment)
- 其他数据类型的一些操作
- NYOJ 325 zb的生日
- 三层设计模式初步分离
- 富文本++php+源码,自己实现富文本编辑器
- 小程序button去除边框
- cov(m[, y, rowvar, bias, ddof, fweights, …])
- eclipse 安装python开发工具 PyDev
- T-SQL AVG Functions
- 你真的懂病毒式营销吗
- python安装哪个版本比较好,python选择哪个版本安装
- android iphone滑动解锁,苹果iOS10锁屏详解:“滑动来解锁”已成为过去
- AAAI2021知识图谱论文集
- 怎样更改计算机应用图标,win7如何更改软件图标_win7修改应用程序图标的教程
- 2022 极术通讯-安谋科技参与起草的PSA相关物联网终端安全标准介绍(电信终端产业协会发布)
- 将汉字数字转换成数字
- python中的figure什么意思_Python Matplotlib.figure.Figure.text()用法及代码示例
- 美学心得(第二百二十四集)罗国正
- VMM实践:当虚拟化遇到虚拟机
热门文章
- UltraEdit中OracleSQL的syntax文档
- 【泰语歌】กลับคำสาหล่า 歌手:Mike Piromporn
- 文件系统损坏导致虚拟机无法正常启动的问题及解决方法
- 【Alpha】第一次Daily Scrum Meeting
- 无根树转为有根数(图论) By ACReaper
- 2.25~当svn服务器ip地址变了怎么办?
- .NET两种图片上传方式
- 2.5 Hive中外部表的讲解
- 简易的CRM系统案例之SpringMVC+JSP+MySQL+hibernate框架版本
- suList() 和 asList()