Nginx利用fastcgi_cache缓存php页面教程

  • 前言
  • 配置
    • 1. 在nginx的主配置文件
    • 2. 站点配置
    • 3.验证
    • 4. 遇到问题

前言

fastcgi_cache是一个nginx的插件,用于缓存fastcgi接口的执行结果,例如缓存php的执行结果。特别是php网站的首页与一些非交互页面,利用fastcgi_cache可以大幅度提升访问速度,并且降低php的执行压力。

配置

1. 在nginx的主配置文件

在主配置文件(nginx.conf)中添加缓存域

fastcgi_cache_path /dev/shm/nginx-cache levels=1:2 keys_zone=cgi_wpcache:200m inactive=1d;

fastcgi_cache_path:缓存文件的路径,/dev/shm/为tmfs缓存文件系统,

实际储存在内存中,所以读写IO性能更高。
levels:缓存目录的结构层次,例如1:2,缓存文件会就生成在指定目录的再下两层目录中。
keys_zone:缓存域名称,在vhost内进行缓存时需要调用。
inactive:缓存不活动时间,若缓存内容在指定时间内未被访问将会被清理出缓存域。

2. 站点配置

location /archives/ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_param SCRIPT_FILENAME /data/webroot/$fastcgi_script_name;
include fastcgi_params;
  fastcgi_cache cgi_wpcache;
  fastcgi_cache_methods GET HEAD;
  fastcgi_cache_key $request_method$host$request_uri;
  fastcgi_cache_valid 200 2d;
  fastcgi_ignore_headers Cache-Control Expires Set-Cookie;
  add_header X-Cache “$upstream_cache_status”;
}

fastcgi_cache:指定缓存域
fastcgi_cache_methods:指定缓存的请求方式
fastcgi_cache_key:指定缓存文件的标识,这个标识会MD5转码存储在缓存域的目录下
fastcgi_cache_valid:指定缓存状态,例如上文中只缓存响应状态码为200的请求所产生的返回页面两天
fastcgi_ignore_headers:默认情况下fastcgi_cache会忽略有特殊header的请求,并不进行缓存,官网说明。但当我们添加这个参数后,这些限制将不在存在。
add_header 将会在返回请求的response的header中添加一个X-Cache字段表示是否进行了缓存。如果需要也可以在nginx日志中通过log_format添加$upstream_cache_status字段

  • ·MISS 未命中,请求被传送到后端
  • ·HIT 缓存命中
  • ·EXPIRED 缓存已经过期请求被传送到后端
  • ·UPDATING 正在更新缓存,将使用旧的应答
  • ·STALE 后端将得到过期的应答

3.验证

配置完成后重新加载nginx后通过curl -I 访问如下:

[root@localhost local]# curl -I localhost/archives/1.php
HTTP/1.1 200 OK
Server: nginx/1.14.0
Date: Mon, 25 Jun 2018 06:48:05 GMT
Content-Type: text/html; charset=UTF-8
Connection: keep-alive
Vary: Accept-Encoding
X-Powered-By: PHP/7.0.30
Expires: Tue, 26 Jun 2018 06:48:05 GMT
Cache-Control: max-age=86400
X-Cache: MISS

第一次访问 X-Cache: MISS 说明还未进行缓存。

[root@localhost local]# curl -I localhost/archives/1.php
HTTP/1.1 200 OK
Server: nginx/1.14.0
Date: Mon, 25 Jun 2018 06:50:57 GMT
Content-Type: text/html; charset=UTF-8
Connection: keep-alive
Vary: Accept-Encoding
X-Powered-By: PHP/7.0.30
Expires: Tue, 26 Jun 2018 06:48:05 GMT
Cache-Control: max-age=86400
X-Cache: HIT

第二次访问发现X-Cache: HIT,表明/archives/1.php这个url已经被缓存,再下次访问nignx将不再会去请求php-fpm进行执行,而会直接从缓存中读取并返回,能够大大提高网站速度。

4. 遇到问题

a)访问空白
配置完毕后发现时常会出现页面访问空白的情况,再清空缓存目录后重新访问就恢复了。
经过测试发现是由于第一次使用HEAD方式访问,返回一个body为空的响应并被缓存了,所以之后再次访问就获取到了空白的页面。
这是由于fastcgi_cache_key中没有设置$request_method,将GET和HEAD的请求存储到了同一个key中。

b)页面缓存失败,一直MISS
默认情况下,请求的header中包含“Expires”, “Cache-Control”, “Set-Cookie”等,页面将不会被缓存,所以添加fastcgi_ignore_headers Cache-Control Expires Set-Cookie;即可。

主题测试文章,只做测试使用。发布者:云大使,转转请注明出处:https://www.xp8.net/server/1000.html

赞 (0)
打赏 微信扫一扫 微信扫一扫
nginx下禁止访问.git等隐藏文件夹 -linux运维教程
上一篇 2018年10月16日 下午9:19
下一篇 2018年10月16日 下午9:19

相关推荐

  • 宝塔提示no input file specified 解决方法

    今天给客户开了一个新服务器、安装好宝塔、搬迁好数据库以后,无法打开网页,提示no input file specified,有点郁闷啊。环境、导入数据都是没问题的。怎么会提示这个呢。按了修改php.ini的办法看了下。也不对。 后来删除站点重建建立,在导入数据。解决问题。具体什么问题也不知道。反正供有2个都是这样解决的。

    服务器运维 2018年8月22日
    6.5K00
  • php-fpm常见错误及解决办法整理

    1,request_terminate_timeout引起的资源问题[v_tips]request_terminate_timeout的值如果设置为0或者过长的时间,可能会引起file_get_contents的资源问题。[/v_tips]如果file_get_contents请求的远程资源如果反应过慢,file_get_contents就会一直卡在那里不会…

    服务器运维 2018年8月16日
    3.1K00
  • 如何仅在Nginx Web服务器中启用TLS1.2教程-学派吧

    SSL2.0和SSL3.0具有许多已知的漏洞,如POODLE(CVE-2014-3566),这就是为什么最新的浏览器已经删除了对这些易受攻击的协议的支持。建议你将服务器移至使用TLS版本,特别是TLS 1.2。本篇文章将介绍关于使用Nginx Web服务器启用TLS 1.2。 仅在Nginx中启用TLS1.2 在服务器上的配置文件中编辑域的Nginx服务器块…

    服务器运维 2019年5月7日
    6.7K00
  • win2008 R2设置IP安全策略后在服务器内打开网站很慢或无法访问外部网站的原因-windows教程-学派吧

    这篇文章主要介绍了win2008 R2设置IP安全策略后在服务器内打开网站很慢或无法访问外部网站的原因,需要的朋友可以参考下 win2008R2设置IP安全策略后在服务器内打开网站很慢速度只有几KB的原因 是因为IP安全策略中的关闭策略中设置了原地址“任何IP”到目标地址“任何IP”的UDP任何端口都关闭; 修改为原地址“我的IP地址”到目标地址“任何IP”…

    服务器运维 2018年12月2日
    3.1K00
  • 如何处理Ping ECS实例的IP地址间歇性丢包-linux教程

    本篇文章给大家带来的内容是关于如何处理Ping ECS实例的IP地址间歇性丢包,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 Ping ECS实例的IP地址间歇性丢包 问题描述 Ping ECS实例的IP地址间歇性丢包,ECS实例的网络一直处于不稳定状态 。 问题原因 系统中病毒。 解决方案 Ping外部存在丢包,但是延迟不大,排查不是带宽…

    服务器运维 2018年11月21日
    3.0K00

发表回复

登录后才能评论
联系我们

联系我们

18838889666

在线咨询: QQ交谈

邮件:xinyun@88.com

工作时间:周一至周五,9:30-18:30,节假日休息

添加微信
添加微信
分享本页
返回顶部