nginx的内置缓存功能

来源:互联网 发布:a星算法更改父节点 编辑:程序博客网 时间:2024/06/07 23:48
nginx的proxy模块 可以实现类似于Squid的缓存功能,HTTP的缓存与文件系统或者块设备的缓存还有所不同,文件系统或者块设备的缓存可以使用预取方法做优化,提前预取出将要被访问的部分,但是HTTP的缓存却无法预知文件的访问情形。

可以在nginx里面实现动态页面的静态化工作。用户第一次访问index.php页面,由于nginx的缓存中没有,会访问相应的文件,第二次再访问index.php的时候,由于已经缓存在了nginx的proxy_cache中,Nginx当接收到请求之后就不会将请求传送到upstream服务器里面了。

具体的配置方法如下:
在http域内添加如下参数

点击(此处)折叠或打开

  1. proxy_temp_path /usr/local/nginx/sy;
  2. proxy_cache_path /usr/local/nginx/proxy_cache levels=1:2 keys_zone=cache_zone:20m inactive=1d max_size=100m;
在location里面使用proxy_cache,
配置方法如下:

点击(此处)折叠或打开

  1. location ~* \.php$ {
  2. proxy_cache cache_zone;
  3. proxy_cache_key $host$uri$is_args$args;
  4. proxy_cache_valid any 1d;
  5. proxy_pass http://127.0.0.1:8080;
  6. }

这里面设置proxy_cache_key挺有意思的,他会根据这个key映射成一个hash值,然后存入到本地文件中,如果你设置的proxy_cache_key为$host$uri 那么无论后面跟的什么参数,都会访问一个文件,不会再生成新的文件。
而如果proxy_cache_key设置了$is_args$args,那么传入的参数 localhost/index.php?a=4 与localhost/index.php?a=44将映射成两个不同hash值的文件。
在系统中查看相应的文件: