Как заставить NGINX перенаправить от http до https?

Я хочу перенаправить от http до https в блоке сервера NGINX.

После ответа в связанном сообщении я попытался добавить другой блок сервера в следующем файле конфигурации NGINX, но получил 'конфликтующее имя сервера' предупреждение, как (по-видимому), значение server_name не включает префикс протокола:

server {
    listen 80;
    listen 443 ssl;
    ssl_certificate /etc/nginx/ssl/server.crt;
    ssl_certificate_key /etc/nginx/ssl/server.key;
    server_name sub.domain.co.uk;
    return 302 https://sub.domain.co.uk$request_uri;
}

server {
    listen 443 ssl;
    ssl_certificate /etc/nginx/ssl/server.crt;
    ssl_certificate_key /etc/nginx/ssl/server.key;
    server_name sub.domain.co.uk;
    location / {
        root /home/saves/webapps/html/;
        index index.html;
    }
    location /api/ {
        [...]
   }
}
1
задан 13 April 2017 в 15:14
2 ответа

Проблема в том, что вы настроили два серверных блока для прослушивания SSL на одном и том же порте с одним и тем же именем сервера, и nginx не может решить, какой из них выбрать в этих условиях. Измените его на:

server {
    listen 80 default_server;
    listen 443 ssl default_server;
    server_name _;
    ssl_certificate /etc/nginx/ssl/server.crt;
    ssl_certificate_key /etc/nginx/ssl/server.key;
    return 302 https://sub.domain.co.uk$request_uri;
}

server {
    listen 443;
    server_name sub.domain.co.uk;

    location / {
        root /home/saves/webapps/html/;
        index index.html;
    }
    location /api/ {
        [...]
   }
}
3
ответ дан 3 December 2019 в 18:43

Я подумал об этом, провел небольшое исследование и решил это с помощью гораздо более простого серверного блока перед основным, из этого ответа :

server {
    listen 80;                            
    location / {
        return 301 https://sub.domain.co.uk;
    }
}

Но, наконец, исправил его после комментариев к этому:

server {
    listen 443 ssl;
    ssl_certificate /etc/nginx/ssl/server.crt;
    ssl_certificate_key /etc/nginx/ssl/server.key;
    server_name sub.domain.co.uk;
    location / {
        return 301 https://sub.domain.co.uk;
        root /home/saves/webapps/html/;
        index index.html;
    }
    [...]
}

Так что спасибо вам обоим за ваши быстрые и полезные ответы.

0
ответ дан 3 December 2019 в 18:43

Теги

Похожие вопросы