nginx使用rewrite机制实现缓存

问题起始的需求

为了某个傻傻的想法,将所有的动态的页面变成静态页面。因为图像之类的保存位置也是在 数据库中,因此,这些统统都变成了php的访问请求

碰到的问题症状

进行了问题解决之后,发现图像之类的每次都需要从服务器上下载,这样对服务器的压力比 较大,而这些图片大部分都没有进行过任何更改

解决的思路

通过在服务器上创建一个缓存的文件,如果缓存文件不存在的时候,再请求php执行,在php 执行过程中,顺便将新的文件放置到缓存文件中,这样 下次的下次 的请求的时候,就会 出现文件未修改(服务器返回304),就不需要从服务器上再次下载了。

nginx的配置

if (!-f $latex request_filename) {
  rewrite "^/dev/getfile/(.+)$" /dev/getfile.php?$1& last;
 }

我在getfile.php中将所有允许缓存的文件都放在/dev/getfile目录下,因此,在请求时, 如果缓存文件存在的话,就不调用getfile.php文件,如果不存在的话,则调用getfile.php, 而在getfile.php中,会将不存在的文件重新创建到指定目录下,这样依赖,在 下次 调 用的时候,由于是新文件,则不调用getfile.php文件而重新传输,在 下次的下次 调用 的时候,文件未更改则不用重新传输了。