J'utilise nginx / ruby-on-rails et j'ai un simple formulaire en plusieurs parties pour télécharger des fichiers. Tout fonctionne bien jusqu'à ce que je décide de limiter la taille maximale des fichiers que je souhaite télécharger. Pour ce faire, j'ai défini le nginx client_max_body_size
sur 1 m (1 Mo) et j'attends un statut HTTP 413 (Request Entity Too Large) en réponse lorsque cette règle se rompt.
Le problème est que lorsque je télécharge un fichier de 1,2 Mo, au lieu d'afficher la page d'erreur HTTP 413, le navigateur se bloque un peu puis meurt avec un message «La connexion a été réinitialisée pendant le chargement de la page».
J'ai essayé à peu près toutes les options proposées par nginx, rien ne semble fonctionner. Quelqu'un a-t-il des idées à ce sujet?
Voici mon 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;
}
}
Merci.
**Edit**
Environnement / UA: Windows XP / Firefox 3.6.13
la source
Content-Length
plutôt que de faireTransfer-Encoding: chunked
.Expect
la voie à suivre pour les demandes importantes.request.setHeader(HttpHeaders.EXPECT, CONTINUE);
avecimport org.apache.http.HttpHeaders;
etimport static org.jboss.netty.handler.codec.http.HttpHeaders.Values.CONTINUE;
Votre téléchargement meurt-il à la toute fin? 99% avant de s'écraser? Le corps du client et les tampons sont essentiels car nginx doit tamponner les données entrantes. Les configurations du corps (données du corps de la requête) spécifient comment nginx gère le flux en vrac de données binaires à partir de clients à formulaires en plusieurs parties dans la logique de votre application.
Le
clean
paramètre libère de la mémoire et des limites de consommation en demandant à nginx de stocker le tampon entrant dans un fichier, puis de nettoyer ce fichier ultérieurement du disque en le supprimant.Set
body_in_file_only
declean
tampons pour le régler etclient_max_body_size
. La configuration d'origine de la question avait déjà sendfile activé, augmentez également les délais d'expiration. J'utilise les paramètres ci-dessous pour résoudre ce problème, appropriés dans vos contextes de configuration, de serveur et http locaux.la source
openshift
php7
nginx
.De la documentation :
Je soupçonne que c'est ce qui se passe, si vous inspectez le HTTP dans les deux sens en utilisant des outils tels que Firebug ou Live HTTP Headers (les deux extensions Firefox), vous pourrez voir ce qui se passe réellement.
la source