ubuntu - 如何处理 nginx 中的特殊符号
问题描述
请帮我解决这个问题。我有调整拇指大小的 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;
}
解决方案
问题似乎源于该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;
它可能更有效并与前一个块中的实现相匹配。
推荐阅读
- android - React-Native:react-native-webview 如何在后台工作?
- sql-server - 全部在存储过程中的事务中
- c# - 如何在 Asp .Net 5 的控制器外使用 ApplicationDbContext
- c# - 使用 dotnet publish .NET 5 和 win-x64 时出现错误“NU1101:无法找到包 xyz”
- c# - 使用 PropertyChanged 事件创建自定义 ConfigurationElement
- python - 使用嵌套循环最小化 Python 代码占用空间
- react-native - React-Testing-Library/Jest-Dom - 接收到的值必须是 HTMLElement 或 SVGElement
- intellij-idea - HSQLDB 选择在 intellij IDEA 中显示没有数据
- session - 如果我们有传输层(在 osi 模型中),为什么我们需要两个会话层?
- reactjs - 使用 typescript 编写 Reducer。我该如何纠正错误?