У нас есть настройка веб-портала на платформе Java Spring. Он работает на сервере приложений Tomcat. Портал обслуживается через веб-сервер apache, подключенный к tomcat через соединитель JK. Весь портал поддерживает HTTPS, используя 443 порт apache. Версия Apache: Apache / 2.4.2 (Unix). это последняя стабильная версия веб-сервера Apache.
Всякий раз, когда мы пытаемся загрузить на портал файлы размером более 128 КБ, мы сталкиваемся с ошибкой 413:
Request Entity Too Large The requested resource /teamleadchoachingtracking/doFileUpload does not allow request data with POST requests, or the amount of data provided in the request exceeds the capacity limit.
В журнале ошибок apache мы получаем следующие ошибки:
AH02018: request body exceeds maximum size (131072) for SSL buffer
AH02257: could not buffer message body to allow SSL renegotiation to proceed
Мы провели поиск в Google, и были предложения установить SSLRenegBufferSize как какое-то высокое значение, например 10 МБ. Основываясь на этих предложениях, мы поместили следующую запись в раздел virtualhost конфигурационного файла httpd:
<Directory "/teamleadchoachingtracking/doFileUpload/">
SSLRenegBufferSize 10486000
</Directory>
Но по-прежнему ошибка сохраняется. Также мы не указали SSLVerifyClient none, но повторное согласование все еще происходит.
Это очень непоследовательная и неприятная ошибка. Любая помощь будет принята с благодарностью. Спасибо заранее.
Мне удалось решить эту проблему, поместив определенную конфигурацию в файл apache httpd.conf. Вот пример конфигурации:
<Location "/calibration">
SSLRenegBufferSize 10486000
</Location>
Раньше я не давал правильную конфигурацию. Ключ - это точное местоположение URL-адреса, которое вызывает ошибку http 413. В директиве location необходимо указать точное местоположение URL. SSLRenegBufferSize - это параметр, который указывает максимальный размер буфера в байтах на случай повторного согласования. Я установил 10 МБ. По умолчанию Apache составляет 128 КБ.
Эта проблема возникает во время повторного согласования SSL. Помимо установки очень большого размера буфера повторного согласования в Apache, у вас есть еще несколько вариантов:
Насколько я видел на своем сервере ubuntu 14.04 / apache 2.4, если вы используете .htaccess
конфигурация apache, SSLVerifyDepth
параметр также запускает обновление SSL даже если SSLVerifyClient
является none
. Используя SSLVerifyDepth
строка конфигурации также обойти SSLRenegBufferSize
стоимость вы могли установить для этого каталога и всех подкаталогов.
Есть кое-что о разнице между использованием SSLVerifyDepth
в контексте сервера и в контексте каталога в документация. Таким образом, я предполагаю, что это проблемное поведение будет таким же, как и с <directory>
строки конфигурации. После внимательного прочтения в документе также говорится, что этот параметр заставит отступника ...
Это решение сработало для меня:
положить SSLVerifyDepth
в вашем основном ssl.conf
или в конфигурации вашего виртуального хоста, SSLVerifyDepth 5
должны соответствовать подавляющему большинству цепочек сертификатов основных поставщиков сертификатов.
положить SSLRenegBufferSize
нужного размера в .htaccess
или в <directory>
конфигурация для каждого каталога.