azure - 如何调试 Apache 中损坏的响应 header ?

标签 azure apache docker http webdav

我们正在尝试使用 Azure 文件存储后端让 Webdav 在 Kubernetes 中运行,该后端安装在 /dav/data 上的容器中。 。容器本身运行 Alpine Linux 3.12.1,我们在其中安装所有必需的 Apache 软件包。

当不安装此存储或使用不同的存储后端时,一切都很好。但是,当安装 Azure 文件存储时,东西开始损坏。

上传文件没有问题,但下载则不行;大多数软件都会提示无效的 HTTP header /响应。当进一步调查这个问题时,我发现标题的开头似乎被切断了。

正确响应的示例 header (通过不安装卷获得):

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

错误响应的示例 header :

s: bytes
Content-Length: 985
Connection: close

一切都到第一个sAccept-Ranges header 似乎在某个地方被吃掉了。响应末尾似乎还有一些额外的空字节。

为了弄清楚这一点,我尽可能多地研究了日志记录,并偶然发现了 DumpIO 模块,它允许我记录响应 header 和正文。由于某种原因,加载此模块,设置 DumpIOOutput OnLogLevel dumpio:trace7实际上解决了问题。响应 header 很好,响应正文也正是您所期望的。这让我发疯。

我怀疑 Apache 和已安装卷之间的交互导致了某种奇怪的缓冲区/窗口问题,但我无法弄清楚是什么。

我们已经更改了用于该卷的存储后端,但我仍然很想知道导致此问题的原因。

我还能够在 Docker 中本地重现此内容。

最佳答案

将 AKS 群集从 1.17 升级到 1.18 后遇到完全相同的问题。 header 格式错误。尝试更新到较新的 Apache 版本但不起作用。暂时从 azureFile 切换到 azureDisk,这样就可以了!将看看我是否可以为此创建 AKS 错误报告

关于azure - 如何调试 Apache 中损坏的响应 header ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65092742/

相关文章:

azure - "No mapping between account names and security IDs was done."连接到 Azure 托管实例

Azure CLI : associate network security group (NSG) with Virtual Network subnet

linux - Zend Framework 2 中公用文件夹的最佳设置是什么?

windows - 如何在 Windows 容器的 dockerfile 中设置系统路径?

java - 使用 docker stack 部署时 Hazelcast 节点未发现其他节点

azure - 在 IIS 中托管 ASP Net Core 应用程序时无限页面加载

azure - 创建CSP AAD并更改用户密码

apache - HTaccess 重定向正在将查询添加到 URL 末尾

jquery - IE6 下的 AJAX 极其缓慢

docker - Jenkins 作业终止后清理孤立的 docker 容器