为某些静态 URL 设置 nginx 过期时间

为某些静态 URL 设置 nginx 过期时间

我的应用程序通过这样的 URL 提供水印图像:

http://www.domain.com/watermark/image1234.jpg/thumbnail/

我想知道如何设置 nginx 以将其识别为静态图像,以便我可以为其添加 Expiry 标头。到目前为止,我已在 nginx 站点配置中尝试了以下设置,但没有效果:

    location ~* \.(png|gif|jpg|jpeg|swf|ico)$ {
            access_log off;
            expires 30d;
            add_header Pragma public;
            add_header Cache-Control "public";
            tcp_nodelay off;
            break;
    }

    location ~* \.(png|gif|jpg|jpeg|swf|ico)\/[a-zA-Z0-9-]\/$ {
            access_log off;
            expires 30d;
            add_header Pragma public;
            add_header Cache-Control "public";
            tcp_nodelay off;
            break;
    }

我得到的输出:

$curl -I http://www.domain.com/watermark/image1234.jpg/thumbnail/
HTTP/1.1 200 OK
Server: nginx
Date: Mon, 06 May 2013 12:33:51 GMT
Content-Type: image/jpeg
Connection: keep-alive
X-Powered-By: PHP/5.3.23
Content-Disposition: inline; filename="phpThumb_generated_thumbnailjpg"
Last-Modified: Mon, 06 May 2013 09:52:52 GMT

标题中没有过期。有人能告诉我正确的方法吗?

谢谢

答案1

我认为您的正则表达式不会匹配任何内容,因为它们只会匹配完全匹配的文件.png- 没有文件名的空格。

所以他们应该是这样的:

location ~* /.+\.(png|gif|jpg|jpeg|swf|ico)$ {
    access_log off;
    expires 30d;
    add_header Pragma public;
    add_header Cache-Control "public";
    tcp_nodelay off;
    break;
}

location ~* /(.+)\.(png|gif|jpg|jpeg|swf|ico)\/[a-zA-Z0-9-]\/$ {
    access_log off;
    expires 30d;
    add_header Pragma public;
    add_header Cache-Control "public";
    tcp_nodelay off;
    break;    
}

相关内容