сайт застрял в цикле перенаправления после использования за cloudflare

сайт застрял в цикле перенаправления после использования за cloudflare

мой веб-сайтhttps://stage.issufy.com/, после настройки ssl, я получаю 302 redirect loop. Вот файл htaccess


<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>

Вот конфигурация Apache для 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>

а вот конфигурация ssl:

<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>

Сайт работает нормально без Cloudfare, но как только включен Cloudflare, выдает ошибки перенаправления 302.

вот журнал ошибок

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"

решение1

Если вы используете предложение Cloudflare Flexible SSL, ваш исходный веб-сервер будет видеть трафик, поступающий в незашифрованном виде через порт 80.

Для решения этой проблемы у вас есть несколько вариантов:

  • Установите режим SSL Cloudflareна Full или Full (Strict), если ваш источник поддерживает это. Вы даже можете использоватьСлужба Cloudflare Origin CAчтобы получить бесплатный SSL-сертификат для вашего веб-сервера.
  • Установить Mod_Cloudflareдля Apache, что обеспечит прозрачность работы Cloudflare, включая правильную запись IP-адресов или исправление переменной среды SSL для учета гибкого SSL.
  • Настройте Apache для учета X-Forwarded-Proto(что позволит узнать, под каким именем пользователь подключается к Cloudflare).

решение2

Похоже, что nginx от Cloudflare сбит с толку из-за какого-то правила перенаправления:

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

Пробовали ли вы полностью отключить файл .htaccess, а затем заново добавить правило за правилом, чтобы устранить проблему?

решение3

Redirect / https://stage.issufy.com

Похоже, это единственное (временное) перенаправление 302 в вашей конфигурации.

Как реализован CloudFlare SSL? Если вы используете CloudFlare как прокси-сервер, который обрабатывает SSL (единственный вариант набесплатноверсия AFAIK), то ваш веб-сайт все еще обслуживает контент по HTTP (порт 80) в CloudFlare, и соединение шифруется только от CloudFlare к клиенту. В этом случае указанное выше перенаправление действительно приведет к циклу перенаправления 302. (Обычно это должно быть реализовано как 301. т.е. Redirect 301 ...)

Если это так, то есть несколько дополнительных заголовков HTTP-запроса, которые вы можете проверить, чтобы узнать, обращается ли клиент к вашему сайту (или, скорее, к CloudFlare) по HTTPS или нет.

RewriteEngine on
RewriteCond %{SERVER_NAME} =stage.issufy.com
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,QSA,R=permanent]

Кстати, это попытка сделать то же самое, что и ваша единственная Redirectдиректива выше (хотяпостоянно). Используйте один или другой вариант, но не оба одновременно.

Предпочтительно использовать одну Redirect 301директиву (mod_alias). Однако, если вам нужно проверить заголовки HTTP-запросов прокси-сервера, чтобы определить HTTPS, вам понадобится mod_rewrite.

Связанный контент