Цикл перенаправления с помощью Гибкого ssl cloudflare

Я пытаюсь реализовать Гибкий SSL, предоставленный CloudFlare моему сайту.

Вот моя конфигурация nginx:

# PHP-FPM upstream; change it accordingly to your local config!
upstream php-fpm {
    server 127.0.0.1:9000;
}

server {
    listen         80;
    server_name    example.com www.example.com;
    return         301 https://$server_name$request_uri;
}

server {
    ## Listen ports
    listen 443;

    # use _ if you want to accept everything, or replace _ with domain
    server_name example.com www.example.com;

    location / {
      #proxy_set_header        X-Forwarded-Proto $scheme;
      proxy_set_header X_FORWARDED_PROTO https;
      proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header  Host $http_host;
      proxy_set_header  X-Url-Scheme $scheme;
      proxy_redirect    off;
      proxy_max_temp_file_size 0;
    }

(...rest of config...)

Однако, когда я пытаюсь соединиться с веб-сайтом (Wordpress), я получаю цикл перенаправления (хром: ERR_TOO_MANY_REDIRECTS). Как я настраиваю nginx для предотвращения этого?

10
задан 21 December 2014 в 16:54
3 ответа

Cloudflare's flexible ssl означает, что соединение между Cloudflare и вашим сервером имеет значение всегда по http:

connection is always http

Учитывая это, единственный блок сервера в вопросе релевантности - это этот:

server {
   listen         80;
   server_name    example.com www.example.com;
   return         301 https://$server_name$request_uri;
}

Должно быть очевидно, почему это приводит к циклу перенаправления, есть 2 решения для форсирования https соединений с помощью их гибкого ssl решения.

Используйте правила страницы Cloudflare

Если доступ к серверу осуществляется исключительно через cloudflare, вы можете использовать собственные правила страницы Cloudflare page rules для изменения ответов для домена, поддомена или любого шаблона url:

Using cloudflare's page rules

Одним из вариантов является принудительное подключение https:

Always use HTTPS

Test $http_x_forwarded_proto

В некоторых случаях можно избежать использования правил страницы (они должны быть редкими или только переходными), для таких сценариев можно протестировать переадресованный протокол и перенаправить его на основе этого:

server {
   listen         80;
   server_name    example.com www.example.com;

   if ($http_x_forwarded_proto = "http") {
     return 301 https://$server_name$request_uri;
   }

   ... directives to generate a response
}
30
ответ дан 2 December 2019 в 21:58

Это может исправить проблему, если у вас есть действующий SSL-сертификат. Окно [Crypto] и выберите Полный (строгий) , как на изображении. enter image description here

На самом деле нет необходимости обновлять файл конфигурации веб-сервера для Nginx.

.
5
ответ дан 2 December 2019 в 21:58

Ответ AD7six очень хорош, хотя, похоже, есть более простое решение, которое не требует правил страницы. Я не уверен, что это новое дополнение с момента предыдущих ответов, но оно обязательно должно быть задокументировано по этому вопросу, особенно с учетом того, что на момент написания вы получаете только 3 бесплатных правила страницы с Cloudflare.

Когда у вас есть Гибкий SSL включен для данного домена, вы можете прокрутить вниз вкладку Шифрование и включить параметр Всегда использовать HTTPS . Эта опция легко решит проблему цикла перенаправления (подробно объяснено в ответе AD7six ).

Cloudflare's "Always Use HTTPS" option

Эта опция подтверждена при работе с nginx; более того, не должно быть никаких настроек сервера, на которых этот параметр не работает, при условии, что гибкий SSL уже включен и работает без проблем.

0
ответ дан 2 December 2019 в 21:58

Теги

Похожие вопросы