Ubuntu22下Nginx 1.23.0含空格路径缩略图生成失败问题
解决Nginx 1.23.0中含空格图片路径生成缩略图返回400的问题
问题核心
从Ubuntu 16(Nginx 1.16)升级到Ubuntu 22后,若将Nginx升级至1.23.0,含空格的图片路径请求会返回400 Bad Request,仅在localhost日志有记录,主站日志无条目;无空格路径正常。Ubuntu 22默认的Nginx 1.18.0可正常处理该场景,降级到1.18.0能解决问题,但该版本已停止安全支持。
排查与解决方向
检查Nginx URI处理配置变化
Nginx 1.23.x版本可能调整了URI解析的默认规则,重点检查以下配置:merge_slashes:确保该指令设置为on(默认值),若配置中有自定义URI处理逻辑,需确认是否影响空格解析。- 排查
disable_symlinks等路径限制类指令,确认是否对含空格的路径产生额外拦截。
修复配置中的路径编码处理
如果缩略图生成依赖proxy_pass或fastcgi_pass,需确保请求中的空格已被正确编码为%20,且Nginx在传递上游请求时保留编码状态。示例配置:location /thumbnail/ { set $original_uri $uri; # 保留原始编码路径,避免空格被解码后破坏上游请求 proxy_pass http://thumbnail-backend$original_uri; # 针对fastcgi场景可替换为: # fastcgi_param REQUEST_URI $original_uri; }验证1.22.x版本兼容性
若暂无法直接安装1.22.0,可通过Docker快速测试该稳定分支(仍有安全更新):# 挂载本地Nginx配置,启动1.22.0容器测试 docker run -d -p 8080:80 -v /your/local/nginx.conf:/etc/nginx/nginx.conf nginx:1.22.0测试含空格的图片路径请求,确认是否为1.23.x独有的版本问题。
开启详细日志定位问题
在主站server块中添加详细日志格式,对比空格路径请求的解析差异:log_format detailed '$remote_addr [$time_local] "$request" ' '$status "$request_uri" "$uri"'; access_log /var/log/nginx/main-detailed.log detailed;查看日志中
$request_uri(原始请求URI)和$uri(Nginx解析后URI)的差异,确认是否存在空格被异常截断或解码的情况。
内容的提问来源于stack exchange,提问作者John Mellor
相关产品推荐
相关产品推荐

