server_name 不匹配时 Nginx 下降

Nginx drop when server_name does not match

我有两个虚拟主机:一个在 domain.tld 端口 80 上,另一个在 sub.domain.tld 端口 443 上,并启用了 SSL。我在我的 DNS 服务器上添加了一个 CNAME 条目,将我的 sub 子域重定向到 domain.tld.。 一切都按预期工作,但进入 http://sub.domain.tld 与进入 http://domain.tld 的效果相同,而 https://domain.tld 与进入 https://sub.domain.tld 的效果相同。我怎样才能防止这种情况?

我的配置:

server {
    listen *:443;
    listen [::]:443;

    server_name www.sub.domain.tld;

    ssl on;
    ssl_certifiate ...;
    ssl_certifiate_key ...;

    root /var/www/sub.domain.tld;
    ...
}

server {
    listen *:80;
    listen [::]:80;

    server_name www.domain.tld;

    root /var/www/domain.tld;
    ...
}

如果这些是您唯一的 server 块,那么它们也是您事实上的 默认服务器 分别用于端口 443 和端口 80 的块。详见[本文档][http://nginx.org/en/docs/http/server_names.html]。

如果你不想这样,你需要声明一个默认服务器块。极简主义定义可能是:

server {
    listen 80 default_server;
    listen 443 ssl default_server;

    ssl_certifiate ...;
    ssl_certifiate_key ...;

    return 403;
}

启动Nginx服务需要ssl证书,但可以是任何证书。此外,ssl_certifiate 指令是继承的,因此您可以将默认语句放在 http 块中。

使用return 444;关闭连接,没有任何反应。