У меня есть сертификат ssl с подстановочными знаками, и я пытаюсь перенаправить весь трафик, отличный от ssl, на ssl. В настоящее время я использую следующее для перенаправления URL-адреса без поддоменов, который работает нормально.
server {
listen 80;
server_name mydomain.com;
#Rewrite all nonssl requests to ssl.
rewrite ^ https://$server_name$request_uri? permanent;
}
когда я делаю то же самое для * .mydomain.com, он логически перенаправляется на
https://%2A.mydomain.com/
Как вы перенаправляете все поддомены на их https-эквивалент?
Вот и все...
server {
listen 80;
server_name *.mydomain.com;
#Rewrite all nonssl requests to ssl.
return 301 https://$host$request_uri;
}
Официальная документация NGINX рекомендует использовать директиву return вместо директивы rewrite для выполнения перенаправления. Это так, поскольку перезаписываемый запрос не предназначен для этого сервера, но он все равно обрабатывается в этом блоке сервера. Таким образом, перенаправления правильно выполняются с помощью директивы return, поскольку вся обработка останавливается, и немедленно отправляется ответ. NGINX не рекомендует перезаписывать для перенаправления здесь: http://nginx.org/en/docs/http/converting_rewrite_rules.html
Синтаксис директивы возврата: URL кода возврата; Поскольку вы изначально выполняли постоянную перезапись, соответственно, вы можете использовать 301 в качестве кода для ответа, указывая, что это постоянное перенаправление. Ваш https-адрес будет передан в разделе URL. Ссылка: http://nginx.org/en/docs/http/ngx_http_rewrite_module.html#return
Итак, ваша правильная конфигурация будет
server {
listen 80;
server_name *.mydomain.com;
#Redirect all nonssl requests to ssl.
return 301 https://$server_name$request_uri;
}
Это, вероятно, позволит вам правильно перенаправить на ваш домен ssl с блокировкой сервера с подстановочными знаками. Вы также можете попробовать использовать подчеркивание для общего имени сервера '_' или $ host, как это предлагается в комментарии выше. Дайте нам знать!
Попробуйте что-то вроде этого:
server {
listen 80;
server_name ~^(.*)\.mydomain\.com$;
set $servername $1;
rewrite ^(.*)$ https://$servername.mydomain.com/$1;
}
Уловка состоит в том, чтобы определить сервер с подстановочными знаками и выполнять перенаправления на основе его имени.