Nginx规则配置问题:Querystring转带文件路径(适配S3)
Nginx配置修正:Querystring转路径适配S3存储
问题分析
当前配置里的rewrite .* /bucket-media/$w1/$uri break;会导致路径重复拼接——$uri本身包含/bucket-media/1111111_0.jpg,重写后路径变成/bucket-media/large//bucket-media/1111111_0.jpg,S3无法识别该格式,最终导致文件名丢失,仅匹配到/bucket-media/large/目录。
修正配置方案
修改rewrite规则,通过正则捕获请求中的文件名部分,再与size参数拼接成正确路径:
set $bucket "s3-storage"; location /bucket-media/ { # 直接用内置变量$arg_size获取size参数,无需额外正则匹配 if ($arg_size) { # 捕获/bucket-media/之后的文件名部分,拼接到size对应目录下 rewrite ^/bucket-media/(.*)$ /bucket-media/$arg_size/$1 break; } proxy_intercept_errors on; resolver 8.8.8.8; proxy_pass https://$bucket$uri; error_page 404 = @fallback; } location @fallback { proxy_intercept_errors on; proxy_pass http://other-backend/internal/images/missing/?file_name=$uri; }
关键改动说明
- 利用Nginx内置变量
$arg_size直接获取size参数,简化配置逻辑 - 正则
^/bucket-media/(.*)$精准捕获/bucket-media/后的文件名(如1111111_0.jpg),重写后生成正确路径/bucket-media/large/1111111_0.jpg - 彻底避免原配置中$uri重复拼接导致的路径错误
内容的提问来源于stack exchange,提问作者s2nner
相关产品推荐
相关产品推荐

