基于nginx的FastCGI的缓存配置
废话不多说了, 直接上配置, 其实 fastcgi_cache 和 proxy_cache 的配置基本一样:
# !缓存文件存放目录
# levels 缓存层次
# keys_zone 缓存空间名和共享内存大小(热点内容放在内存)
# inactive 失效时间, 1d = 1天
# max_size 最大缓存空间(硬盘占用)
fastcgi_cache_path /home/xwsoul/code/web/demo/cgi_cache/cache_dir/ levels=2:2 keys_zone=cgi_one:10m inactive=2h max_size=2g; server { listen 80;
server_name demo.xwsoul.com; root /home/xwsoul/code/web/demo;
index index.html index.php; # 清理 fastcgi_cache
location ~ /pcgi(/*) {
allow 127.0.0.1;
allow 192.168.2.0/24;
deny all;
fastcgi_cache_purge cgi_one "$scheme$request_method$host$1";
} try_files $uri @missing;
location @missing {
rewrite ^/cgi_cache/(.*) /cgi_cache/index.php?code=$1 last;
} location ~ .*\.php$ {
# 默认情况下关闭cache
set $xwsoul_nocache yes;
# 请求的 URL 在 /cgi_cache/ 的允许缓存
if ($request_uri ~ ^/cgi_cache/) {
set $xwsoul_nocache "";
}
# CGI指向地址
fastcgi_pass 127.0.0.1:9000;
# 调用 cache 的命名空间
fastcgi_cache cgi_one;
# 缓存触发的方法 HEADER, GET, POST 中的一个或多个
fastcgi_cache_methods GET;
# 生成的缓存名称的 key 的名字
# $scheme https/http
# $request_method 请求方法,基于上面的设置,这里为GET
# $host 主机
# $request_uri 请求地址
fastcgi_cache_key "$scheme$request_method$host$request_uri";
# 生效值: 即代理目标的状态码以及缓存时间
fastcgi_cache_valid 200 302 1h;
# 确定缓存成为过期数据的情况
fastcgi_cache_use_stale error timeout invalid_header http_500;
# 请求过多少次相同的URL后, 缓存将开始
fastcgi_cache_min_uses 1;
# 关闭缓存
fastcgi_cache_bypass $xwsoul_nocache;
fastcgi_no_cache $xwsoul_nocache;
# 发送头信息到客户端 - 一般是浏览器
add_header X-Cache "$upstream_cache_status";
# fastcgi 的其他参数配置
include fastcgi.conf;
}
}
几个问题:
1. 为什么使用 set 变量控制 $xwsoul_nocache 来控制 fastcgi_cache_bypass(0.8x之后官方推荐的方法) 和 fastcgi_no_cache 参数确定是否生成缓存?
很简单, 因为不能是所有的页面都需要 cache.当然有更好的实现方法请尽量给建议.
2. 如果我在 /cgi_cache/ 下的脚本不需要缓存可以实现么, 怎么办?
这个也很简单, 通过 CGI 的返回的 Head 即可控制:
header('Cache-Control:no-cache,
must-revalidate, max-age=0;');
和
header('Expires:0;');
均可实现.
3. 为什么缓存的 Cache Name 里需要 $scheme ?
因为 http/https 是不同的安全级别, 可能需要的缓存机制是不一样的!
最后附上对应访问的PHP测试脚本
<?php
$code = isset($_GET['code'])?$_GET['code']:'';
echo '<pre>';
var_dump($code);
echo '</pre>';
$code = md5($code);
$rand = mt_rand(1, 10);
echo '<p>';
echo 'Loop <b>', $rand, '</b> :<br />';
for ($i = 0;$i < $rand;$i++) {
echo $code, '<br />';
}
echo '</p>';
echo date('Ymd H:i:s'), '<br />';
基于nginx的FastCGI的缓存配置的更多相关文章
- 基于Nginx进行地图瓦片缓存的方案描述
文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/ 1. 背景 在产品的迭代中,我们完成了移动端瓦片缓存方案和服务端瓦片缓存 ...
- HappyAA服务器部署笔记2(nginx的静态资源缓存配置)
我近期对服务器进行了少量改进,虽然之前使用了nginx反向代理之后性能有所提高,但仍然不够,需要使用缓存来大幅度提高静态资源的访问速度. 服务器上的静态资源主要有这些:png, jpg, svg, j ...
- 基于nginx的虚拟主机的配置
安装pcre tar -xvf pcre-8.32.tar.gz cd pcre-8.32 ./configure make;make install 安装nginx 首先创建一个nginx用户,以n ...
- nginx开启gzip和缓存配置
# 开启gzip gzip on; # 启用gzip压缩的最小文件,小于设置值的文件将不会压缩 gzip_min_length 1k; # gzip 压缩级别,1-10,数字越大压缩的越好,也越占用C ...
- nginx反向代理缓存配置
关于nginx的反向代理缓存配置,用的最多的就是CDN公司,目前CDN公司用纯nginx做缓存的已经很少了,基本都用tnginx(阿里的).openresty:但是这两款软件都是基于nignx开发的, ...
- nginx之fastcgi配置参数及其缓存
CGI的由来 最早的Web服务器只能简单地响应浏览器发来的HTTP请求,并将存储在服务器上的HTML文件返回给浏览器,也就是静态html文件,但是后期随着网站功能增多网站开发也越来越复杂,以至于出现动 ...
- 基于nginx tomcat redis分布式web应用的session共享配置
一.前言 nginx 作为目前最流行的开源反向代理HTTP Server,用于实现资源缓存.web server负载均衡等功能,由于其轻量级.高性能.高可靠等特点在互联网项目中有着非常普遍的应用,相关 ...
- Nginx中FastCGI配置优化
FastCGI: FastCGI是从CGI发展改进而来的.传统CGI接口方式的主要缺点是性能很差,因为每次HTTP服务器遇到动态程序时都需要重新启动脚本解析器来执行解析,然后结果被返回给HTTP服务器 ...
- Nginx+php+fastcgi在win7下的配置
首先装载php 1.从www.php.net上下载php对应版本 2.解压之后放到c盘下(其实放哪无所谓,Apache会有配置指向,但是Nginx不用) 3.因为用的5.3.17版本,已经有了php- ...
随机推荐
- AI:AI
ylbtech-AI:AI 人工智能(Artificial Intelligence),英文缩写为AI.它是研究.开发用于模拟.延伸和扩展人的智能的理论.方法.技术及应用系统的一门新的技术科学. 人工 ...
- Linux 文件名颜色
在Linux中,文件的颜色都是有含义的.其中, 蓝色表示目录 绿色表示可执行文件 红色表示压缩文件 浅蓝色表示链接文件 灰色表示其它文件 红色闪烁表示链接的文件有问题了 黄色是设备文件,包括block ...
- 转载:IntelliJ IDEA 2016.2 配置Tomcat 运行Web项目
以前都用MyEclipse写程序的 突然用了IDEA各种不习惯的说 借鉴了很多网上好的配置办法,感谢各位大神~ 前期准备 IDEA.JDK.Tomcat请先在自己电脑上装好 好么~ 博客图片为主 请多 ...
- http请求中的get和post的区别
1.标准答案 GET在浏览器回退时是无害的,而POST会再次提交请求. GET产生的URL地址可以被Bookmark,而POST不可以. GET请求会被浏览器主动cache,而POST不会,除非手动设 ...
- linux日常管理-防火墙selinux
关闭防火墙 SELINUX=disabled 可以是三种状态 # enforcing - SELinux security policy is enforced.打开# permissive - SE ...
- 关于startactivity初始化activity的过程以及activity和window以及view的关系
activity 构造一个实现了window的phonewindow,获得viewroot,然后往里面加入view 当发生事件的时候,如KEYDOWN,windowmanagerservice就接受到 ...
- js链表操作
<!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- mac下已装virtualbox运行genymotion还报错找不到虚拟机的解决办法
sudo ln -s /usr/local/bin/VBoxManage /usr/bin/VBoxManage
- 27、BLASTN的参数
转载:http://blog.sina.com.cn/s/blog_5ecfd9d90100ksui.html http://www.docin.com/p-704735699.html 与之前的bl ...
- BootStrap2学习日记23---弹出对话框
<a href="#login" data-toggle="modal" class="btn btn-primary">登陆& ...