Obecnie ponownie konfiguruję HAProxy przy użyciu 1.5dev-17. Chciałbym zwrócić błąd 404, gdy nie ma zaplecza do użycia dla konkretnego żądania.
Nasza obecna konfiguracja korzysta z default_backend do trasowania do naszych serwerów aplikacji django, ale gdy istnieje wiele żądań sondowania (takich jak test testowy), które nie pasują do żadnego z innych skonfigurowanych backendów, nasze serwery django zostają zatrzymane podczas próby do obsługi tych nieprawidłowych żądań, ostatecznie zwracając 404.
Chciałbym podać 404 z HAProxy zamiast delegować do backendów django. Obecnie osiągam to dzięki hackowi:
frontend www
...
default_backend nomatch
backend nomatch
errorfile 503 /var/www/http/404.http
A w pliku 404.http ustawiam kod stanu 404 w nagłówkach. To działa, ale wydaje się bardzo złe. Czy jest lepszy sposób na osiągnięcie tego z HAProxy? A może powinienem używać zwykłego backendu i pozwolić temu uchwytowi odpowiadać za pomocą 404?
źródło
HTTP/1.0 404 Not Found
a następnie kilka innych nagłówków, następnie pusty wiersz, a następnie<html>
treść.Odpowiedzi:
Jeśli nie masz nic przeciwko jednemu z następujących kodów odpowiedzi: 200, 400, 403, 405, 408, 429, 500, 502, 503 lub 504.
Następnie możesz zrobić coś takiego:
http-request
: http://cbonte.github.io/haproxy-dconv/1.7/configuration.html#4-http-requesterrorfile
: http://cbonte.github.io/haproxy-dconv/1.7/configuration.html#errorfileźródło
Po tym, jak chciałem czegoś podobnego, wpadłem na to samo. Źle się wydawało, ale działa bardzo dobrze w praktyce i jest znacznie czystsze niż próba umieszczenia na czarnej liście konkretnych adresów URL. Pamiętaj tylko, aby zostawić komentarz, aby nikt nie natknął się na niego, uważając go za niepoprawny.
źródło