Apache http zu https umleiten mit Rewrite

3953
Drew

Verwendung von Apache 2.4 unter OS X Yosemite. Benötigen Sie diese virtuellen Host ändern, um es umzuleiten http://server.kibanaund http://www.server.kibanazuhttps://server.kibana

Hier ist der Vhost:

<VirtualHost *:8443> ServerName www.server.kibana ServerAlias server.kibana ServerAdmin admin@server.kibana # RedirectPermanent http://server.kibana https://server.kibana # DocumentRoot /usr/local/var/www/kibana-4.0.2-darwin-x64/src/public SSLEngine on SSLCertificateFile "/usr/local/etc/apache2/2.4/ssl-keys/server.crt" SSLCertificateKeyFile "/usr/local/etc/apache2/2.4/ssl-keys/server.key" # # Proxy # ProxyRequests Off <Proxy *> Order Allow,Deny Allow from all AuthType Basic AuthName "Authenticated proxy" AuthUserFile /usr/local/etc/apache2/2.4/elastic.htpwd Require valid-user </Proxy> ProxyPass / http://127.0.0.1:5601 ProxyPassReverse / http://127.0.0.1:5601 RewriteEngine on RewriteCond %/% !-f RewriteRule .* http://127.0.0.1:5601% [P,QSA] ErrorLog /usr/local/var/log/apache2/kibana_error.log LogLevel warn CustomLog /usr/local/var/log/apache2/kibana_access.log combined </VirtualHost> 

Irgendwelche Vorschläge, was Sie hinzufügen oder wie Sie die RewriteRule und RewriteCond ändern müssen? Danke!

0

2 Antworten auf die Frage

0
KenWeiLL

Versuchen Sie, diesen Code unter "RewriteEngine on" hinzuzufügen, und prüfen Sie, ob er funktioniert.

RewriteCond % 80 RewriteRule ^(.*)$ https://server.kibana/$1 [R=301,L] 
es tut nichts Warum muss ich eigentlich den Port überprüfen? Drew vor 9 Jahren 0
Beide Links sind http. HTTP-Zugangsport 80 standardmäßig, unabhängig davon, ob es sich um WWW oder Nicht-WWW handelt. Datenverkehr von Port 80 oder über http-Zugriff sollte mit dem obigen Code an https (über Port 443) weitergeleitet werden. Haben Sie versucht, den Browser-Cache vor dem Testen zu aktualisieren? KenWeiLL vor 9 Jahren 0
Ich habe den https-Port in `erwähnt`. Sollte es nicht genug sein? Nun, mein Apache hört Port 8080 für http und 8443 für https, aber die Firewall leitet den gesamten Datenverkehr auf Port 80 und 443 um. Welchen Port sollte ich in den obigen Code schreiben? Drew vor 9 Jahren 0
Nun, danke für den Tipp, den Cache zu löschen. Anscheinend ist das Skript von BillThor die einzige funktionierende Lösung. Drew vor 9 Jahren 0
0
BillThor

Sie können dies verwenden und in die Domäne umschreiben, für die Ihr Zertifikat ausgestellt wurde:

RewriteCond % !=on [NC] RewriteRule ^(.*) https://www.example.com$1 [R=301,L] 

Oder verwenden Sie diese Include-Datei, in der Sie SSL erzwingen möchten, während Sie den HTTP-Zugriff auf Teile des Servers aktivieren.

# Script to require SSL  <If "% == 'on'"> SSLOptions +StrictRequire SSLRequireSSL </If> <Else> RedirectMatch permanent ^/?(.*) https://www.example.com/$1 </Else> 

Sie könnten %anstelle von verwenden www.example.com. Dies funktioniert gut mit einem normalen Zertifikat.

RewriteCond % !=on [NC] RewriteRule ^(.*) https://%$1 [R=301,L] 

Die Variable %enthält den Hostnamen aus der Anforderung und könnte anstelle von verwendet werden www.exaxmple.com. Dies kann jedoch kein Hostname sein, der dem Zertifikat entspricht. Es funktioniert mit Zertifikaten mit mehreren Domänen.

RewriteCond % !=on [NC] RewriteRule ^(.*) https://%$1 [R=301,L] 

Durch Hinzufügen UseCanonicalName dnszu Ihrer Konfiguration UseCanonicalName dnswird das SERVER_NAMEvon DNS bereitgestellt. Sie müssen jedoch sicherstellen, dass DNS die gewünschte Domäne bereitstellt. Wenn dies funktioniert, können Sie möglicherweise dieselbe Konfiguration für alle Server verwenden. Alternativ können Sie eine kleine serverspezifische Datei hinzufügen, um den Servernamen anzugeben.

Sie müssen verschiedene Ports auf HTTP und HTTPS überwachen. Testen Sie jeden, bevor Sie das Überschreiben aktivieren. Dies ist eine minimale Konfiguration für eine Site, die sowohl HTTP als auch HTTPS überwacht und alle Anforderungen an HTTPS umleitet. Die Umleitung benötigt einen Port, wenn nicht standardmäßige Ports verwendet werden. Diese Konfiguration setzt voraus, dass der Verzeichniszugriff außerhalb der Definition des virtuellen Hosts konfiguriert wird.

<VirtualHost *:80 *:443> ServerAdmin webmaster@systemajik.com DocumentRoot /var/www/ ServerName www.example.com ServerAlias example.com  SSLEngine On SSLCipherSuite HIGH:MEDIUM SSLCertificateFile /etc/ssl/certs/www.example.com-cert.pem SSLCertificateKeyFile /etc/ssl/private/www.example.com-key.pem SSLCACertificatePath /etc/ssl/certs/  RewriteEngine On RewriteCond % !=on [NC] RewriteRule ^(.*) https://%$1 [R=301,L]  </VirtualHost> 
Ich habe `RewriteCond% ! = Auf [NC]` `RewriteRule ^ / (. *) Https://127.0.0.1:5601/$1 [R = 301, L]` hinzugefügt und es funktioniert nicht. Es leitet mich immer noch zur Apache-Standardseite "Es funktioniert" (((und wie kann ich die Datei ausprobieren?). Drew vor 9 Jahren 0
Die einzige funktionierende Lösung in meinem Fall ist also das Skript, das Sie geschrieben haben. Es funktioniert (nachdem ich den Browser-Cache geleert habe, aber die andere Lösung ist nicht ((()) Nehmen wir an, ich habe zwei verschiedene Hosts und ich möchte, dass dieses Skript universeller wird (für beide Hosts)). // www.example.com / $ 1`? Gibt es eine Variable wie "% " oder etwas anderes? Oder sollte ich für jeden virtuellen Host ein eigenes Skript erstellen? Es scheint keine gute Idee zu sein ((( Drew vor 9 Jahren 0
@Andrew Die erste Option funktioniert für mich, aber ich benutze den gewünschten Hostnamen und keine IP-Adresse. Ich habe die Antwort so bearbeitet, dass sie funktioniert, wenn kein Pfad angegeben wird. Ich habe die Antwort aktualisiert, um Optionen zum Einstellen des Hostnamens bereitzustellen. BillThor vor 9 Jahren 0
Könnten Sie bitte Beispiele für alle drei Fälle schreiben? Ich habe sie alle ausprobiert, aber nicht sicher, ob ich das richtig gemacht habe ... Ich bekomme immer das Gleiche: 500 Internal Server Error Drew vor 9 Jahren 0
@Andrew Hast du das Fehlerprotokoll überprüft? Ich habe bis heute Abend keine Zeit, den Post zu testen und zu aktualisieren. BillThor vor 9 Jahren 0
Bitte geben Sie mir einfach einen Startschuss, wann immer Sie Zeit haben Drew vor 9 Jahren 0
Wenn Sie diese Option aktivieren: "... verwenden Sie"% "anstelle von" www.example.com "mit" + StdEnvVars ", um der" SSLOptions "-Direktive hinzugefügt zu werden ..." "Der einzige Fehler ist". " 127.0.0.1 - - [19 / Jun / 2015: 15: 18: 40 -0700] "GET / HTTP / 1.1" 500 528 127.0.0.1 - - [19 / Jun / 2015: 15: 18: 40 -0700] GET /favicon.ico HTTP / 1.1 "500 528` in ** access_log ** Drew vor 9 Jahren 0
Und absolut dasselbe mit% . und wie ich schon sagte - das ist im Browser: `Internal Server Error. Der Server hat einen internen Fehler oder eine falsche Konfiguration festgestellt und konnte Ihre Anfrage nicht abschließen. Wenden Sie sich an den Serveradministrator unter you@example.com, um ihn über den Zeitpunkt dieses Fehlers und die Aktionen zu informieren, die Sie unmittelbar vor diesem Fehler ausgeführt haben. Weitere Informationen zu diesem Fehler sind möglicherweise im Serverfehlerprotokoll verfügbar.` Drew vor 9 Jahren 0