使用带有 mod_proxy 的 Apache 将多部分表单数据发布到混合实例时出现问题

使用带有 mod_proxy 的 Apache 将多部分表单数据发布到混合实例时出现问题

我正在尝试在本地机器上尽可能地模拟我网站的生产环境。这是一个 rails 站点,它使用 Apache w/mod_proxy 将请求转发到 mongrel 集群。在我的 Mac OSX Leopard 机器上,我默认安装了 apache 并配置了一个 vhost 以使用 mod_proxy 将请求转发到端口 3000 上本地运行的 mongrel 实例。

<Proxy balancer://mongrel_cluster-development>
BalancerMember http://127.0.0.1:3000
</Proxy>

在大多数情况下,这都运行良好。我可以使用我配置的 vhost 的 ServerName 浏览我的开发站点,并可以确认请求已正确转发到 mongrel 实例。但是,站点上有一个页面,其中包含用于将图像上传到服务器的多部分表单。当我发布此表单时,大约有 5 分钟的延迟,浏览器最终返回

Bad Request
Your browser sent a request that this server could not understand.

在我的虚拟主机的错误日志中:

[Tue Sep 22 09:47:57 2009] [error] (70007)The timeout specified has expired: proxy: prefetch request body failed to 127.0.0.1:3000 (127.0.0.1) from ::1 ()

如果我直接浏览 mongrel 实例,这个表单就可以正常工作(http://127.0.0.1:3000)。有人知道问题可能是什么以及如何解决它吗?如果我忽略了任何重要信息,请发表评论,我可以补充这个问题。

注意:经过进一步调查,这似乎是 Safari 特有的问题。该表单在 Firefox 中运行正常。

答案1

我认为该问题是由 cookie 标头长度限制引起的。

‘RFC 2109’ 的 cookie 标头限制如下:

  • 至少 300 个 Cookie
  • 每个 cookie 至少 4096 字节
  • 每个唯一主机或域名至少 20 个 cookie

当 Safari 发送较大的 cookie 标头时,Apache 无法解析它。您可能需要使用 tcpmon(或类似方法)检查​​会话标头。

相关内容