多个应用程序(vhosts)的 HTTPS 上的 Nginx server_name 问题

多个应用程序(vhosts)的 HTTPS 上的 Nginx server_name 问题

我在服务器上有两个应用程序,它们一直运行良好,直到我计划将它们切换到 HTTPS。

应用程序 1 的 Nginx 配置:

server_name abc.com my.abc.com static.abc.com

应用程序 2 的配置:

server_name _;

在启用 SSL 之前,两个应用程序都可以运行,例如

应用1http://static.abc.com/some-assets.png

应用2http://static.def.com/some-assets.png

启用 SSL 后

应用1https://static.abc.com/some-assets.png

应用2https://static.def.com/some-assets.png

如果我现在尝试访问 App2,https://static.def.com/some-assets.png它也会以某种方式指向 App 1。

我尝试深入研究并发现,如果我在 App 2 中用 Nginx 配置替换它,它就会开始工作server_name _;server_name static.def.com;

我的问题是,如果要通过 HTTPS 提供域,Nginx 是否需要明确定义域?还是 SSL 握手失败等原因导致这种情况?

更新:

Nginx 配置文件:

配置文件

配置文件

答案1

正如 Johannes 所说,我认为你误解了“什么都没有”的_含义server_name。大多数指南都将其包含在其默认的万能服务器中,以确保它不会干扰任何命名的虚拟服务器。

您在阅读时一定遗漏了一点(或者可能是撰写您阅读内容的人遗漏了这一点),即正确的默认服务器实际上将该default_server选项作为listen指令的一部分。请阅读 nginx.org/r/listen 了解更多信息。

答案2

这可能取决于服务器定义的顺序。_不是特殊名称,它只是一个无效域,因此永远不会匹配。这使得 与其他主机服务器定义中的服务器名称相同,例如static.def.com: 两者都不匹配。如果完全不匹配,nginx 将只采用第一个服务器定义。

相关内容