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