Я запускаю nginx / ruby-on-rails, и у меня есть простая составная форма для загрузки файлов. Все работает нормально, пока я не решу ограничить максимальный размер загружаемых файлов. Для этого я установил nginx client_max_body_size
на 1 м (1 МБ) и ожидаю в ответ статус HTTP 413 (Request Entity Too Large), когда это правило нарушается.
Проблема в том, что когда я загружаю файл размером 1,2 МБ, вместо отображения страницы с ошибкой HTTP 413 браузер немного зависает, а затем умирает с сообщением «Соединение было сброшено во время загрузки страницы».
Я пробовал практически все варианты, которые предлагает nginx, похоже, ничего не работает. Есть у кого-нибудь идеи по этому поводу?
Вот мой nginx.conf:
worker_processes 1;
timer_resolution 1000ms;
events {
worker_connections 1024;
}
http {
passenger_root /the_passenger_root;
passenger_ruby /the_ruby;
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 80;
server_name www.x.com;
client_max_body_size 1M;
passenger_use_global_queue on;
root /the_root;
passenger_enabled on;
error_page 404 /404.html;
error_page 413 /413.html;
}
}
Спасибо.
**Edit**
Среда / UA: Windows XP / Firefox 3.6.13
источник
Content-Length
а не делаетTransfer-Encoding: chunked
.Expect
это способ справиться с большими запросами.request.setHeader(HttpHeaders.EXPECT, CONTINUE);
сimport org.apache.http.HttpHeaders;
иimport static org.jboss.netty.handler.codec.http.HttpHeaders.Values.CONTINUE;
Ваша загрузка умирает в самом конце? 99% до краха? Тело клиента и буферы являются ключевыми, потому что nginx должен буферизовать входящие данные. Конфигурации тела (данные тела запроса) указывают, как nginx обрабатывает массовый поток двоичных данных от клиентов с несколькими частями в логику вашего приложения.
Эта
clean
настройка освобождает память и ограничения потребления, давая nginx команду сохранять входящий буфер в файле, а затем очищать этот файл с диска, удаляя его.Набор
body_in_file_only
дляclean
и настройки буферов дляclient_max_body_size
. В исходной конфигурации вопроса уже был включен файл отправки, увеличьте время ожидания. Я использую настройки ниже, чтобы исправить это, подходящее для вашей локальной конфигурации, сервера и контекстов http.источник
openshift
php7
nginx
.Из документации :
Я подозреваю, что это именно то, что происходит, если вы проверяете HTTP туда-сюда с помощью таких инструментов, как Firebug или Live HTTP Headers (оба расширения Firefox), вы сможете увидеть, что происходит на самом деле.
источник