我有一个管理一些域和子域的nginx服务器。有些子域具有自己的SSL证书,它们工作正常。问题是,如果我尝试打开blablabla.mydomain.com(此子域未在nginx中配置),则firefox会向我显示错误"连接不安全"和"证书仅对xyz.mydomain.com有效。" (此域配置了SSL并且运行良好)
当我打开根域mydomain.com时也会发生同样的情况。然后服务器还返回xyz.mydomain.com的证书,该证书被firefox拒绝。
我只希望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;
...
}
根域(应该没有SSL)配置如下:
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证书?