Configurer haproxy pour renvoyer un 204 pour une certaine correspondance ACL

8

Je veux renvoyer un code d'erreur HTTP 204 si quelqu'un essaie d'accéder à un chemin particulier sur mon serveur Web. Je pourrais définir un de mes serveurs Web pour renvoyer une erreur 204 et pointer haproxy en tant que backend. Cependant, étant donné qu'aucune information n'est envoyée, j'ai pensé que cela devrait être possible à partir du haproxy lui-même. Pas besoin de déranger mes serveurs Web réels.

J'ai essayé de créer un backend qui générerait l'erreur 204 comme suit:

frontend ...
    ...
    acl is_always204 path_beg /thisone
    use_backend always204 if is_always204
    ...

backend always204
    errorfile 404 /etc/haproxy-shared/errors/204.http

Le fichier 204.http contient:

HTTP/1.0 204 No Content Cache-Control: no-cache Connection: close Content-Type: image/png

Lorsque je démarre haproxy, j'obtiens cette erreur:

parsing [/etc/haproxy/haproxy:51] : status code 404 not handled, error customization will be ignored.

Je pense que je vais peut-être y aller dans le mauvais sens. Quelqu'un peut-il suggérer un moyen de forcer haproxy à renvoyer un 204 pour un match acl donné?

TomOnTime
la source
2
Avez-vous essayé d'en faire le 503fichier d'erreur? Il n'y a pas de serveurs backend réels, donc HAproxy devrait servir la 503réponse.
Felix Frank
Pensez-vous qu'un 204 est le code d'état correct pour cette situation? Selon la documentation HAProxy , 204 et 404 ne sont pas des codes de retour pris en charge. Il semble que cela puisse vouloir renvoyer un 403 . 204 suggère que la demande a été remise au serveur.
Anthony Fammartino
1
Intéressant. Content-Typen'a aucun sens dans ce contexte, mais il n'y a vraiment pas assez d'informations ici pour comprendre quel est le contexte. Bien sûr, HTTP 204 est rarement utilisé de toute façon. Mon sentiment à propos de 204 est que le serveur d'origine devrait probablement l'envoyer, s'il y a un scénario où son utilisation a du sens.
Michael Hampton

Réponses:

2

Comme mentionné dans les commentaires, vous ne pouvez pas spécifier de fichier d'erreur pour 404, car HAProxy ne générera jamais de 404. Vous devez utiliser quelque chose comme 503, qu'HAProxy émet réellement et possède un fichier d'erreur configurable. Votre fichier 204 peut être utilisé tel quel, remplacez simplement 503 par 204 dans votre configuration.

dglloyd
la source