Назад | Перейти на главную страницу

Nginx http перенаправление на https

У меня такая конфигурация:

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{} раздел, поскольку он стал ненужным.