【问题标题】:How do I debug broken response headers in Apache?如何在 Apache 中调试损坏的响应标头?
【发布时间】: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 OnLogLevel dumpio:trace7 实际上解决了这个问题。响应标头很好,响应正文正是您所期望的。这让我发疯了。

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

我们已经更改了用于卷的存储后端,但我仍然很想知道是什么导致了这个问题。

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

【问题讨论】:

    标签: azure apache docker http webdav


    【解决方案1】:

    如果您还没有遇到罪魁祸首(或者其他任何人在像我一样使用谷歌搜索时遇到这个问题)。问题在于 Apache 的 EnableMMAP 设置。

    解决方案:在您的 Apache conf 中,设置 EnableMMAP off

    来源:

    https://cloudiseasy.com/2021/06/13/deploying-apache-server-on-aks-with-azure-files/

    https://httpd.apache.org/docs/2.4/mod/core.html#enablemmap

    Apache is adding header to images resulting in corrupting images

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-04-12
        • 1970-01-01
        • 2016-08-09
        • 1970-01-01
        • 2012-10-16
        • 1970-01-01
        相关资源
        最近更新 更多