Dans mon cas, j'étais impatient et j'ai fini par mal interpréter le journal.
En fait, le vrai problème était la communication entre nginx et uwsgi, et non entre le navigateur et nginx. Si j'avais chargé le site dans mon navigateur et que j'avais attendu assez longtemps, j'aurais obtenu un "504 - Bad Gateway". Mais cela a pris tellement de temps que j'ai continué à essayer des trucs, puis à rafraîchir dans le navigateur. Je n'ai donc jamais attendu assez longtemps pour voir l'erreur 504. Lors de l'actualisation dans le navigateur, la demande précédente est fermée et Nginx l'écrit dans le journal sous la forme 499.
Élaboration
Je supposerai ici que le lecteur en sait aussi peu que moi lorsque j'ai commencé à jouer.
Ma configuration comprenait un proxy inverse, le serveur nginx, et un serveur d'applications, le serveur uWSGI, derrière lui. Toutes les demandes du client allaient au serveur nginx, puis étaient transmises au serveur uWSGI, et la réponse était renvoyée de la même manière. Je pense que c'est ainsi que tout le monde utilise nginx/uwsgi et est censé l'utiliser.
Mon nginx fonctionnait comme il le devait, mais quelque chose clochait avec le serveur uwsgi. Il y a deux façons (peut-être plus) dont le serveur uwsgi peut ne pas répondre au serveur nginx.
1) uWSGI dit, "Je suis en train de traiter, attendez et vous obtiendrez bientôt une réponse". nginx a une certaine période de temps, qu'il est prêt à attendre, fx 20 secondes. Après cela, il répondra au client avec une erreur 504.
2) uWSGI est mort, ou uWSGI meurt alors que nginx l'attend. nginx le voit tout de suite et dans ce cas, il renvoie une erreur 499.
Je testais ma configuration en faisant des requêtes dans le client (navigateur). Dans le navigateur, rien ne se passait, tout restait en suspens. Après environ 10 secondes (moins que le délai d'attente), j'ai conclu que quelque chose n'allait pas (ce qui était vrai) et j'ai fermé le serveur uWSGI à partir de la ligne de commande. Ensuite, je me suis rendu dans les paramètres uWSGI, j'ai essayé quelque chose de nouveau, puis j'ai redémarré le serveur uWSGI. Dès que je fermais le serveur uWSGI, le serveur nginx renvoyait une erreur 499.
J'ai donc continué à déboguer avec l'erreur 499, ce qui signifie que je dois chercher l'erreur 499 sur Google. Mais si j'avais attendu assez longtemps, j'aurais eu l'erreur 504. Si j'avais obtenu l'erreur 504, j'aurais été en mesure de mieux comprendre le problème, puis de déboguer.
La conclusion est donc que le problème venait de l'uWGSI, qui restait en suspens ("Attendez un peu plus longtemps, juste un peu plus longtemps, puis j'aurai une réponse pour vous...").
Comment j'ai réparé que problème, je ne me souviens pas. Je suppose que ça peut être causé par beaucoup de choses.