Vraag Forceer HTTPS met AWS Elastische load balancer


Ik moet alle inkomende HTTP-verkeer omleiden naar HTTPS op mijn elastische load balancer.

Ik ben moe met behulp van Apache mod_rewrite:

 RewriteEngine On
 RewriteCond %{HTTP:X-Forwarded-Proto} !https
 RewriteRule !/status https://%{SERVER_NAME}%{REQUEST_URI} [L,R]

Gebruikmakend van de X-Forwarded-Proto-header toegevoegd door de load balancer, moet deze regel de browser van de gebruiker opdracht geven om de HTTPS-versie van dezelfde URL aan te vragen.

Tot nu toe werkt het niet (er vindt geen omleiding plaats).

Wat doe ik verkeerd?

Is er een betere manier om dit te doen?

BEWERK:

Dit werkte uiteindelijk:

RewriteEngine On
RewriteCond %{HTTP:X-Forwarded-Proto} !=https
RewriteRule ^/(.*)$ https://%{SERVER_NAME}/$1 [R=301,L]

7
2017-11-29 10:40


oorsprong




antwoorden:


Dus ik neem aan dat je de ELB hebt ingesteld om verkeer op zowel HTTP / 80 als HTTPS / 443 te accepteren, maar alles naar HTTP door te sturen.

Als u uw methode wilt gebruiken (wat handig is), weet u zeker wat u krijgt %{X-Forwarded-Proto} -- de HTTP: voorvoegsel lijkt vreemd voor mij. Anders dan dat, ziet dit er goed uit voor mij.

Als dit zich in een virtuele host of de hoofdserver bevindt en het werkt nog steeds niet, kunt u dit toevoegen

RewriteLog rewrite-log
RewriteLogLevel 3

kijk dan in het bestand rewrite-log om te zien wat er daadwerkelijk aan de hand is. Dit bestand kan ongelooflijk uitgebreid zijn, beginnen met lagere niveaus. Loggen kan niet gestart worden vanuit .htaccess bestanden.

(Ik zou willen voorstellen dat je de vlaggen maakt op de RewriteRule  [R=301,L] waardoor de server een 301-antwoord terugstuurt, wat de zoekmachines vertelt om de omleiding permanent te overwegen en de links dienovereenkomstig bij te werken.)


5
2017-11-29 20:13



Bedankt voor het antwoord. Het lijkt erop dat de [R = 301, L] deel uitmaakte van de oplossing. - panos2point0
Ik ben blij dat je iets hebt gevonden dat werkte, maar de vlaggen [L,R] zou goed moeten zijn anders dan de naakten R geeft een http 302-status terug. De volgorde van vlaggen zou er niet toe doen. Waarschijnlijker is het iets over de verandering in de RewriteRule wat op 2 manieren anders is 1) het zal http-verzoeken niet herschrijven naar /status meer, en 2) het maakt gebruik van een capture-groep en een back-reference ((.*) dan $1) in plaats van de %{REQUEST_URI} variabel. Het zou voor anderen nuttig kunnen zijn om te zien of de vlaggen echt de oorzaak waren, of misschien was het iets anders. - Tom Harrison Jr
Ik denk dat ik het heb beperkt tot het gebruik van! = In plaats van! - panos2point0
HTTP: X-Forwarded-Proto en X-Forwarded-Proto werkten beide voor mij. - jaredsten


Wilde gewoon mijn ervaring toevoegen terwijl ik urenlang worstelde voordat ik me realiseerde dat mijn heartbeat-bestand een niet-gearceerde punt bevatte (/alive.html). Duh.

Het tweede probleem was dat het hoofddomein niet omleidde, maar bestanden wel. Zo http://domain.com/hello.html was door te sturen naar https://domain.com/hello.html, maar http://domain.com was niet.

Dit is wat ik in mijn .htaccess-bestand heb geplaatst dat voor mij werkte:

RewriteEngine On
# SSL connection forced
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteCond %{REQUEST_URI} !^/alive\.html$
RewriteRule ^.*$ https://%{SERVER_NAME}%{REQUEST_URI} [R=301,L]

1
2017-08-13 05:02





In mijn geval bleek het probleem dat de! Https-voorwaarde de gezondheidscontrole overtrof.

het wijzigen van de voorwaarde in ^ http $ heeft het gelukt

RewriteCond %{HTTP:X-Forwarded-Proto} ^http$

vond dat hier: https://forums.aws.amazon.com/thread.jspa?messageID=641930


1
2017-10-18 22:51