我有这个NGINX配置,如下所示:
# 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.xyz
,website2.shared-hosting.xyz
以及具有不同域(例如my-custom-domain-demo.xyz
或another-custom-domain-demo.xyz
等)的变量主机。现在的问题是,较低的
server
NGINX配置将覆盖较高的配置。有了它,鞋帮不再工作了,并访问
*.shared-hosting.xyz
会返回证书错误,并且浏览器告诉该证书仅适用于my-custom-domain-demo.xyz
。这样做可以使较低的NGINX配置触发
*.shared-hosting.xyz
域,而其他所有其他服务器配置都不会触发当主机处于
*.shared-hosting.xyz
模式时? 最佳答案
server_name _;
是无关的(现代nginx
不需要)。如果找不到具有匹配的server
和listen
的server_name
,则nginx
将使用默认服务器。
在没有default_server
指令的listen
后缀的情况下,nginx
将使用第一个server
块和匹配的listen
。
如果您的配置分散在多个文件中,则评估顺序将不明确,因此您需要显式标记默认服务器。
对于jelastic
服务器块,请尝试以下操作:
server {
listen 443 ssl default_server;
ssl_certificate /var/lib/jelastic/SSL/jelastic.chain;
ssl_certificate_key /var/lib/jelastic/SSL/jelastic.key;
...
}
有关更多信息,请参见this document。