Назад | Перейти на главную страницу

Цикл перенаправления 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;
   }
}

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

У меня недостаточно репутации, чтобы добавить комментарий выше, но я также столкнулся с этой проблемой, и единственный способ обойти ее - отключить 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.

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

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

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

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

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

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

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

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

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

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

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