如何configurationNGINX SSL(SNI)

我有这个NGINXconfiguration如下:

# jelastic is a wildcard certificate for *.shared-hosting.xyz server { listen 443; server_name _; ssl on; ssl_certificate /var/lib/jelastic/SSL/jelastic.chain; ssl_certificate_key /var/lib/jelastic/SSL/jelastic.key; } # fullchain2 is a certificate for custom domain server { listen 443 ssl; server_name my-custom-domain-demo.xyz www.my-custom-domain-demo.com; ssl_certificate /var/lib/nginx/ssl/my-custom-domain-demo.xyz/fullchain2.pem; ssl_certificate_key /var/lib/nginx/ssl/my-custom-domain-demo.xyz/privkey2.pem; } # additional configuration for other custom domains follows 

NGINX服务器接收具有*.shared-hosting.xyz格式的主机的请求,例如: website1.shared-hosting.xyzwebsite2.shared-hosting.xyz ,也可以与具有不同域名的可变主机如my-custom-domain-demo.xyzanother-custom-domain-demo.xyz

现在问题是较低的server NGINXconfiguration覆盖上面的configuration。 有了它,上层不再工作,并访问*.shared-hosting.xyz返回证书错误,并且浏览器告诉证书仅适用于my-custom-domain-demo.xyz

有什么可以做到这一点,使下面的NGINXconfiguration触发*.shared-hosting.xyz域和每个其他额外的服务器configuration将不会触发时,主机是*.shared-hosting.xyz模式?

server_name _; 是不相关的(在现代版本的nginx并不需要)。 如果找不到匹配listenserver_namenginx将使用默认服务器

如果没有listen指令的default_server后缀, nginx将使用第一个匹配listen server块。

如果您的配置分布在多个文件中,那么评估顺序将不明确,因此您需要明确标记默认服务器。

试试这个jelastic服务器块:

 server { listen 443 ssl default_server; ssl_certificate /var/lib/jelastic/SSL/jelastic.chain; ssl_certificate_key /var/lib/jelastic/SSL/jelastic.key; ... } 

请参阅此文档了解更多