nginx作为web服务器,有时需要让浏览器缓存(Browser Caching) 是为了加速浏览并节约网络资源,浏览器在用户磁盘上对最近请求过的文档进行存储。
nginx通过 expires 指令来设置浏览器的Header
语法: expires [time|epoch|max|off]
默认值: expires off
作用域: http, server, location
使用本指令可以控制HTTP应答中的“Expires”和“Cache-Control”的头标,(起到控制页面缓存的作用)。
可以在time值中使用正数或负数。“Expires”头标的值将通过当前系统时间加上您设定的 time 值来获得。
epoch 指定“Expires”的值为 1 January, 1970, 00:00:01 GMT。
max 指定“Expires”的值为 31 December 2037 23:59:59 GMT,“Cache-Control”的值为10年。
-1 指定“Expires”的值为 服务器当前时间 -1s,即永远过期
例子:
#图片缓存30天
location ~.*\.(jpg|png|jpeg)$
{
expires 30d;
}
#js css缓存一小时
location ~.*\.(js|css)?$
{
expires 1h;
}
说明:
这是nginx的设置浏览器缓存,如果使用apache,也是可以设置的。
apache也是有cache模块的。
ngx_slowfs_cache:Module adding ability to cache static files。
ngx_slowfs_cache扩充了Nginx的缓存功能,通过 ngx_slowfs_cache 可以实现本地站点静态文件缓存。此功能为低速的存储设备创建快速缓存提供了可能。
通过 ngx_slowfs_cache 将静态文件缓存到要地磁盘后,访问速度将明显改善。而且通常缓存是先放到内存中,从内存中命中自然要比硬盘上命中快很多了。
ngx_slowfs_cache 模块同时也提供了“cache_purge”功能,用于清除指定URL的缓存。
ngx_slowfs_cache 的下载地址:http://labs.frickle.com/nginx_ngx_slowfs_cache/
设置缓存区域
path:存放缓存的路径
levels:缓存文件的目录级数
zone_name:缓存区域的名字
zone_size:内存缓存使用的大小
inactive:如果缓存数据在inactive定义的时间内未被访问,就被移除缓存
max_size:硬盘缓存大小
slowfs_temp_path path [level1] [level2] [level3] (context: http)
ngx_slowfs_cache 的安装
1、下载ngx_slowfs_cache,我们将得到一个文件 ngx_slowfs_cache-1.9.tar.gz
2、解压包 tar zxf ngx_slowfs_cache-1.9.tar.gz 得到目录 ngx_slowfs_cache-1.9
3、执行nginx编译,添加一条编译指令 --add-module=../ngx_slowfs_cache-1.9 即可将ngx_slowfs_cache模块编入nginx,完成的编译参数如:
./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --add-module=../ngx_slowfs_cache-1.9
如果是已经安装好的nginx,可以通过平滑升级来添加该模块。
4、执行编译安装 make && make install
如果没有意外错误,至此您已经完成了 ngx_slowfs_cache 模块的安装。
ngx_slowfs_cache 配置举例:
slowfs_temp_path /usr/local/nginx/temp;(temp与cache路径一直)
slowfs_cache_path /usr/local/nginx/img levels=1:2 keys_zone=cache_one:50m inactive=1d max_size=1g;
server
{
listen 80;
server_name www.test.com;
index index.html index.htm;
root /usr/local/nginx/html;
# location / {
# slowfs_cache cache_one;
# slowfs_cache_key $uri;
# slowfs_cache_valid 1d;
# }
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|js|css|htm|html)$
{
slowfs_cache cache_one;
slowfs_cache_key $uri;
slowfs_cache_valid 1d;
}
# location ~ /purge(/.*) {
# allow 127.0.0.1;
# allow 192.168.0.215;
# deny all;
# slowfs_cache_purge cache_one $1;
# }
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
{
expires 1d;
}
location ~ .*\.(js|css)?$
{
expires 2h;
}
}
slowfs_cache 可以用loation路径或者文件的类型来定义缓存
两种写法:
A:
slowfs_cache cache_one;
slowfs_cache_key $uri;
slowfs_cache_valid 1d;
}
B:
{
slowfs_cache cache_one;
slowfs_cache_key $uri;
slowfs_cache_valid 1d;
}
经测试,写法A只能缓存html等静态文件,无法缓存图片,可以用purge模块删除缓存。
写法B则图片跟html都能缓存,但无法使用purge模块。(很纠结有木有。。。)
因为是做图片服务器,所以这里采用写法B,没用purge模块,可以通过脚本来删除指定缓存。
如下:
#!/bin/bash
if [ -n "$1" ]
then
grep -ra "^KEY" /usr/local/nginx/img/ | grep "$1$" | awk -F[:] '{print $1}' | xargs rm -rf
else
echo Operating is wrong
fi
要删除http://test.com/img/432.jpg,则执行
#./flush_cache /img/432.jpg
缺点是如果缓存很大,删除会比较慢。
如果使用googler开发的google-perftools优化Nginx和MySQL的内存管理,性能将会有一定程度的提升。
特别是对高并发下的服务器,效果更明显。
注意:本教程仅适用于Linux。
下面为大家介绍google-perftools的安装,并配置Nginx和MySQL支持google-perftools。
首先,介绍如何优化Nginx:
1,首先下载并安装google-perftools:
注意,如果是64位系统:
那么你需要做:
1)先安装libunwind或者2)在configure时添加--enable-frame-pointers.
那么首先说说如何安装libunwind:
tar zxvf libunwind-0.99.tar.gz
cd libunwind-0.99/
CFLAGS=-fPIC ./configure --prefix=/usr
make CFLAGS=-fPIC
make CFLAGS=-fPIC install
到这里安装libunwind完成.
如果是使用添加--enable-frame-pointers的方式,先不管,咱们往下走.
下载并安装google-perftools:
tar xzvf google-perftools-1.7.tar.gz
cd google-perftools-1.7
然后开始配置:
在这里注意这步,如果是32位系统,可以不添加 --enable-frame-pointers,如果是64位系统,并且你之前没有安装libunwind,那么你一定要添加这个:--enable-frame-pointers
编译并安装:
make install
到这里安装google-perftools完成了但未生效,接下来需要使google-perftools生效:
/sbin/ldconfig
注意,这里的双引号是英文的。
到这里安装google-perftools完成.
为了使Nginx支持google-perftools,需要加上--with-google_perftools_module重新编译Nginx,如果不知道如何安装Nginx,可以从这里查看Nginx安装教程.
例如:
./configure --user=www --group=www --prefix=/usr/local/nginx \
--with-http_stub_status_module \
--with-http_ssl_module --with-openssl= \
--with-http_addition_module \
--with-zlib= \
--with-google_perftools_module
make
make install
添加Nginx快速重启脚本,请从wpadm.com下载.
到这里安装Nginx完成.
接下来为google-perftools添加线程目录:
chmod 0777 /tmp/tcmalloc
修改/usr/local/nginx/conf/ncing.conf
在pid这行的下面添加
google_perftools_profiles /tmp/tcmalloc;
重新启动nginx:
验证是否正在运行:
nginx 13101 www 45w REG 8,1 0 4014748 /tmp/tcmalloc.13101
nginx 13102 www 47w REG 8,1 0 4014742 /tmp/tcmalloc.13102
nginx 13103 www 49w REG 8,1 0 4014746 /tmp/tcmalloc.13103
nginx 13105 www 51w REG 8,1 0 4014745 /tmp/tcmalloc.13105
nginx 13106 www 53w REG 8,1 0 4014743 /tmp/tcmalloc.13106
nginx 13107 www 55w REG 8,1 0 4014749 /tmp/tcmalloc.13107
nginx 13108 www 57w REG 8,1 0 4014754 /tmp/tcmalloc.13108
nginx 13109 www 59w REG 8,1 0 4014750 /tmp/tcmalloc.13109
nginx 13110 www 61w REG 8,1 0 4014747 /tmp/tcmalloc.13110
nginx 13111 www 63w REG 8,1 0 4014755 /tmp/tcmalloc.13111
nginx 13112 www 65w REG 8,1 0 4014753 /tmp/tcmalloc.13112
nginx 13113 www 67w REG 8,1 0 4014756 /tmp/tcmalloc.13113
nginx 13114 www 69w REG 8,1 0 4014757 /tmp/tcmalloc.13114
nginx 13115 www 71w REG 8,1 0 4014751 /tmp/tcmalloc.13115
nginx 13116 www 73w REG 8,1 0 4014744 /tmp/tcmalloc.13116
nginx 13117 www 75w REG 8,1 0 4014752 /tmp/tcmalloc.13117
我的服务器因为有8核,所以开启了8个Nginx线程,每个线程会有一行类似的记录。
至些,nginx下的google-perftools优化安装完成,供朋友们学习参考。