大家好,
为了即时调整图像大小,我决定使用Kraken或imgix等服务。
我的图像将显示为:site.com/img/path-to-img-s250x250.jpg
我想实现的是:如果图像path-to-img-s250x250.jpg
存在,那么我将显示它,如果不存在,则运行nginx重写规则以调整原始图像的大小并保存。
这可能吗?还是应该使用PHP进行检查?
关于如何更好地动态调整图像大小,您还有更好的主意吗?
非常感谢
location /img/ {
try_files $uri @getImg @resize;
}
location @getImg{
rewrite "img/(.*)/([a-z0-9]+)-([0-9]+)x([0-9]+).([0-9]{5}).(jpg|jpeg|png|gif|ico)$" /img/$1/$2-$3x$4.$6 break;
}
location @resize{
rewrite "img/(.*)/([a-z0-9]+)-([0-9]+)x([0-9]+).([0-9]{5}).(jpg|jpeg|png|gif|ico)$" $scheme://$host/image?path=$1&file=$2&ext=$6&w=$3&h=$4 break;
}
这是图像链接:site.com/img/prods/1002/filename-200x200.12345.jpg
12345用于版本控制
答案 0 :(得分:2)
您可以使用try_files
测试一个或多个文件的存在。有关详细信息,请参见this document。
使用正则表达式 location
捕获URI的元素。正则表达式的位置是按顺序评估的,因此配置文件中的位置可能很重要。有关详细信息,请参见this document。
如果try_files
语句的最终参数是URI。它将生成一个内部重定向。
例如:
location ~ "^/img/(.*)/([a-z0-9]+)-([0-9]+)x([0-9]+)\.([0-9]{5})\.(jpg|jpeg|png|gif|ico)$" {
try_files $uri /img/$1/$2-$3x$4.$6 /image?path=$1&file=$2&ext=$6&w=$3&h=$4;
}
以上内容不能单独使用,因为许多PHP脚本使用最初请求的URI(REQUEST_URI
)来确定路由。
您可以创建一个自定义位置来显式设置REQUEST_URI
和SCRIPT_FILENAME
参数。
例如:
location = /image {
include fastcgi_param;
fastcgi_pass ...;
fastcgi_param SCRIPT_FILENAME $document_root/index.php;
fastcgi_param REQUEST_URI $uri$is_args$args;
}
基于您现有的代码(以上只是一个猜测)而建立此块。我们首先包含全局配置文件,然后覆盖SCRIPT_FILENAME
和REQUEST_URI
。我假设index.php
正在处理/image
路由。