У меня такая конфигурация:
server {
listen 80;
server_name example.pl *.example.pl;
rewrite ^/(.*)$ http://www.example.pl/$1 permanent;
}
server {
listen 80;
listen 443 ssl;
ssl on;
ssl_certificate /opt/nginx/ssl/server.pem;
ssl_certificate_key /opt/nginx/ssl/server.key;
server_name www.example.pl;
root /var/www/example/public/; # <--- be sure to point to 'public'!
}
Итак, теперь каждый субдомен, например xx234.example.pl, перезаписывается на http://www.example.pl
Сейчас пытаюсь установить https. https://www.example.pl работает нормально, но я не могу перенаправить трафик с http на https. Когда я это сделаю:
server {
listen 80;
server_name example.pl *.example.pl;
#rewrite ^/(.*)$ http://www.example.pl/$1 permanent;
return 301 https://$server_name$request_uri;
}
Это перенаправление, но на https://example.pl без www. Как правильно перенаправить. Я хочу иметь такую же конфигурацию, но с https.
Это тоже не работает:
server {
listen 80;
server_name example.pl *.example.pl;
rewrite ^/(.*)$ https://www.example.pl/$1 permanent;
}
У вас есть две проблемы:
Сначала вы перешли с использования www.example.pl
к $server_name
(вот почему www.
исчезнувший).
Во-вторых, ваш другой серверный блок уже обрабатывает http://www.example.pl
.
Удалить listen 80;
со второго server
блок, так что он обрабатывает только https
соединения. Использовать return 301 https://www.example.pl$request_uri;
для выполнения перенаправления на правильную схему и имя сервера.
Например:
server {
listen 80;
server_name example.pl *.example.pl;
return 301 https://www.example.pl$request_uri;
}
server {
listen 443 ssl;
server_name www.example.pl;
...
}
server_name
Устанавливает имена виртуального сервера, например:server { server_name example.com www.example.com; }
Первое имя становится именем основного сервера.
Теперь, когда у вас есть server_name example.pl *.example.pl;
, то example.pl
стал твоим имя основного сервера вы используете в своем
return 301 https://$server_name$request_uri;
Неудивительно, что это перенаправляет на example.pl
вместо того www.example.pl
. Чтобы изменить это, просто добавьте www.example.pl
в начале:
server {
listen 80;
server_name www.example.pl example.pl *.example.pl;
return 301 https://$server_name$request_uri;
}
Теперь вы также можете удалить listen 80;
с вашего SSL server{}
раздел, поскольку он стал ненужным.