用于LiipImagineBundle图像的Nginx访问日志

时间:2013-06-04 19:26:18

标签: symfony nginx liipimaginebundle

我在Symfony2 2.1.10安装中安装了LiipImagineBundle,我的nginx服务器遇到了一些配置问题。在网上,我发现this nice snippet是Symfony2应用程序的一个非常简单的nginx配置。我添加了一些代码行。最重要的是,我希望能够为图像等静态文件禁用access.log。 以下规则集运行良好:

location ~* \.(?:ico|css|js|gif|jpe?g|png)$ {
    expires 30d;
    add_header Pragma public;
    add_header Cache-Control "public, must-revalidate, proxy-revalidate";
    access_log off;
}

但今天我发现LiipImagineBundle生成的图像需要通过app.phpapp_dev.php访问。否则他们不会生成,nginx会记录以下错误消息:

[error] 28988#0: *733 open() "/[...].jpeg" failed (2: No such file or directory)

Wich基本上是404.文件没有生成,因为它不是通过Symfony2应用程序访问的,而是直接访问。

我需要一个配置,允许我禁用访问日志记录并向静态文件添加一些缓存标头,但仍然通过与以前相同的路由为它们提供服务。 有没有可能的解决方案呢?

1 个答案:

答案 0 :(得分:4)

问题解决了。我创建了一个与机器人app.php / app_dev.phppng|jp[e]g|gif等匹配的正则表达式。现在,图片会根据请求进行缓存。如果未生成图像,则服务器会使用201 Created进行响应,然后使用200 Ok304 Not Modified进行响应,具体取决于是否先缓存它。 这是我对应的nginx配置:

location ~ ^/(app_dev|app)\.php(.*?)\.(?:ico|gif|jpe?g|png)$ {
    expires 18h;
    add_header Cache-Control "public, must-revalidate, proxy-revalidate";
    access_log off;

    # still redirect because we are using LiipImagineBundle!
    include fastcgi_params;
    fastcgi_pass unix:/tmp/php5-fpm.sock;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    fastcgi_param HTTPS off;
}

# more static files:
location ~* \.(?:css|js)$ {
    expires 18h;
    add_header Cache-Control "publi, must-revalidate, proxy-revalidate";
    access_log off;
}

location ~ ^/(app_dev|app)\.php$ {
    include fastcgi_params;
    fastcgi_pass unix:/tmp/php5-fpm.sock;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    fastcgi_param HTTPS off;
}

我希望这会有所帮助。