Nginx, Rails et Oauth. connexion fermée prématurément en amont

J’ai un problème étrange qui apparaît dans l’environnement de production uniquement lorsque j’utilise nginx et unicorn. Lorsque j’utilise Licorne sans nginx, cela ne se produit pas.

Le problème. J’ai une simple authentification oauth qui permet aux utilisateurs de s’inscrire via GitHub. Après avoir appuyé sur “autoriser” sur la page d’autorisation de GitHub, l’utilisateur est redirigé vers l’itinéraire de rappel. Et puis, il / elle obtient 302 Bad Gateway erreur 302 Bad Gateway . Le journal Nginx me montre cette erreur (les clés sont remplacées par “…”)

2012/12/26 18:03:08 [erreur] 1467 # 0: * 1 connexion fermée prématurément en amont lors de la lecture de l’en-tête de réponse en amont, client: 10.0.2.2, serveur: _, requête: “GET / auth / github / callback ? code = & state = … HTTP / 1.1 “, en amont:” http: // unix: /tmp/unicorn.tm.sock: / auth / github / callback? code = … & state = … “, hôte: “localhost: 3000”

C’est ma configuration nginx.

 upstream unicorn { server unix:/tmp/unicorn.tm.sock fail_timeout=0; } server { listen 80 default deferred; client_max_body_size 4G; server_name _; keepalive_timeout 75s; proxy_connect_timeout 60s; proxy_read_timeout 60s; root /vagrant/public; try_files $uri/index.html $uri.html $uri @app; location @app { proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; proxy_redirect off; proxy_pass http://unicorn; proxy_buffer_size 16k; proxy_busy_buffers_size 16k; } error_page 500 502 503 504 /500.html; } 

Donc, ma question est la suivante: pourquoi cela se produit-il et y a-t-il une solution possible?

Je l’ai googlé pendant un moment, mais sans chance.

mettre à jour

Merci pour le commentaire, je viens d’essayer de définir fail_timeout=30s et cela aide, mais la demande prend environ 40 fail_timeout=30s . Mais merci quand même, je vais essayer d’expérimenter avec ces parameters.

J’ai mis à jour un peu ma configuration, selon les suggestions, mais j’obtiens quand même la même erreur.

En outre, il s’agit du journal des erreurs Licorne. On dirait que ça tue la demande qui prend plus de 30 ans mais je suppose que la redirection du site oauth ne peut pas être aussi longue …

 (github) Request phase initiated. (github) Callback phase initiated. E, [2012-12-26T19:33:13.058183 #6002] ERROR -- : worker=0 PID:6005 timeout (31s > 30s), killing E, [2012-12-26T19:33:13.067011 #6002] ERROR -- : reaped # worker=0 I, [2012-12-26T19:33:13.067198 #6002] INFO -- : worker=0 spawning... I, [2012-12-26T19:33:13.068631 #6012] INFO -- : worker=0 spawned pid=6012 I, [2012-12-26T19:33:13.068726 #6012] INFO -- : Refreshing Gem list I, [2012-12-26T19:33:17.140948 #6012] INFO -- : worker=0 ready 

configuration de licorne

 rails_env = ENV['RAILS_ENV'] || 'production' worker_processes 1 listen "/tmp/unicorn.tm.sock", :backlog => 64 listen 8080, :tcp_nopush => true timeout 30 pid "/tmp/unicorn.pid" stderr_path "/tmp/unicorn.log" stdout_path "/tmp/unicorn.log" check_client_connection false 

 ERROR -- : worker=0 PID:6005 timeout (31s > 30s), killing 

Il va sans dire que vous avez juste besoin d’un délai d’installation supérieur à 30 dans votre configuration Licorne.

Essayez au moins

 timeout 60 

http://unicorn.bogomips.org/Unicorn/Configurator.html#method-i-timeout