Цикл перенаправлення, використовуючи гнучкий ssl cloudflare


11

Я намагаюся реалізувати гнучкий 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), я отримую цикл переадресації (chrome: ERR_TOO_MANY_REDIRECTS). Як налаштувати nginx, щоб запобігти цьому?

Відповіді:


31

Гнучка ssl Cloudflare означає, що зв’язок між cloudflare та вашим сервером завжди над http:

з'єднання завжди http

З огляду на це - єдиний серверний блок у питанні актуальності - це такий:

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

Повинно бути очевидним, чому це призводить до циклу переадресації, є два рішення для примусового з'єднання https, використовуючи їх гнучке рішення ssl.

Використовуйте правила сторінки Cloudflare

Якщо доступ до сервера здійснюється виключно через cloudflare, ви можете використовувати правила власної сторінки cloudflare для зміни відповідей для домену, піддомену або будь-якого шаблону URL-адреси:

Використання правил сторінки cloudflare

Один із варіантів - змусити https:

Завжди використовуйте HTTPS

Тест $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
}

І чи будуть помилки в моїх https-з'єднаннях, такі як не все передається через http у цьому випадку?
Deqq

Налаштування cloudflare / nginx не має жодного відношення до цього, вміст html визначатиме, чи є такі повідомлення про помилки.
AD7six

Перший рядок цієї відповіді невірний: з'єднання між браузером та CloudFlare зашифровано TLS, з'єднання з CloudFlare до вихідного сервера - http. Цикли переадресації можуть бути спричинені правилами сторінки або налаштуваннями високого рівня, що вказують тип шифрування неправильно - наприклад, повний, коли вам справді потрібна гнучка.
Тім

Є також плагін, який допомагає у цьому: en-nz.wordpress.org/plugins/cloudflare-f prilagod-ssl
Тім

6

Це може вирішити проблему, якщо у вас є дійсний сертифікат SSL. [Криптовалюта] і виберіть, Full (strict)як на зображенні. введіть тут опис зображення

Дійсно не потрібно оновлювати файл конфігурації веб-сервера для Nginx.


Повний (суворий) працює лише в тому випадку, якщо веб-сервер-джерело має дійсний сертифікат SSL з дійсним ланцюжком сертифікатів. Повна робота з будь-яким сертифікатом SSL, включаючи самопідписаний. Це не гарна відповідь на питання.
Тім

Так, я бачу зараз, у питанні згадувався гнучкий сертифікат. Я вдосконалю свою відповідь завдяки вашим відгукам і буду більш конкретним. Ми вдосконалюємо базу знань тут. Дійсний сертифікат SSL має найкраще значення для Google, якщо ми розглядаємо перспективу SEO. Я не шкодую після публікації цього повідомлення.
prosti

Гнучка / повна / сувора не має жодних значень для SEO, це налаштування для підключення до початкового сервера. Cloudflare представляє спільний сертифікат https тому, хто запитує сторінку, як вона підключається до джерела, в основному не має значення.
Тім

Припускаючи , що сервер дійсно є діючий SSL сертифікат (ОП не уточнює, і я прийшов сюди через аналогічний конфиг Google), це відмінний варіант - примітка він також може бути обмежений до певної подобласти через Правила сторінки.
skoczen

Це надзвичайно гарна відповідь для мене, що був дійсний SSL.
Філіп

0

Відповідь AD7six дуже хороша, хоча, здається, є більш просте рішення, яке не вимагає правил на сторінці. Я не впевнений, чи це нове доповнення з попередніх відповідей, але це обов'язково має бути задокументовано в цьому питанні, особливо враховуючи, що на момент написання у вас є лише 3 безкоштовних правила сторінки з Cloudflare.

Коли для даного домену увімкнено гнучкий SSL, ви можете прокрутити Cryptoвкладку вниз і ввімкнути цю Always use HTTPSопцію. Цей параметр дозволить легко вирішити проблему циклу переадресації (детально пояснено у відповіді AD7six ).

Параметр Cloudflare "Завжди використовувати HTTPS"

Ця опція підтверджена при роботі з nginx; крім того, не повинно бути налаштування сервера, коли ця опція не працює, за умови, що гнучкий SSL вже включений і працює без проблем.


Якщо користувацький інтерфейс Cloudflare змінився (або були доступні нові варіанти), було б краще відредагувати існуючу відповідь, а не створювати конкуруючу.
AD7six

@ AD7six Я ​​вважаю, що це доповнення до старого інтерфейсу, а не заміна, а це означає, що стара відповідь все одно має бути дійсною. Тому окрема відповідь була б більш логічною, ніж редагування оригіналу, чи не так?
Чад

Я не думаю, що "Ви раніше це робили далеко, але тепер є кнопка для цього!" це нова відповідь, ні :)
AD7six
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.