2016-10-26 4 views
0

Ich habe eine Umgebung für Lastenausgleich auf AWS von Elastic Beanstalk angetrieben. Das SSL-Zertifikat wird auf dem Lastenausgleich angewendet. Um https-Weiterleitungen zu erzwingen, habe ich die akzeptierten andswer in diesem Beitrag Redirect to https through url rewrite in IIS within elastic beanstalk's load balancer gefolgt. Dies sind exakt die Codezeilen, die ich in web.config geschrieben habenIIS gezwungen https Umleitung verursacht 503 Fehler

<rewrite> 
    <rules> 
    <rule name="Force Https" stopProcessing="true"> 
     <match url="healthcheck.html" negate="true" /> 
     <conditions> 
     <add input="{HTTP_X_FORWARDED_PROTO}" pattern="https" negate="true" /> 
     </conditions> 
     <action type="Redirect" url="https://{HTTP_HOST}{REQUEST_URI}" redirectType="Permanent" /> 
    </rule> 
    </rules> 
</rewrite> 

Aber dies bewirkt, dass die Umwelt Gesundheit innerhalb von 5 Minuten rot werden, der veröffentlichen und Website beginnt 503 eine Fehlermeldung. Wenn ich sie entferne, dann gibt es keine Fehler. Bitte helfen Sie mir, diese Bedrohung zu beheben, damit die https-Weiterleitung erfolgreich ist. In den ersten 5 Minuten nach der Veröffentlichung werden http-Anforderungen erfolgreich an https weitergeleitet. Erst danach beginnt der Fehler 503 zu kommen.

Antwort

1

Wenn Ihr ELB den HTTP-Statuscode 503 meldet, bedeutet dies normalerweise, dass keine fehlerfreien EC2-Instanzen dahinter stehen.

Siehe Toubleshooting Führung ELB: http://docs.aws.amazon.com/elasticloadbalancing/latest/classic/ts-elb-error-message.html#ts-elb-errorcodes-http503

So, jetzt ist die Frage, warum ?

Im Grunde schlägt Ihre Gesundheitsprüfung fehl.

In diesem Code-Ausschnitt, den Sie eingefügt haben, erzwingen Sie eine HTTP-HTTPS-Umleitung aller Anforderungen mit Ausnahme von healthcheck.html. Die Idee ist, dass dieser einzelne Ausschluss Ihr Gesundheitscheck sein sollte.

dieses Problem zu beheben:

  1. Vergewissern Sie sich ein Gesundheits-Check auf Ihrer EC2-Instanz haben, die 200 zurückgibt, wenn die EC2-Instanz direkt über HTTP zu schlagen. Der Gesundheitscheck muss zurückgeben, sonst wird der ELB die Prüfung nicht bestehen und Ihre EC2-Instanz wird als ungesund angesehen.

  2. Stellen Sie sicher, dass Ihre ELB-konfigurierte Integritätsprüfung mit dem EC2-Instanz-Health-Check-Pfad übereinstimmt. Fügen Sie einen führenden / am Anfang des Health-Check-Pfades ein.

  3. Setzen Sie den Health Check-Pfad in Ihre <rewrite> Regel und lassen Sie die führende / weg. Sie können am Anfang eine ^ und am Ende eine $ setzen, da es sich um einen Regex-Vergleich handelt.

Wenn der Wert in der <rewrite> Regel nicht die tatsächliche Gesundheitscheck in Ihrem ELB paßt, dann ELB eine HTTP auf HTTPS-Antwort umleiten erhalten wird, die ein Fehler betrachtet.

+0

Hallo Matt, envurl/healthcheck.html gibt 404 Fehler zurück, selbst wenn die Umgebung hoch ist. Ich habe auch versucht, diese Linie von der Regel zu entfernen, hilft immer noch nicht. –

+0

Ihr Problem ist also, dass "/ healthcheck.html" 404 zurückgibt. Sie benötigen eine Systemintegritätsprüfung, die 200 zurückgibt. Also (a) Was ist die ordnungsgemäße Zustandsprüfung Ihrer EC2-Instanz? (b) Setzen Sie das in Ihre ELB-Konfiguration und (c) Setzen Sie das in die '' Regel. –

+0

Ich habe die Antwort angepasst, um das Problem besser anzugehen. –