У меня есть универсальный 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 поток:
Если я включу полный ssl, перенаправление больше не происходит, потому что cloudflare подключается к серверу через ssl.
Я только что столкнулся с той же проблемой на моем экземпляре призрака и немного поговорил об этом здесь:
https://stackoverflow.com/questions/40816988/infinite-redirect-nginx/40817660#40817660
Оказывается, у меня было две проблемы с бесконечными проблемами перенаправления [(┛◉Д◉) ┛ 彡 ┻━┻], одна с моей конфигурацией сервера, а другая с моей конфигурацией облачной вспышки.
Чтобы использовать 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