Назад | Перейти на главную страницу

Проблема с отправкой данных многостраничной формы с использованием Apache с mod_proxy в экземпляр mongrel

Я пытаюсь максимально точно смоделировать производственную среду своего сайта на своем локальном компьютере. Это сайт rails, который использует Apache w / mod_proxy для пересылки запросов в кластер mongrel. На моем компьютере Mac OSX Leopard у меня есть установка apache по умолчанию, и я настроил vhost для использования mod_proxy для пересылки запросов на локальный запущенный экземпляр mongrel на порту 3000.

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

По большей части это работает нормально. Я могу просматривать свой сайт разработки, используя 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.

Я думаю, что эта проблема связана с ограничением длины заголовка cookie.

Ограничение RFC 2109 для заголовка cookie приведено ниже:

  • минимум 300 файлов cookie
  • не менее 4096 байт на файл cookie
  • не менее 20 файлов cookie на каждый уникальный хост или доменное имя

Когда через какое-то время Safari отправляет большой заголовок cookie, Apache не может его проанализировать. Возможно, вам придется проверить заголовок сеанса с помощью tcpmon (или подобного).