У меня есть небольшой проект Django (1.2.x), развернутый на Apache (2.x) через mod_wsgi (3.x). В админке, если я загружу файл размером <1 МБ, я могу его пройти; однако для файла размером, скажем, 1,2 МБ я получаю ответ 400 от сервера с "Ошибка 400"только в теле. Мне интересно, почему это происходит. Насколько я понимаю, нет LimitRequestBody
установлен в конфигурации Apache. Я пробовал загружать файлы в нескольких браузерах, включая Firefox, Chrome и Safari.
В файле журнала для Apache, по-видимому, нет записи для запросов, которые дали ответ об ошибке 400. Это странно.
Я должен отметить, что сценарий, в котором это происходит, выглядит следующим образом: рассматриваемый проект развертывается на двух идентичных серверах Apache (полностью идентичная установка), которые находятся за балансировщик нагрузки. В моей настройке разработки, конечно, проблема не возникает.
Мы будем очень благодарны за любую помощь в этом вопросе.
ОБНОВИТЬ: Я обнаружил, что для балансировщика нагрузки регистрируется следующее сообщение об ошибке: Bad request headers : Content-length exceeds post body limit
. Другой интересный момент заключается в том, что если файл размером> 1 МБ загружается по HTTPS, он проходит нормально. Однако при загрузке через HTTP выдает ошибку 400.
ОБНОВЛЕНИЕ # 2: Я решил написать простую программу для загрузки файлов, используя просто Python и web.py. Я получил его для развертывания на производственном сервере в тех же конфигурациях виртуального хоста под mod_wsgi
. Загрузка файлов работала, когда приложение обслуживалось через SSL. Но они дали Error 400
когда они обслуживались без SSL. Так что я еще более озадачен, чем раньше.
Я сам отвечу на этот вопрос, так как проблема решена. Большое спасибо обоим Редмумба и Грэм Дамплтон за их комментарии.
Проблема, конечно, была не в Django (как мы уже установили). Однако оказалось, что не с Apache. Проблема заключалась в брандмауэре в системе, о котором системные администраторы полностью забыли (вздох). Судя по всему, брандмауэр ограничивал размер файла в 1 МБ.