meine Webseitehttps://stage.issufy.com/, nach dem Einrichten von SSL erhalte ich eine 302-Umleitungsschleife. Hier ist die htaccess-Datei
<IfModule mod_rewrite.c>
<IfModule mod_negotiation.c>
Options -MultiViews
</IfModule>
RewriteEngine On
# Redirect Trailing Slashes If Not A Folder...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/$ /$1 [L,R=301]
# Handle Front Controller...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
# Handle Authorization Header
RewriteCond %{HTTP:Authorization} .
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
</IfModule>
Hier ist die Apache-Konfiguration für http:
<VirtualHost *:80>
ServerName stage.issufy.com
Redirect / https://stage.issufy.com
DocumentRoot /var/www/html/stage.issufy.com
<Directory "/var/www/html/stage.issufy.com">
Options FollowSymLinks
AllowOverride All
Order allow,deny
Allow from all
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
RewriteEngine on
RewriteCond %{SERVER_NAME} =stage.issufy.com
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,QSA,R=permanent]
</VirtualHost>
und hier ist die SSL-Konfiguration:
<IfModule mod_ssl.c>
<VirtualHost *:443>
ServerName stage.issufy.com
DocumentRoot /var/www/html/stage.issufy.com
<Directory "/var/www/html/stage.issufy.com">
Options FollowSymLinks
AllowOverride All
Order allow,deny
Allow from all
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
SSLCertificateFile /etc/letsencrypt/live/stage.issufy.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/stage.issufy.com/privkey.pem
Include /etc/letsencrypt/options-ssl-apache.conf
</VirtualHost>
</IfModule>
Die Website funktioniert ohne Cloudflare einwandfrei, aber sobald Cloudflare aktiviert ist, treten 302-Weiterleitungsfehler auf.
hier ist das Fehlerprotokoll
172.68.51.31 - - [17/Jan/2017:18:24:18 +0000] "GET / HTTP/1.1" 302 539 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Dragon/52.15.25.665 Chrome/52.0.2743.82 Safari/537.36"
172.68.51.31 - - [17/Jan/2017:18:24:18 +0000] "GET / HTTP/1.1" 302 538 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Dragon/52.15.25.665 Chrome/52.0.2743.82 Safari/537.36"
172.68.51.31 - - [17/Jan/2017:18:24:18 +0000] "GET / HTTP/1.1" 302 538 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Dragon/52.15.25.665 Chrome/52.0.2743.82 Safari/537.36"
172.68.51.31 - - [17/Jan/2017:18:24:19 +0000] "GET / HTTP/1.1" 302 538 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Dragon/52.15.25.665 Chrome/52.0.2743.82 Safari/537.36"
172.68.51.31 - - [17/Jan/2017:18:24:19 +0000] "GET / HTTP/1.1" 302 539 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Dragon/52.15.25.665 Chrome/52.0.2743.82 Safari/537.36"
172.68.51.31 - - [17/Jan/2017:18:24:19 +0000] "GET / HTTP/1.1" 302 538 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Dragon/52.15.25.665 Chrome/52.0.2743.82 Safari/537.36"
172.68.51.31 - - [17/Jan/2017:18:24:20 +0000] "GET / HTTP/1.1" 302 539 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Dragon/52.15.25.665 Chrome/52.0.2743.82 Safari/537.36"
172.68.51.31 - - [17/Jan/2017:18:24:20 +0000] "GET / HTTP/1.1" 302 539 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Dragon/52.15.25.665 Chrome/52.0.2743.82 Safari/537.36"
Antwort1
Wenn Sie das Flexible SSL-Angebot von Cloudflare verwenden, erkennt Ihr ursprünglicher Webserver den über Port 80 eingehenden Datenverkehr unverschlüsselt.
Um dieses Problem zu lösen, haben Sie einige Möglichkeiten:
- Stellen Sie den SSL-Modus von Cloudflare einauf Full oder Full (Strict), wenn Ihr Ursprung dies unterstützt. Sie können sogarCloudflares Origin CA-Dienstum ein kostenloses SSL-Zertifikat für Ihren Webserver zu erhalten.
- Installieren Sie Mod_Cloudflarefür Apache, wodurch sichergestellt wird, dass Cloudflare transparent handelt – einschließlich der korrekten Aufzeichnung von IPs oder der Korrektur der SSL-Umgebungsvariable, um Flexible SSL zu berücksichtigen.
- Legen Sie Apache als Berücksichtigung fest
X-Forwarded-Proto
(wodurch angezeigt wird, über welchen Weg der Benutzer eine Verbindung zu Cloudflare herstellt).
Antwort2
Es scheint, als ob Cloudflares nginx aufgrund einer Umleitungsregel verwirrt ist:
HTTP/1.1 302 Found
Date: Tue, 17 Jan 2017 18:18:09 GMT
Content-Type: text/html; charset=iso-8859-1
Connection: keep-alive
Set-Cookie: __cfduid=da71659f540fb5dad0c47d48669012aa61484677089; expires=Wed, 17-Jan-18 18:18:09 GMT; path=/; domain=.issufy.com; HttpOnly
Location: https://stage.issufy.com
Server: cloudflare-nginx
CF-RAY: 322bcedefcc859d2-VIE
Haben Sie versucht, Ihre .htaccess-Datei vollständig zu deaktivieren und sie dann Regel für Regel erneut hinzuzufügen, um das Problem dort zu beheben?
Antwort3
Redirect / https://stage.issufy.com
Dies scheint die einzige 302-Weiterleitung (vorübergehend) in Ihrer Konfiguration zu sein.
Wie wird das CloudFlare SSL implementiert? Wenn Sie CloudFlare als Frontend-Proxy verwenden, der das SSL verwaltet (die einzige Option auf derfreiVersion meines Wissens), dann stellt Ihre Website weiterhin Inhalte über HTTP (Port 80) an CloudFlare bereit und die Verbindung wird nur von CloudFlare zum Client verschlüsselt. In diesem Fall würde die obige Umleitung tatsächlich zu einer 302-Umleitungsschleife führen. (Dies sollte normalerweise als 301 implementiert werden. d. h. Redirect 301 ...
)
Wenn dies der Fall ist, gibt es einige zusätzliche HTTP-Anforderungsheader, die Sie überprüfen können, um festzustellen, ob der Client über HTTPS auf Ihre Site (oder vielmehr CloudFlare) zugreift oder nicht.
RewriteEngine on RewriteCond %{SERVER_NAME} =stage.issufy.com RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,QSA,R=permanent]
Dies versucht übrigens dasselbe wie Ihre einzige Redirect
Direktive oben (wenn auchpermanent). Verwenden Sie entweder das eine oder das andere, nicht beides.
Vorzugsweise verwenden Sie eine einzelne Redirect 301
(mod_alias)-Direktive. Wenn Sie jedoch nach Proxy-HTTP-Anforderungsheadern suchen müssen, um HTTPS zu bestimmen, benötigen Sie mod_rewrite.