Apache使用mod_proxy和大文件返回502 Bad Gateway

时间:2012-03-30 09:38:55

标签: apache proxy mod-proxy

通过使用Mongoose网络服务器将配置为代理的Apache发送到本地应用程序时,我发现了一个问题。

我的设置:

  

Apache(端口80)< - > mod_proxy< - >猫鼬(港口9090)

mod_proxy配置为将某些URL从端口80传输到localhost:9090。

Mongoose只接受经过身份验证的回复。这适用于正常(小)请求。使用大文件传输时,Apache会返回502 Bad Gateway响应。

发生的事情(好吧,实际上只是我对发生的事情的分析)是当我们的客户端(.net客户端,期望100启用)尝试发送文件时,它会发送标题,然后直接跟随文件的内容。 / p>

Mongoose接收传输的标头,检测到它未经过身份验证并返回401 Unauthorized并关闭连接。现在,Apache(仍在接收和处理文件传输)无法再转发数据并返回502 Bad Gateway(代理服务器从上游服务器收到无效响应)。

当在外部接口上嗅探时,我看到.net客户端发送了标题,然后在20毫秒内通过内容发送,而没有收到100继续。当接收完成时,Apache返回502。

当嗅探内部接口时,我看到标题和正文被合并为一个16384字节的tcp包。 Mongoose用401回复几毫秒并关闭连接。

看起来Apache检测到连接的关闭但忽略了401并且没有转发它。是否有可能让Apache正确转发401而不是回复502?

目前,如果检测到401,我将应用程序更改为仅读取连接中的所有数据,但这只是一种解决方法,因为这归结为发送完整文件两次。由于文件可能是几百兆字节,这可能会给我们的系统带来很大的压力。

我们在ARM系统上使用Apache 2.2.9(Debian)。

1 个答案:

答案 0 :(得分:4)

您可能遇到过这里提交的Apache错误https://bz.apache.org/bugzilla/show_bug.cgi?id=55433

相关链接:

PS:我遇到了同样的问题,而且它是一个不起眼的错误(无论是查找信息还是bug本身)。 FWIW,nginx没有表现出相同的行为。