1、nginx永久缓存配置
为了得到更好的响应速度和用户体验,对于一些静态文件,nginx可以采用缓存策略,从而不用每次加载静态文件都向后台服务器发送请求。今天记录下nginx的缓存功能配置。
为了便于测试,先在后台服务器的index.html页面添加一张图片headimg.jpg,效果如下:
缓存配置-LMLPHP
下面开始配置缓存:
1)在nginx下新建一个文件夹cache,该目录是存放缓存文件的。

mkdir cache
chmod 777 cache

2)修改nginx.conf配置

server{
    listen 8080;
    server_name localhost;
    location / {
        root cache;
        proxy_store on;
        proxy_store_access user:rw group:rw all:r;
        #proxy_temp_path用于存储临时文件,配置文件生效时会自动生成此文件
        proxy_temp_path cache_temp;
        proxy_pass http://192.168.1.6;
    }
}

配置生效后强刷页面,则可以看到缓存的文件:
缓存配置-LMLPHP
测试加载的文件来源:nginx已经缓存了文件,然后我将后台服务器的该文件删除,刷新页面,发现图片无法显示,说明文件来源于后台,而不是nginx缓存,重新修改下nginx.conf,改成下面的配置即可:

server{
    listen 8080;
    server_name localhost;
    location / {
        root cache;
        proxy_store on;
        proxy_store_access user:rw group:rw all:r;
        proxy_temp_path cache_temp;
        if (!-e $request_filename) {
            proxy_pass http://192.168.1.6;
        }
    }
}

上述的配置方式对于http://192.168.1.5:8080/ 这样的路径会报403 Forbidden错误,因为认为缓存了一个空文件名的文件(directory index of "/usr/local/nginx/cache/" is forbidden)。要解决此办法,可以考虑单独设置一个静态文件专用的location,然后设置此规则,不过这么设置的话又不是很方便维护,有利有弊吧。

2、临时缓存配置
在http配置快中配置:

proxy_temp_path /usr/local/nginx/proxy_temp_dir;
proxy_cache_path /usr/local/nginx/proxy_cache_dir levels=1:2 keys_zone=cache_one:50m inactive=1h max_size=500m;

配置缓存相关选项

server{
    listen 8080;
    server_name localhost;
    #添加两个响应头信息,用于获知访问的服务器地址与缓存是否成功
    add_header X-Via $server_addr;
    add_header X-Cache $upstream_cache_status;
    location / {
        proxy_cache cache_one;
        proxy_cache_key $host$uri$is_args$args;
        proxy_cache_valid 200 1h;
        proxy_cache_valid 304 1h;
        proxy_cache_valid 301 302 1h;
        proxy_cache_valid any 1h;
        proxy_pass http://192.168.1.6;
    }
}

其他缓存配置|配置项|说明||---|---||proxy_cache_bypass|配置nginx向客户端发送响应数据时,不从缓存中获取的条件||proxy_cache_lock|是否开启缓存的锁功能||proxy_cache_lock_timeout|设置缓存的锁功能开启后的超时时间||proxy_no_cache|配置什么情况下不使用缓存||proxy_cache_min_uses|当一个url被重复请求达到指定次数的时候才缓存||proxy_cache_revalidate|用于当缓存过期时,nginx通过一次If-Modified-Since的请求头去验证缓存内容是否过期||proxy_cache_use_stale|设置状态,用于内容源web服务器处于这些状态时,nginx向客户端响应历史缓存数据。|

07-08 00:09