我在服务器上有两个应用程序,它们一直运行良好,直到我计划将它们切换到 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 将只采用第一个服务器定义。