为什么 nginx 会删除 URL 中的 /?

为什么 nginx 会删除 URL 中的 /?

我们使用 nginx 作为 play framework 1.2.7 服务器的代理。play framework 中的一些路由使用 <.*> 通配符,此处讨论的路由如下所示

GET     /media/{bucket}/{id}/inline/{<.*>config}    MediaCtl.getMediaInlineImgIx

配置可以包含一个 http 服务器,但出于某种原因,nginx 会删除 http:// 中的一个 / 。例如:

13:07:59,299 INFO  [play] ~ Anonymous Guest ~ MediaCtl.getImgIx(): config {"w":100,"h":65,"origin":"http:/localhost:8080","fit":"max"}

当通过 localhost:8080 使用 nginx 时。当直接调用 localhost:9010 时,我得到

13:19:25,648 INFO  [play] ~ Anonymous Guest ~ MediaCtl.getImgIx(): config {"w":100,"h":65,"origin":"http://localhost:9010","fit":"max"}

我没有在 access.log 或 error.log 中看到与似乎发生的 URL 混淆相关的消息。有什么关于如何修复此问题的建议吗?

答案1

nginx 默认合并 URL 中的斜杠,参见:http://nginx.org/en/docs/http/ngx_http_core_module.html#merge_slashes

您必须使用:merge_slashes off;

相关内容