我想在 NGINX 服务器块中从 http 重定向到 https。
下列的相关帖子中的答案我尝试在以下 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
问题是您已配置两个服务器块,它们在同一端口上侦听 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/ {
[...]
}
}
答案2
我考虑过这个问题,做了一些研究,并在主服务器块之前用一个更简单的服务器块解决了它,从这个答案:
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;
}
[...]
}
因此感谢你们两位迅速而有用的回复。