使用nginx按需获取和缓存照片

时间:2014-03-06 09:26:32

标签: nginx image-caching

我正在开发一个应用程序,我使用第三方服务提供的大部分照片。在构建我的第一个原型时,我直接从服务中获得了图像,即

<img src="http://thirdpartyservice.com/img/12345.jpg">

虽然生产,但每次请求时都从服务中获取图像是没有意义的。它太慢了,因为它同时为数百万用户提供服务。

我想在nginx之上构建一个薄层,根据需求提取并缓存图像24小时。因此,我不是每次都打电话给服务,而是打电话给

<img src="http://myapp.com/img?url=thirdpartyservice.com/img/12345.jpg">

如果这是第一次请求图像,它将从远程服务获取并在我的服务器上缓存24小时。

这可能与nginx有关吗?

1 个答案:

答案 0 :(得分:0)

首先我建议不要将url格式更改为http://myapp.com/img/12345.jpg,以防我们始终代理相同的thirdpartyservice.com。以下是基于nginx wiki的配置示例。

http {
    proxy_cache_path  /data/nginx/cache  levels=1:2    keys_zone=STATIC:10m
                                         inactive=24h  max_size=1g;
    server {
        location /img/ {
            proxy_pass             http://thirdpartyservice.com;
            proxy_set_header       Host thirdpartyservice.com;
            proxy_cache            STATIC;
            proxy_cache_valid      200  1d;
            proxy_cache_use_stale  error timeout invalid_header updating
                                   http_500 http_502 http_503 http_504;
        }
    }
}

official documentation中有很多关于缓存调整的指令。