Ubuntu 如何处理nginx中的特殊符号
请帮我解决这个问题。我有一个可以调整拇指大小的nginx。我的问题是,当我请求名称中带有符号的图像时,我得到了错误。例如,如果我请求:Ubuntu 如何处理nginx中的特殊符号,ubuntu,nginx,Ubuntu,Nginx,请帮我解决这个问题。我有一个可以调整拇指大小的nginx。我的问题是,当我请求名称中带有符号的图像时,我得到了错误。例如,如果我请求: http://example.com/thumbs/_default_upload_bucket/75/75/test+.jpg 然后我得到错误415不支持的媒体类型。在错误日志中我看到 [error] 509#509: *62531 open() "/var/www/html/assets/_default_upload_bucket/test%2B.jpg
http://example.com/thumbs/_default_upload_bucket/75/75/test+.jpg
然后我得到错误415不支持的媒体类型。
在错误日志中我看到
[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;
}
问题似乎源于
设置$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;
...
}
location~*/thumbs/(?.*)/(?\d+)/(?\d+)/(?.*)${
try_files/$1/$2/$3/$4@images;
...
}
位置@图像{
重写^.*$/$bucket/$filename break;
...
}
作为rewrite…break
的替代方法,您还可以使用try_files/$bucket/$filename=404
可能更有效,并与上一块中的实现相匹配。问题似乎源于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;
...
}
location~*/thumbs/(?.*)/(?\d+)/(?\d+)/(?.*)${
try_files/$1/$2/$3/$4@images;
...
}
位置@图像{
重写^.*$/$bucket/$filename break;
...
}
作为rewrite…break
的替代方法,您还可以使用try_files/$bucket/$filename=404代码>这可能更有效,并且与上一块中的实现匹配