【发布时间】:2021-03-13 12:09:52
【问题描述】:
我们正在尝试使用 Azure 文件存储后端让 Webdav 在 Kubernetes 中运行,该后端安装在 /dav/data 上的容器中。容器本身正在运行 Alpine Linux 3.12.1,我们正在其中安装所有必需的 Apache 软件包。
当不安装此存储或使用不同的存储后端时,一切都很好。但是,在挂载 Azure 文件存储时,东西开始出现问题。
上传文件没有问题,但下载没有;大多数软件抱怨无效的 HTTP 标头/响应。在进一步调查时,我发现标题的开头似乎被切断了。
正确响应的示例标头(通过未安装卷获得):
HTTP/1.1 200 OK
Date: Tue, 01 Dec 2020 13:54:53 GMT
Server: Apache/2.4.46 (Unix)
Last-Modified: Tue, 01 Dec 2020 13:51:02 GMT
ETag: "bla"
Accept-Ranges: bytes
Content-Length: 985
Connection: close
错误响应的示例标头:
s: bytes
Content-Length: 985
Connection: close
Accept-Ranges 标头中第一个 s 之前的所有内容似乎都在某处被吃掉了。响应末尾似乎还有一些额外的空字节。
为了深入了解这一点,我尽可能多地研究了日志记录,并偶然发现了 DumpIO 模块,它允许我记录响应标头和正文。出于一些的原因,加载这个模块,设置DumpIOOutput On 和LogLevel dumpio:trace7 实际上解决了这个问题。响应标头很好,响应正文正是您所期望的。这让我发疯了。
我怀疑 Apache 和挂载卷之间的交互会导致某种奇怪的缓冲区/窗口问题,但我无法弄清楚是什么。
我们已经更改了用于卷的存储后端,但我仍然很想知道是什么导致了这个问题。
我还能够在 Docker 中本地重现此内容。
【问题讨论】:
标签: azure apache docker http webdav