我在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.php
或app_dev.php
访问。否则他们不会生成,nginx会记录以下错误消息:
[error] 28988#0: *733 open() "/[...].jpeg" failed (2: No such file or directory)
Wich基本上是404.文件没有生成,因为它不是通过Symfony2应用程序访问的,而是直接访问。
我需要一个配置,允许我禁用访问日志记录并向静态文件添加一些缓存标头,但仍然通过与以前相同的路由为它们提供服务。 有没有可能的解决方案呢?
答案 0 :(得分:4)
问题解决了。我创建了一个与机器人app.php
/ app_dev.php
和png|jp[e]g|gif
等匹配的正则表达式。现在,图片会根据请求进行缓存。如果未生成图像,则服务器会使用201 Created
进行响应,然后使用200 Ok
或304 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;
}
我希望这会有所帮助。