Цикл перенаправления с использованием cloudflare's Flexible ssl
Я пытаюсь внедрить гибкий 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, чтобы предотвратить это?
3 ответа
Гибкий ssl Cloudflare означает, что соединение между cloudflare и вашим сервером всегда через http:
Учитывая это - единственный блок сервера в вопросе об актуальности это:
server {
listen 80;
server_name example.com www.example.com;
return 301 https://$server_name$request_uri;
}
Должно быть очевидно, почему это приводит к циклу перенаправления, есть 2 решения для принудительного подключения https с использованием их гибкого решения ssl.
Используйте правила страницы Cloudflare
Если доступ к серверу осуществляется исключительно через cloudflare, вы можете использовать собственные правила страницы cloudflare для изменения ответов для домена, субдомена или любого шаблона URL:
Одним из вариантов является принудительное использование 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
}
Ответ AD7six очень хороший, хотя кажется, что есть более простое решение, которое не требует правил страницы. Я не уверен, является ли это новым дополнением со времени предыдущих ответов, но это определенно должно быть задокументировано по этому вопросу, особенно учитывая, что на момент написания вы получили только 3 бесплатных правила для страниц с Cloudflare.
Когда у вас включен Гибкий SSL для данного домена, вы можете прокрутить вниз Crypto
вкладка и включить Always use HTTPS
вариант. Эта опция решит проблему цикла перенаправления (подробно объяснено в ответе AD7six).
Эта опция подтверждена работой с nginx; кроме того, не должно быть никаких настроек сервера, где эта опция не работает, при условии, что Flexible SSL уже включен и работает без проблем.