Redirect Loop SSL Nginx Cloudflare

У меня есть универсальный SSL с CloudFlare. Я хотел установить постоянное перенаправление SSL в моем блоге Ghost.

Это был мой оригинальный конфиг. Он отлично работает индивидуально, используя http://example.com/ и https://example.com/

server {
listen 80 default_server;
listen [::]:80 default_server ipv6only=on;

server_name example.com; # Replace with your domain

root /usr/share/nginx/html;
index index.html index.htm;

client_max_body_size 10G;

location / {
    proxy_pass http://localhost:2368;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $http_host;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_buffering off;
}
}

Это моя попытка конфигурации для перенаправления с HTTP на HTTPS, но это приводит к петле перенаправления

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

server {
   listen   443 ssl;
   ssl      on;
   ssl_certificate /etc/nginx/ssl/cert/example.crt;
   ssl_certificate_key /etc/nginx/ssl/private/example.key;
   ssl_session_cache  shared:SSL:10m;
   ssl_session_timeout 5m;
   server_name example.com; # Replace with your domain
   root /usr/share/nginx/html;
   index index.html index.htm;

   client_max_body_size 10G;

    location / {
       proxy_pass http://localhost:2368;
       proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
       proxy_set_header Host $http_host;
       proxy_set_header X-Forwarded-Proto $scheme;
       proxy_buffering off;
   }
}

Не совсем уверен, почему это зацикливание.

4 ответа

У меня недостаточно представителя, чтобы добавить комментарий выше, но я также столкнулся с этой проблемой, и единственный способ мне обойти ее - отключить CloudFlare для конкретной записи DNS, что, очевидно, не идеально.

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

Извините, я не могу быть более полезным, но если я найду решение, я обязательно опубликую его здесь.

Вдохновленный ответом Паскаля, я попытался изменить тип соединения между cloudflare и моим сервером с гибкого ssl на полный ssl. Для меня это работает так.

Оглядываясь назад, это кажется логичным, потому что с гибким ssl поток выглядит так:

  1. пользователь подключается через ssl к cloudflare
  2. cloudflare подключается через обычный http к серверу
  3. сервер выдает перенаправление в качестве ответа
  4. cloudflare пересылает ответ клиенту (перенаправление)
  5. промыть и повторить

Если я включу полный ssl, перенаправление больше не будет происходить, потому что cloudflare подключается к серверу через ssl.

У меня была та же проблема, и в итоге я установил оба url а также urlSSL в Ghost в config.js. Это не заставит SSL, но если пользователь заходит в блог через https, его установка гарантирует, что вся будущая навигация будет также осуществляться через https.

Раньше, если пользователь щелкнул по сообщению в блоге, а затем щелкнул по любой другой внутренней ссылке, эта ссылка будет передаваться через http вместе со всеми другими будущими запросами. Настройка urlSSL свойство исправляет это по крайней мере.

url: http://blog.example.com,
urlSSL: https://blog.example.com

Ссылки: http://support.ghost.org/config/

Я только что столкнулся с той же проблемой на моем экземпляре-призраке и немного поговорил об этом здесь:

https://stackoverflow.com/questions/40816988/infinite-redirect-nginx/40817660

Оказывается, у меня было две проблемы: бесконечные проблемы с перенаправлением [ (┛◉◉◉), 彡┻━┻ ], одна с моей конфигурацией сервера, а другая с моей конфигурацией облачной вспышки.

Чтобы использовать SSL с облачной вспышкой, вам необходимо:

  • Перейдите на вкладку Обзор> Сводка настроек> Нажмите на SSL и измените SSL с "Гибкий" на "Полный (строгий)".
    • Это также можно найти на вкладке Крипто> SSL > Нажмите на SSL и измените SSL с "Гибкий" на "Полный (строгий)".

Поскольку вы обращаетесь к прокси-проходу с портом 2368 в вашем vHost, кажется логичным, что вы также можете запускать ghost. (Я понимаю, что это не единственное программное обеспечение, работающее на этом порту.)

  • Проверьте свои config.js чтобы убедиться, что url: указывает на http и не https,
Другие вопросы по тегам