nginx envoyer des réponses vierges 200

19

Je configure un serveur de basculement chargé d'accepter toute demande entrante et de répondre avec une réponse vide de 200. L'idée est de minimiser le temps de réponse et de s'assurer que nous n'envoyons aucun 40x ou 50x.

J'ai essayé d'utiliser return 200;pour les emplacements souhaités dans Nginx, mais mes systèmes de surveillance (Pingdom) n'ont pas aimé la réponse et considèrent que le serveur ne répond pas.

Y a-t-il une meilleure façon de le faire, bien sûr avec un minimum de surcharge sur le serveur?

Sparsh Gupta
la source

Réponses:

23

Le code d'état HTTP 204 No Contentest censé dire "J'ai terminé la demande, mais il n'y a pas de corps à renvoyer":

10.2.5 204 Aucun contenu

Le serveur a répondu à la demande mais n'a pas besoin de renvoyer un corps d'entité et peut vouloir renvoyer une métainformation mise à jour. La réponse PEUT inclure une métainformation nouvelle ou mise à jour sous la forme d'en-têtes d'entité qui, s'ils sont présents, DEVRAIENT être associés à la variante demandée.

Si le client est un agent utilisateur, il NE DEVRAIT PAS changer sa vue de document de celle qui a provoqué l'envoi de la demande. Cette réponse est principalement destinée à permettre la saisie des actions sans effectuer de modification de la vue active du document de l'agent utilisateur, bien que toute métainformation nouvelle ou mise à jour DEVRAIT être appliquée au document actuellement dans la vue active de l'agent utilisateur.

La réponse 204 NE DOIT PAS inclure de corps de message et est donc toujours terminée par la première ligne vide après les champs d'en-tête.

Alexander Azarov
la source
Bonjour Alex Merci pour la note. Je me demande simplement si le code de réponse 204 est reconnu par tous les principaux navigateurs de nos jours. c'est-à-dire si mon serveur commence à envoyer 204 autour, y a-t-il une probabilité que certains visiteurs (à travers les navigateurs, mobiles, terminaux) obtiennent une erreur?
Sparsh Gupta
1
@SparshGupta Je ne suis pas un expert en compatibilité de navigateur, désolé. J'ai effectué une vérification rapide dans quelques navigateurs (FF 7 et Safari sous Mac OSX) - ils ne font absolument rien. Par exemple, si une page est déjà ouverte, vous mettez une URL renvoyant 204 dans la barre d'adresse et appuyez sur Entrée, les deux navigateurs affichent toujours cette page précédente.
Alexander Azarov,
30

Vous pouvez demander à nginx de renvoyer un HTTP 200 vide par un bloc de configuration comme:

location = /health {
  return 200;
  #access_log off;
}

Vous pouvez décommenter la access_logligne si vous ne souhaitez pas que tous ces contrôles de santé soient enregistrés.

Cody Caughlan
la source
6
Il convient de noter que le signe «=» après l'emplacement est important. Sans lui, ce fichier doit exister, sinon nginx ne retournera pas 200. Avec lui, vous pouvez simplement créer n'importe quel emplacement que vous voulez et ne pas vous soucier des fichiers et nginx retournera avec plaisir 200.
Florin Andrei
Comment combiner cela avec l'authentification de base, de telle sorte que la demande authentifiée renvoie 200 et 401 non authentifiée?
Kiril