nginx缓存功能的设置
首先用的缓存是proxy_cache.
在http段里加入下列几句:
- proxy_connect_timeout 5;
- proxy_read_timeout 60;
- proxy_send_timeout 5;
- proxy_buffer_size 16k;
- proxy_buffers 4 64k;
- proxy_busy_buffers_size 128k;
- proxy_temp_file_write_size 128k;
- proxy_temp_path /home/temp_dir;
- proxy_cache_path /home/cache levels=1:2 keys_zone=cache_one:50m inactive=20m max_size=30g;
上面的各行的参数我再时不解释,网上有很多。
接下来在要缓存的service里加入:
- location /gou/detail-id-116 {
- ##缓存
- index index.html index.htm index.php;
- proxy_cache cache_one;
- proxy_cache_valid 200 302 1h;
- proxy_cache_key $host$uri$is_args$args;
- proxy_pass http://contactpool;
- proxy_ignore_headers "Cache-Control" "Expires" "Set-Cookie";#不处理后端服务器返回的指定响应头
- expires 30d;
- proxy_set_header Host $host;
- proxy_set_header X-Real-IP $remote_addr;
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
- }
当然可以用正则缓存更多的页面如:~.*\.(PHP|jsp|cgi)?$
上面的我只解释一下地方:
- proxy_ignore_headers
这个表示不处理后端服务器返回的指定响应头,作用就是能够缓存动态页面,比如.php的页面,如果不加这一行就只能缓存静态的页面内容了。
现在:nginx -s reload 后缓存就有了,
接下来如何在需要的时候清理缓存呢,
网上一位大牛分析了nginx是如何存的缓存文件:
计算方法:
1) nginx先把请求地址/1.png用md5进行哈希,得到e0bd86606797639426a92306b1b98ad9
md5的参数就是上面的配置中:
- proxy_cache_key
值,如md5("www.xxx.com/gou/detail-id-116");
2) level=1:2就是把最后一位数9拿出来建一个目录,然后再把9前面的2位建一个目录,最后把刚才得到的这个缓存文件放到9/ad目录中。
同样的方法推理,如果level=1:1,那么缓存文件的路径就是/usr/local/nginx/cache/9/d/e0bd86606797639426a92306b1b98ad9
那么我们就可以写一个脚本来清理特定的缓存了:
- #!/usr/bin/env php
- <?php
- $cache_dir = '/usr/local/nginx/cache/';
- $request_uri = $argv[1];
- $url_hash = md5($request_uri);
- $dir1 = substr($url_hash,-1,1) . '/';
- $dir2 = substr($url_hash,-3,2) . '/';
- $cached_file = $cache_dir . $dir1 . $dir2 . $url_hash;
- if (is_file($cached_file)) {
- if (unlink($cache_dir . $dir1 . $dir2 . $url_hash)) {
- echo $request_uri . " 缓存清除成功\n";
- } else {
- echo $request_uri . " 缓存清除失败\n";
- }
- } else {
- echo $request_uri . " 未被缓存\n";
-----------------------------------------------------------------------------------------------------------------------
fastcgi cache
先看下测试数据:
未使用
Concurrency Level: 5
Time taken for tests: 9.016 seconds
Complete requests: 100
Failed requests: 0
Write errors: 0
Total transferred: 1696500 bytes
HTML transferred: 1669000 bytes
Requests per second: 11.09 [#/sec] (mean)
Time per request: 450.781 [ms] (mean)
Time per request: 90.156 [ms] (mean, across all concurrent requests)
Transfer rate: 183.76 [Kbytes/sec] received
日志里显示,页面执行需要0.004s
Concurrency Level: 5
Time taken for tests: 3.203 seconds
Complete requests: 100
Failed requests: 0
Write errors: 0
Total transferred: 1685400 bytes
HTML transferred: 1669000 bytes
Requests per second: 31.22 [#/sec] (mean)
Time per request: 160.156 [ms] (mean)
Time per request: 32.031 [ms] (mean, across all concurrent requests)
Transfer rate: 513.84 [Kbytes/sec] received
日志里显示,页面执行时间为0s
提高的很明显!
http里:
server里:
location ~ .*\.php?$
{
#fastcgi_pass unix:/tmp/php-cgi.sock;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fcgi.conf;
#以下是fastcgi_cache的配置
fastcgi_cache cache_php;
fastcgi_cache_valid 200 302 1h;
fastcgi_cache_min_uses 1;
fastcgi_cache_use_stale error timeout invalid_header http_500;
fastcgi_cache_key $host$request_uri;
}
fastcgi_cache_path:fastcgi_cache
缓存目录,可以设置目录层级,比如1:2会生成16*256个字目录,cache_php是这个缓存空间的名字,cache是用多少内存(这样热门的内容
nginx直接放内存,提高访问速度),inactive表示默认失效时间,max_size表示最多用多少硬盘空间。本来还有个
fastcgi_temp_path参数,但发现似乎没用。
fastcgi_cache_valid:定义哪些http头要缓存
fastcgi_cache_min_uses:URL经过多少次请求将被缓存
fastcgi_cache_use_stale:定义哪些情况下用过期缓存
fastcgi_cache_key:定义fastcgi_cache的key,示例中就以请求的URI作为缓存的key,Nginx会取这个key的md5作为缓存文件,如果设置了缓存哈希目录,Nginx会从后往前取相应的位数做为目录
fastcgi_cache:用哪个缓存空间
指定删除某一URL的php文件的缓存的PHP程序
大致代码如下:
<?php
function purgeCache()
{
$url = $this->post('url'); //获取不带协议的url即可 如:192.168.100.121/index.php md5为ca0523d698167fcc981bf9e04f3c792a 最终生成的文件名就是这个 if (empty($url) || !Cola_Com_Validate::url($url)) {
exit('请输入正确的URL。');
} $md5 = md5($url);
$cacheFile = $this->_cacheRoot . '/' . substr($md5, -2, 2) . '/' . substr($md5, -4, 2) . '/' . $md5; if (!file_exists($cacheFile)) {
exit('缓存不存在。');
} if (@unlink($cacheFile)) {
echo '清除缓存成功。';
} else {
echo '清除缓存失败。';
}
}
参考网站地址:http://www.fuchaoqun.com/2011/01/nginx-fastcgi_cache/
Nginx
fastcgi_cache缓存很不错,但我只想在某些页面用fastcgi_cache,很简单,有两种方法,一是在location中定义
fastcgi_cache,这样只有满足一定规则的url才会用上cache,其他的就不会了;另外一种方法是在你不需要缓存的页面上,输出禁止缓存的
头信息,用ColaPHP的话,直接$this->response->disableBrowserCache(); 具体代码:
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");
这样就告诉Nginx,这个页面不需要缓存。
好吧,要淡定不要D疼,还有最后一个问题,如果页面中只有一小部分内容不可以缓存,可以用Nginx
fastcgi_cache吗?比如某个内容页,大部分内容可以缓存,但希望把用户的登录信息更新上去。答案是肯定的,可以直接输出用户未登录的页面样
式,等页面加载完毕之后,通过ajax异步更新用户信息:
$().ready(function() {
initUser();
})
nginx缓存功能的设置的更多相关文章
- Nginx实现负载均衡&Nginx缓存功能
一.Nginx是什么 Nginx (engine x) 是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP服务器.Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambl ...
- Nginx缓存功能、防盗链、URL重写
nginx做为反向代理时,能够将来自upstream的响应缓存至本地,并在后续的客户端请求同样内容时直接从本地构造响应报文. nginx的缓存数据结构: 共享内存:存储键和缓存对象元数据 磁盘空间:存 ...
- Nginx 之四: Nginx服务器的压缩功能和缓存功能
在Nginx服务器配置文件中可以通过配置Gzip的使用,可以配置在http块,server 块或者location块中设置,Nginx服务器可以通过ngx_http_gzip_module模块.ngx ...
- nginx的反向代理功能和缓存功能
html { font-family: sans-serif } body { margin: 0 } article,aside,details,figcaption,figure,footer,h ...
- nginx缓存设置(expires)
一.expires功能说明 nginx缓存的设置可以提高网站性能,对于网站的图片,尤其是新闻网站,图片一旦发布,改动的可能是非常小的,为了减小对服务器请求的压力,提高用户浏览速度,我们可以通过设置ng ...
- 6、nginx的反向代理及缓存功能
nginx模块的应用 ngx_http_proxy_module nginx 反向代理模块: http://nginx.org/en/docs/http/ngx_http_proxy_module. ...
- 使用Nginx的proxy_cache缓存功能取代Squid(转)
Nginx从0.7.48版本开始,支持了类似Squid的缓存功能.这个缓存是把URL及相关组合当作Key,用md5编码哈希后保存在硬盘上,所以它可以支持任意URL链接,同时也支持404/301/302 ...
- 使用Nginx的proxy_cache缓存功能取代Squid
Nginx从0.7.48版本开始,支持了类似Squid的缓存功能.这个缓存是把URL及相关组合当作Key,用md5编码哈希后保存在硬盘上,所以它可以支持任意URL链接,同时也支持404/301/302 ...
- Nginx代理缓存功能
Nginx代理缓存功能 Nginx缓存主要是用于减轻后端服务器的负载,提高网站并发量,提升用户体验度. 注意:Nginx反向代理的缓存功能是由ngx_http_proxy_module提供, ...
随机推荐
- gh-ost安装
下载 : https://github.com/github/gh-ost/releases/tag/v1.0.28 先安装Go语言: sudo yum install golang 将gh-ost文 ...
- [py]列表生成式-支持条件,多值的拼接
列表生成式 代码简洁一些 支持多条件, 过滤,或拼接某些值 支持返回多值 是一种生成式 # 生成一个列表 print(list(range(1, 11))) # 生成一个列表x^2 ## 方法1: 返 ...
- python对象反射和函数反射
python的对象反射功能,经常在编程时使用.相比较其它的编程语言使用非常方便.反射就是用字符串来操作对象或者类,模块中的成员. 一.对象的反射 反射功能的实现,由这4个内置函数来实现(hasattr ...
- [LeetCode] 53. Maximum Subarray_Easy tag: Dynamic Programming
Given an integer array nums, find the contiguous subarray (containing at least one number) which has ...
- 使用masory
动态更新约束的时候老是提示有多余的约束,我使用update_contraits make_contraits 都不能解决,后来使用了remake_contraits才消除了告警. view pro ...
- linux命令:linux文件处理命令
命令格式 : 命令 [-选项] [参数] 例:ls -la /etc 说明:1)个别命令使用不遵循此格式,[]代表可选 2)当有多个选项时,可以写在一起 3)-a等于 --all,调用简化选项用 ...
- sql中 substring和charindex 的用法
-- 第一个参数是要截取的字符串,第二个参数是从第几个字符开始截取,第三个参数是截取的长度 --例如:select SUBSTRING('12345678',1,4) 返回 1234 -- selec ...
- lnmp之nginx1.10.2安装
linux下nginx的安装 为了后面避免缺失,还是什么都安装一下(后面安装php和mysql就不需要重复再执行下面这个了,当然你再执行一遍也没问题) [root@localhost src]# yu ...
- zw版【转发·台湾nvp系列Delphi例程】HALCON Roberts2
zw版[转发·台湾nvp系列Delphi例程]HALCON Roberts2 procedure TForm1.Button1Click(Sender: TObject);var op: HOpera ...
- python之路----继承的抽象类和接口类
抽象类与接口类 接口类 继承有两种用途: 一:继承基类的方法,并且做出自己的改变或者扩展(代码重用) 二:声明某个子类兼容于某基类,定义一个接口类Interface,接口类中定义了一些接口名(就是函数 ...