![使用带有 mod_proxy 的 Apache 将多部分表单数据发布到混合实例时出现问题](https://linux22.com/image/494366/%E4%BD%BF%E7%94%A8%E5%B8%A6%E6%9C%89%20mod_proxy%20%E7%9A%84%20Apache%20%E5%B0%86%E5%A4%9A%E9%83%A8%E5%88%86%E8%A1%A8%E5%8D%95%E6%95%B0%E6%8D%AE%E5%8F%91%E5%B8%83%E5%88%B0%E6%B7%B7%E5%90%88%E5%AE%9E%E4%BE%8B%E6%97%B6%E5%87%BA%E7%8E%B0%E9%97%AE%E9%A2%98.png)
我正在尝试在本地机器上尽可能地模拟我网站的生产环境。这是一个 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(或类似方法)检查会话标头。