ich habe einen Webserver, der auf Port 443 (SSL) läuft.
Laut Konfiguration und netstat horcht er aber auch auf Port 80.
Eine Verbindung an diesen Port klappt aber nicht, er läuft irgendwann auf einen Timeout. Im acces_log oder error_log steht dieser Verbindungsversuch nicht drin.
Nun hab ich schon ein wenig gegooglet, aber die Empfehlungen funktionieren bei mir nicht.
Die Möglichkeit mit „Redirect permanent“ führt natürlich in einen Loop und die anderen zwei Möglichkeiten per RewriteEngine machen auch scheinbar nichts. mod_rewrite wird jedenfalls geladen und an anderer Stelle auch benutzt.
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
oder
RewriteEngine On
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://myurl.com/$1 [R,L]
ich habe einen Webserver, der auf Port 443 (SSL) läuft.
es gibt verschiedene Webserver, die in unterschiedlichen Konfigurationen betrieben werden können.
Die Möglichkeit mit „Redirect permanent“ führt natürlich in
einen Loop und die anderen zwei Möglichkeiten per
RewriteEngine machen auch scheinbar nichts.
Bestimmte Artikel sollten sich auf tatsächlich bestimmte Dinge beziehen – von welchen „drei“ Möglichkeiten sprichst du?
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
ich habe einen Webserver, der auf Port 443 (SSL) läuft.
Laut Konfiguration und netstat horcht er aber auch auf Port
80.
Wie sieht denn dieser Teil der Konfiguration aus?
Bei Debians Apache2 sieht das (in /etc/apach2/ports.conf) per Default so aus:
NameVirtualHost *:80
Listen 80
SSL name based virtual hosts are not yet supported, therefore no
NameVirtualHost statement here
Listen 443
Wenn das bei dir aehnlich aussieht, musst du natuerlich auch noch einen virtual host fuer *:80 einrichten, der den redirect macht.
Nun hab ich schon ein wenig gegooglet, aber die Empfehlungen
funktionieren bei mir nicht.
Die Möglichkeit mit „Redirect permanent“ führt natürlich in
einen Loop
Nur wenn der redirect vom Handler fuer den Port 443 gemacht wird.
und die anderen zwei Möglichkeiten per
RewriteEngine machen auch scheinbar nichts.
Solange im access.log nichts auftaucht, wird auch die Rewrite-Engine nicht anspringen.
Zum Debuggen waere es vielleicht einfacher, wenn du per http eine andere Seite auslieferst als per https. Wenn das funktioniert, kannst du die http-Seite durch einen redirect ersetzen.
Das war eine hilfreiche Antwort, wenngleich sie mein Problem noch nicht gelöst hat.
apache2ctl -S listet beide Virtual Hosts, „*:443“ und „*:80“, beide mit den selben Angaben (soll ja beides der selbe ServerName sein).
\*:443 is a NameVirtualHost
default server xxx (/etc/apache2/vhosts.d/vhosts.conf:6)
port 443 namevhost xxx (...)
Ja, die Listen-Anweisungen stehen auch noch in der Konfiguration, unverändert, wie weiter oben gepostet.
Das wget fand ich interessant!
wget connected tatsächlich an Port 80, trifft auf die Redirect-Direktive (301 Moved Permanently) und stellt eine Verbindung zu Port 443 her und lädt die Datei runter.
Und das funktioniert tatsächlich nur auf dem lokalen Rechner mit „localhost“. Auch aus einem Browser heraus.
Aber ein NamedVirtualHost geht doch über den Servernamen und nicht über die IP#. Von daher müsste es doch auch von außen gehen. Stellt es also vielleicht doch ein Problem dar, dass beide VirtualHosts den selben ServerName haben? Oder ist das egal, wenn das zwei unterschiedliche Ports sind, wie hier?
Wieso ist es also ein Unterschied, ob der Server per „localhost“ oder über seinen richtigen Namen angesprochen wird?
Du hast mir einen wichtigen Tipp gegeben, ob Du vielleicht auch den entscheidenden weißt?
wget connected tatsächlich an Port 80, trifft auf die
Redirect-Direktive (301 Moved Permanently) und stellt eine
Verbindung zu Port 443 her und lädt die Datei runter.
das heißt, die Apache-Konfiguration ist grundsätzlich korrekt.
Aber ein NamedVirtualHost geht doch über den Servernamen und
nicht über die IP#.
Die Verbindung wird stets über die IP aufgebaut. Erst wenn die Verbindung aufgebaut ist, sendet der Client den Hostnamen und der Apache antwortet dann entsprechend.
Sendet der Client keinen Hostnamen oder einen für den kein expliziter VirtualHost angelegt ist (in unserem Fall localhost), so benutzt Apache den Standardserver, was regelmäßig einfach der erste VirtualHost ist.
Von daher müsste es doch auch von außen gehen.
Von außen wird die Verbindung offensichtlich garnicht erst aufgebaut (Timeout). Kann es sein, dass da eine Firewall im Spiel ist, die die Anfrage verschluckt?
Stellt es also vielleicht doch ein Problem dar, dass
beide VirtualHosts den selben ServerName haben?
Sehr hilfreich, wenn die Verbindung zu Port 80 ein Timeout erzeugt.
Du bekommst das Timeout höchstwahrscheinlich, weil der Server auf Anfragen nicht antwortet.
Wie soll er auch, wenn es keine Seite zum Ausliefern gibt.
Leg doch erst mal irgendeine Testseite und die 404-Seite an - dann weisst du mehr.
der Gedanke kam mir auch gerade, dass das die Firewall ist.
Ich hab mir die Konfiguration angesehen, es war tatsächlich nur HTTPS freigeschaltet. Jetzt hab ich HTTP zusätzlich eingetragen aber trotzdem gehts nicht. Im Firewall-Logfile stehen diese Verbindungsversuche auch nicht drin.
Ich hab für alle Zonen HTTP (80) zusätzlich als erlaubt eingetragen und Firewall neu gestartet.