Używam nginx / ruby-on-rails i mam prosty formularz wieloczęściowy do przesyłania plików. Wszystko działa dobrze, dopóki nie zdecyduję się ograniczyć maksymalnego rozmiaru plików, które chcę przesłać. Aby to zrobić, ustawiłem nginx client_max_body_size
na 1 m (1 MB) i oczekuję statusu HTTP 413 (żądanie zbyt dużej jednostki) w odpowiedzi, gdy ta reguła zostanie złamana.
Problem polega na tym, że kiedy przesyłam plik o rozmiarze 1,2 MB, zamiast wyświetlać stronę błędu HTTP 413, przeglądarka trochę się zawiesza, a następnie umiera z komunikatem „Połączenie zostało zresetowane podczas ładowania strony”.
Wypróbowałem prawie każdą opcję, którą oferuje nginx, nic nie wydaje się działać. Czy ktoś ma jakieś pomysły na ten temat?
Oto mój 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;
}
}
Dzięki.
**Edit**
Środowisko / UA: Windows XP / Firefox 3.6.13
źródło
Content-Length
raczej wysyła niż robiTransfer-Encoding: chunked
.Expect
to, że jest to dobry sposób na duże żądania.request.setHeader(HttpHeaders.EXPECT, CONTINUE);
zimport org.apache.http.HttpHeaders;
iimport static org.jboss.netty.handler.codec.http.HttpHeaders.Values.CONTINUE;
Czy przesyłanie umiera na samym końcu? 99% przed awarią? Treść klienta i bufory są kluczem, ponieważ nginx musi buforować przychodzące dane. Konfiguracje treści (dane treści żądania) określają, w jaki sposób nginx obsługuje zbiorczy przepływ danych binarnych z klientów wieloczęściowych do logiki aplikacji.
To
clean
ustawienie zwalnia pamięć i limity zużycia, instruując nginx, aby przechowywał przychodzący bufor w pliku, a następnie wyczyścił ten plik później z dysku, usuwając go.Ustaw
body_in_file_only
sięclean
i dostosować buforów dlaclient_max_body_size
. Konfiguracja pierwotnego pytania miała już włączony plik send, zwiększ również limity czasu. Używam poniższych ustawień, aby to naprawić, odpowiednie w kontekście lokalnej konfiguracji, serwera i http.źródło
openshift
php7
nginx
.Z dokumentacji :
Podejrzewam, że tak właśnie się dzieje, jeśli sprawdzisz HTTP tam iz powrotem za pomocą narzędzi takich jak Firebug lub Live HTTP Headers (oba rozszerzenia Firefox), będziesz mógł zobaczyć, co naprawdę się dzieje.
źródło