Wie sollte ich meine ELB-Integritätsprüfung konfigurieren, wenn ich NameVirtualHosts verwende und zu www umleitung?

8

Meine ELB nimmt meine Instanzen weiterhin außer Betrieb, da die HTTP-Integritätsprüfung fehlschlägt.

Wir haben einen DNS-Platzhalter und leiten alles an www weiter:

vhost.conf:

ServerName www.example.com
ServerAlias *.example.com
RewriteEngine on
RewriteCond %{HTTP_HOST} !^www\.example\.com$ [NC]
RewriteRule ^ http://www.example.com/$1 [R=301,L]

Dies funktioniert gut für tatsächliche Browser, aber die HTTP-Integritätsprüfung schlägt fehl, vermutlich weil sie eine 302 erhält.

Ist die beste Option, um eine TCP-Integritätsprüfung zu verwenden, oder gibt es eine Möglichkeit, HTTP zum Laufen zu bringen?

chris
quelle
Verwenden Sie einfach eine TCP-Integritätsprüfung, bis AWS das Anpassen des für die Integritätsprüfung gesendeten Host-Headers ermöglicht. Selbst mit einem Standardeintrag auf Ihrem Webserver überprüfen Sie nicht den Zustand Ihrer App, sondern nur Ihren Webserver. Dies entspricht in etwa der Überprüfung, ob der TCP-Port geöffnet ist.
Pykler

Antworten:

11

Diese Frage wurde in den AWS-Foren gestellt. Die Antwort bestand darin, einen Standard-vhost einzurichten, der den Datenverkehr auf der bloßen IP-Adresse verarbeitet und keine Weiterleitungen durchführt. Dies bedeutet, dass normale Benutzer, die Ihre IP-Adresse erreicht haben, ebenfalls nicht umgeleitet werden.

Sie können alternativ den Pfadteil der URL angeben, den die ELB anfordern soll, und diesen Pfad ignorieren, indem Sie eine weitere RewriteCond hinzufügen:

RewriteCond %{HTTP_HOST} !^www\.example\.com$ [NC]
RewriteCond %{REQUEST_URI} !^/health-check$
RewriteRule ^ http://www.example.com/$1 [R=301,L]

Normale Benutzer, die diese URL erreichen, werden nicht umgeleitet.

Sie können dieselbe Technik auch verwenden, um den User-Agent der ELB zu erkennen.

RewriteCond %{HTTP_HOST} !^www\.example\.com$ [NC]
RewriteCond %{HTTP_USER_AGENT} !^ELB-HealthChecker
RewriteRule ^ http://www.example.com/$1 [R=301,L]

Normale Benutzer, die ihren User-Agent fälschen, werden nicht umgeleitet.

Oder die interne IP-Adresse der ELB.

RewriteCond %{HTTP_HOST} !^www\.example\.com$ [NC]
RewriteCond %{REMOTE_ADDR} !^10\.
RewriteRule ^ http://www.example.com/$1 [R=301,L]

Damit diese Option funktioniert, müssen Sie entweder mod_rpaf(für Apache 2.2) oder mod_remoteip(für Apache 2.4) die REMOTE_ADDRVariable so ändern , dass sie den richtigen Teil des Inhalts des X-Forwarded-ForHeaders enthält. Solange Sie dies richtig eingerichtet haben, sollte es einem normalen Benutzer nicht möglich sein, die Umleitungsantwort zu vermeiden.

Ladadadada
quelle
Das Problem beim Einrichten eines Standard-vhost besteht darin, dass sich die IP-Adresse jedes Mal ändert, wenn eine neue Instanz gestartet oder neu gestartet wird, und ich möchte, dass mein Standard-AMI die Integritätsprüfung unterstützt. Ich werde die anderen Optionen untersuchen.
Chris
Die von mir eingeschlossene IP-Adressprüfung prüft nur, mit welcher IP-Adresse begonnen wird 10.. Der Rest der Teile der IP-Adresse kann sich beliebig ändern und wird trotzdem abgeglichen. Der 10.*.*.*IP-Adressbereich (oder 10.0.0.0/8) kann nicht über das Internet weitergeleitet werden.
Ladadadada
Ich verwende bereits die Remote-IP, um die IP-Adresse des Anforderers zu protokollieren (im Gegensatz zur ELB-IP), sodass die dritte Option funktioniert hat - danke!
chris
0

Das Hinzufügen von virtuellen Hosts ist keine gute Idee, da der httpd-Dienst neu gestartet werden muss, damit virtuelle Hosts wiedergegeben werden. Es gibt eine alternative Möglichkeit, dies zu tun

  1. Ignorieren Sie den ELB Health Check-Pfad in der .htaccess-Datei.
    Trennen Sie alle vier Teile des
    DNS- Namens wie folgt : elb_dns_name: elb-name.subnet_zone.elb.amazonaws.com
  2. Für alle verbleibenden URLs gelten interne Umschreiberegeln.
    Verzeichnisstruktur: Codeordner / Website

    RewriteEngine On
    RewriteCond% {HTTP_HOST}! $ [NC]
    RewriteCond% {REQUEST_URI}! ^ / Index.php $
    RewriteRule ^ (. *) $ / $ 1 [L, QSA]

Das hat bei mir sehr gut funktioniert. Bitte schlagen Sie vor, wenn es bessere Methoden gibt Prost!

Ravibalgi
quelle