请帮助我解决此问题。我有调整拇指大小的Nginx。我的问题是当我请求名称中带有符号的图像时,出现错误。例如,如果我请求:
http://example.com/thumbs/_default_upload_bucket/75/75/test+.jpg
然后我得到错误415 Unsupported Media Type.
并且在错误日志中我看到
[error] 509#509: *62531 open() "/var/www/html/assets/_default_upload_bucket/test%2B.jpg" failed (2: No such file or directory)
为什么会这样,我该如何解决。这是我的nginx配置。请帮我。谢谢。
location ~* /thumbs/(.*)/(\d+)/(\d+)/(.*)$ {
set $bucket $1;
set $width $2;
set $height $3;
set $filename $4;
try_files /$1/$2/$3/$4 @images;
root /var/www/html/tmp/image-thumbnails;
expires 2w;
access_log off;
}
location @images {
root /var/www/html/assets/;
rewrite ^.*$ /$bucket/$filename break;
image_filter_buffer 50M;
image_filter resize $width $height;
}
答案 0 :(得分:1)
该问题似乎源于set $filename $4;
语句。 $filename
变量变为URL编码,这阻止Nginx查找正确的文件。
您可以通过使用命名捕获来避免使用set
指令。
例如:
location ~* /thumbs/(?<bucket>.*)/(?<width>\d+)/(?<height>\d+)/(?<filename>.*)$ {
try_files /$1/$2/$3/$4 @images;
...
}
location @images {
rewrite ^.*$ /$bucket/$filename break;
...
}
作为rewrite...break
的替代方法,您还可以使用try_files /$bucket/$filename =404;
,它可能更有效,并且与上一个块中的实现相匹配。