server nginx sur https en utilisant toutes les poignées de files disponibles (upd: boucle infinie?)

J'ai donc un server nginx qui travaille sur https avec Sinatra. Lorsque j'essaie de download un file jnlp dans une configuration qui fonctionne bien sur Mongrel et http (no s), le server nginx ne parvient pas à servir le file avec une erreur 504. La vérification ultérieure des journaux indique que cette erreur est due au débordement du nombre disponible de poignées de files, c'est-à-dire "24: trop de files ouverts". Fonctionnement

sudo lsof -p <nginx worker pid> 

obtient une énorme list de files, tous comme:

 nginx 1771 nobody 11u IPv4 10867997 0t0 TCP localhost:44704->localhost:https (ESTABLISHED) nginx 1771 nobody 12u IPv4 10868113 0t0 TCP localhost:https->localhost:44704 (ESTABLISHED) nginx 1771 nobody 13u IPv4 10868114 0t0 TCP localhost:44705->localhost:https (ESTABLISHED) nginx 1771 nobody 14u IPv4 10868191 0t0 TCP localhost:https->localhost:44705 (ESTABLISHED) nginx 1771 nobody 15u IPv4 10868192 0t0 TCP localhost:44706->localhost:https (ESTABLISHED) nginx 1771 nobody 16u IPv4 10868255 0t0 TCP localhost:https->localhost:44706 (ESTABLISHED) nginx 1771 nobody 17u IPv4 10868256 0t0 TCP localhost:44707->localhost:https (ESTABLISHED) nginx 1771 nobody 18u IPv4 10868330 0t0 TCP localhost:https->localhost:44707 (ESTABLISHED) nginx 1771 nobody 19u IPv4 10868331 0t0 TCP localhost:44708->localhost:https (ESTABLISHED) nginx 1771 nobody 20u IPv4 10868434 0t0 TCP localhost:https->localhost:44708 (ESTABLISHED) 

L'augmentation du nombre de files pouvant être ouverts n'est pas utile, car alors nginx souffle juste après cette limite. Et pas étonnant, il semble que ce soit dans une sorte de boucle pour tirer tous les files disponibles.

Une idée de ce qui se passe et comment le réparer?

EDIT: nginx 0.7.63, ubuntu linux, sinatra 1.0

EDIT 2: Voici le code offensant. C'est sinatra servant jnlp, que j'ai finalement compris:

 get '/uploader' do #read in the launch.jnlp file theJNLP = "" File.open("/launch.jnlp", "r+") do |file| while theTemp = file.gets theJNLP = theJNLP + theTemp end end content_type :jnlp theJNLP end 

Si je le fais avec Sinatra via Mongrel et http, tout fonctionne bien. Si je desservis cela avec Sinatra et nginx via https, je reçois l'erreur ci-dessus. Toutes les autres parties du site semblent être équivalentes.

EDIT: J'ai depuis mis à niveau vers le passager 2.2.14, ruby ​​1.9.1, nginx 0.8.40, openssl 1.0.0a, et aucun changement.

EDIT: Le coupable semble être des redirections infinies en raison de l'utilisation de SSL. Je ne sais pas comment réparer cela, autrement que d'héberger le file jnlp dans le directory racine du server (ce que je préfère ne pas faire, car il me limite à une application jnlp à la fois).

Les lignes pertinentes de nginx.conf:

 # HTTPS server # server { listn 443; server_name MyServer.org root /My/Root/Dir; passenger_enabled on; expires 1d; proxy_set_header X-FORWARDED_PROTO https; proxy_set_header X_FORWARDED_PROTO https;#the almighty google is not clear on which to use location /upload { proxy_pass https://127.0.0.1:443; } } 

Ce qui est drôle à propos de cela, c'est d'abord que je mettais le jnlp dans un directory appelé 'uploader', et non 'upload', mais cela semblait encore triggersr le problème, puisque cette directive proxy_pass apparaissait dans les journaux. Deuxièmement, à nouveau, le déplacement de la jnlp dans la racine a évité le problème, car il n'y avait aucun de ces proxying en raison de ssl.

Alors, comment puis-je éviter la boucle proxy_pass infinie dans nginx?

nginx écoute sur le port 443. Lorsque vous obtenez une request pour /uploader , vous êtes proxy pour … port 443. C'est nginx. Il semble que vous devriez proxying à votre application sinatra, qui écoute sur un autre port? Je ne connais pas bien Nginx, mais ça n'a pas l'air correct.