nginx为不应该有证书的子域返回SSL证书

nginx为不应该有证书的子域返回SSL证书,ssl,nginx,https,configuration,server,Ssl,Nginx,Https,Configuration,Server,我有一个nginx服务器,它管理一些域和子域。有些子域拥有自己的SSL证书,并且工作正常。问题是,如果我尝试打开blabla.mydomain.com(此子域未在nginx中配置),firefox会向我显示错误“连接不安全”和“证书仅对xyz.mydomain.com有效”(此域配置了SSL,工作正常) 当我打开根域mydomain.com时也会发生同样的情况。然后服务器还返回被firefox拒绝的xyz.mydomain.com的证书 我只希望nginx为我明确配置了HTTPS的域/子域返回S

我有一个nginx服务器,它管理一些域和子域。有些子域拥有自己的SSL证书,并且工作正常。问题是,如果我尝试打开blabla.mydomain.com(此子域未在nginx中配置),firefox会向我显示错误“连接不安全”和“证书仅对xyz.mydomain.com有效”(此域配置了SSL,工作正常)

当我打开根域mydomain.com时也会发生同样的情况。然后服务器还返回被firefox拒绝的xyz.mydomain.com的证书

我只希望nginx为我明确配置了HTTPS的域/子域返回SSL证书。据我所知,我的配置应该正是这样做的

我将我的所有https子域配置为:

server {
    listen 443 ssl;
    server_name xyz.mydomain.com;
    root /var/www/xyz.mydomain/;

    ssl on;
    ssl_certificate /etc/letsencrypt/live/xyz.mydomain.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/xyz.mydomain.com/privkey.pem;

    ...
}
server {
    listen 80;
    server_name mydomain.com;
    return http://some-redirection.com;
}
根域(不应具有SSL)的配置如下:

server {
    listen 443 ssl;
    server_name xyz.mydomain.com;
    root /var/www/xyz.mydomain/;

    ssl on;
    ssl_certificate /etc/letsencrypt/live/xyz.mydomain.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/xyz.mydomain.com/privkey.pem;

    ...
}
server {
    listen 80;
    server_name mydomain.com;
    return http://some-redirection.com;
}
此域没有SSL服务器块。也不适用于不存在的其他子域。那么,在这些情况下,为什么nginx会返回xyz.mydomain.com的证书呢

我在服务器配置中不使用任何通配符。有什么方法可以调试这个吗?我的意思是,nginx总是为每个未配置的域/子域返回xyz.mydomain.com的证书,这肯定是有原因的。为什么没有另一个配置和工作的证书

我在nginx 1.4.6中使用Ubuntu 14.04服务器

如果你需要更多关于我的配置的信息,请告诉我

编辑:我想我知道为什么我的配置不起作用。使用https时,客户端还会加密域名,这会导致nginx尝试所有可用的服务器定义。当它找不到一个时,返回最后一个?xyz.mydomain.com似乎是最后一个(按字母顺序排列)


那么有没有办法避免这种情况呢?我是否必须为每个其他子域创建ssl证书?

检查您的域是否未在此处定义的可能副本:或使用
HSTS检查您的域是否未在此处定义的可能副本:或使用
HSTS