Я хочу перенаправить от 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/ {
[...]
}
}
Проблема в том, что вы настроили два серверных блока для прослушивания 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/ {
[...]
}
}
Я подумал об этом, провел небольшое исследование и решил это с помощью гораздо более простого серверного блока перед основным, из этого ответа :
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;
}
[...]
}
Так что спасибо вам обоим за ваши быстрые и полезные ответы.