J'ai Puma en cours d'exécution en tant que serveur d'applications en amont et Riak en tant que cluster de base de données d'arrière-plan. Lorsque j'envoie une demande qui réduit par mappage un morceau de données pour environ 25K utilisateurs et le renvoie de Riak à l'application, j'obtiens une erreur dans le journal Nginx:
amont expiré (110: connexion expirée) lors de la lecture de l'en-tête de réponse depuis l'amont
Si j'interroge mon amont directement sans proxy nginx, avec la même requête, j'obtiens les données requises.
Le délai d'expiration de Nginx survient une fois le proxy installé.
**nginx.conf**
http {
keepalive_timeout 10m;
proxy_connect_timeout 600s;
proxy_send_timeout 600s;
proxy_read_timeout 600s;
fastcgi_send_timeout 600s;
fastcgi_read_timeout 600s;
include /etc/nginx/sites-enabled/*.conf;
}
**virtual host conf**
upstream ss_api {
server 127.0.0.1:3000 max_fails=0 fail_timeout=600;
}
server {
listen 81;
server_name xxxxx.com; # change to match your URL
location / {
# match the name of upstream directive which is defined above
proxy_pass http://ss_api;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_cache cloud;
proxy_cache_valid 200 302 60m;
proxy_cache_valid 404 1m;
proxy_cache_bypass $http_authorization;
proxy_cache_bypass http://ss_api/account/;
add_header X-Cache-Status $upstream_cache_status;
}
}
Nginx a un tas de directives de temporisation. Je ne sais pas si je rate quelque chose d'important. Toute aide serait très appréciée....
Réponses:
Cela se produit parce que votre amont prend trop de temps pour répondre à la demande et NGINX pense que l'amont a déjà échoué dans le traitement de la demande, il répond donc avec une erreur. Incluez et augmentez simplement proxy_read_timeout dans le
location
bloc de configuration. La même chose m'est arrivée et j'ai utilisé un délai d'attente d'une heure pour une application interne au travail:Avec cela, NGINX attendra une heure (3600s) pour que son amont renvoie quelque chose.
la source
proxy_read_timeout
dans la section http peut ne pas aider. J'ai laproxy_pass
directive dans la section emplacement et c'est seulement là que leproxy_read_timeout
réglage a fait une différence. (nginx 1.16.0)Vous devriez toujours vous abstenir d'augmenter les délais d'expiration, je doute que le temps de réponse de votre serveur backend soit le problème ici dans tous les cas.
J'ai contourné ce problème en effaçant l'indicateur de maintien de la connexion et en spécifiant la version http selon la réponse ici: https://stackoverflow.com/a/36589120/479632
Malheureusement, je ne peux pas expliquer pourquoi cela fonctionne et je n'ai pas réussi à le déchiffrer à partir des documents mentionnés dans la réponse liée non plus, donc si quelqu'un a une explication, je serais très intéressé de l'entendre.
la source
proxy_read_timeout
si vous savez que le proxy (même pour une URL spécifique) nécessitait plus de temps de traitement?$http_host
droit? Je suppose que cela ne volerait pas pour https. Il se peut que des paramètres supplémentaires soient également nécessaires pour le proxy des requêtes https.Déterminez d'abord quel en amont ralentit en consultant le fichier journal des erreurs nginx et ajustez le délai de lecture en conséquence dans mon cas, c'était fastCGI
Je dois donc ajuster le fastcgi_read_timeout dans la configuration de mon serveur
Voir: article original
la source
Dans votre cas, cela aide un peu d'optimisation dans le proxy, ou vous pouvez utiliser "# paramètres de délai d'attente"
la source
proxy_pass
dans la section emplacement .Je pense que cette erreur peut se produire pour diverses raisons, mais elle peut être spécifique au module que vous utilisez. Par exemple, j'ai vu cela en utilisant le module uwsgi, donc j'ai dû définir "uwsgi_read_timeout".
la source
Je recommanderais de regarder le
error_logs
, en particulier à la partie en amont où il montre en amont spécifique qui expire.Ensuite, en fonction de cela, vous pouvez ajuster
proxy_read_timeout
,fastcgi_read_timeout
ouuwsgi_read_timeout
.Assurez-vous également que votre configuration est chargée.
Plus de détails ici Nginx en amont a expiré (pourquoi et comment corriger)
la source
Comme beaucoup d'autres l'ont souligné ici, augmenter les paramètres de délai d'expiration pour NGINX peut résoudre votre problème.
Cependant, augmenter vos paramètres de délai d'expiration n'est peut-être pas aussi simple que la plupart de ces réponses le suggèrent. J'ai moi-même rencontré ce problème et essayé de modifier mes paramètres de délai d'expiration dans le fichier /etc/nginx/nginx.conf , comme presque tout le monde dans ces fils le suggère. Cela ne m'a pas aidé du tout; il n'y avait aucun changement apparent dans les paramètres de délai d'expiration de NGINX. Maintenant, plusieurs heures plus tard, j'ai finalement réussi à résoudre ce problème.
La solution réside dans ce fil de discussion du forum , et ce qu'il dit, c'est que vous devez mettre vos paramètres de délai d'expiration dans /etc/nginx/conf.d/timeout.conf (et si ce fichier n'existe pas, vous devez le créer). J'ai utilisé les mêmes paramètres que ceux suggérés dans le fil:
la source
J'ai eu le même problème et j'ai abouti à une erreur «tous les jours» dans le contrôleur de rails. Je ne sais pas pourquoi, mais en production, puma exécute l'erreur encore et encore provoquant le message:
amont expiré (110: connexion expirée) lors de la lecture de l'en-tête de réponse depuis l'amont
Probablement parce que Nginx essaie de récupérer les données de puma encore et encore.
Vérifiez votre fichier log / puma.stderr.log pour voir si tel est le cas.
la source
De notre côté, il utilisait spdy avec proxy cache. Lorsque le cache expire, nous obtenons cette erreur jusqu'à ce que le cache ait été mis à jour.
la source
J'espère que cela aide quelqu'un: j'ai rencontré cette erreur et la cause était une mauvaise autorisation sur le dossier du journal pour phpfpm, après l'avoir modifié pour que phpfpm puisse y écrire, tout allait bien.
la source
Pour le
proxy_upstream
délai d'attente, j'ai essayé le paramètre ci-dessus mais cela n'a pas fonctionné.Le réglage a
resolver_timeout
fonctionné pour moi, sachant qu'il fallait 30 secondes pour produire le message de délai d'attente en amont. Par exemple, me.atwibble.com n'a pas pu être résolu (110: opération expirée) .http://nginx.org/en/docs/http/ngx_http_core_module.html#resolver_timeout
la source