这是我的nginx配置的样子:
server {
listen 443 default_server ssl;
server_name dlgt.co;
[... bunch of stuff there ...]
}
#HTTP Server redirects to https
server {
server_name _;
rewrite ^ https://dlgt.co$request_uri? permanent;
}
server {
listen 443;
server_name _;
rewrite ^ https://dlgt.co$request_uri? permanent;
}
尽管如此,使用https://访问IP仍然有效。我试图阻止这种行为,因为它只是在抛出错误。我无法找到如何从配置中排除所有其他server_names,我认为我的最后2个块可以做到这一点,但显然没有。
谢谢!
答案 0 :(得分:2)
您的上一个区块与您的第一个区块相冲突。定义默认服务器将使服务器块处理所有未知的服务器名称,即使您定义了另一个" catch-all"块。
因此逻辑必须与此相反:
server {
listen 80 default_server;
listen 443 default_server ssl;
ssl_certificate /path/to/certificate;
ssl_certificate_key /path/to/key;
return 301 https://dlgt.co$request_uri;
}
server {
listen 443;
server_name dlgt.co;
[ ... ]
}
请注意,只需在默认服务器块中设置证书和密钥。当握手在任何HTTP流量出现之前到来时,nginx将选择服务器块处理在默认服务器块中进行握手后的传入HTTP请求。