将多个站点(HTTP 和 HTTPS)重定向到单个页面(ngxin - ubuntu)

将多个站点(HTTP 和 HTTPS)重定向到单个页面(ngxin - ubuntu)

我目前有一个浮动 IP,指向托管多个站点的服务器,其中一些站点带有 SSL,其他则没有。

我需要关闭、备份并调整所述服务器的大小 - 并希望在小型 VPS 实例上设置一个简单的保留页面 - 交换浮动 IP,捕获所有流量并重定向。

我使用“servername _”作为通配符来运行它以捕获所有域名,但是(尽管端口是打开的) - 我无法访问 HTTPS 地址上的站点 - 并且当我添加基于方案的重定向(定向到 HTTP)时 - 这似乎没有任何效果?

任何帮助都非常感谢。我想这可能是一个相对简单的 nginx 服务器块。

答案1

根据评论,如果您想捕获 HTTPS 上的流量,则必须定义一个服务器块,为相关域提供正确的 SSL 证书。 SSL 协商发生在您向浏览器发送重定向之前,如果 nginx 无法为域提供有效的证书,则会出现错误。

您只需要一个在端口 80 上监听的服务器块来捕获所有 HTTP 并提供您的静态保存页面;您甚至不需要声明 server_name,因为它大概是唯一与端口 80 流量匹配的块(或者您可以使用它,listen 80 default_server;这样如果您正在为需要分开保存的其他域提供服务,它肯定会被其他未捕获的流量使用)。

我个人建议对于每个 SSL 服务器块,直接提供保存页面,而不是重定向到提供该页面的另一个域(甚至是非 https 的同一域),这样只是为了避免混淆正在抓取您的域的 Google 和其他搜索引擎。

答案2

传统的 SSL 设置要求每个 SSL 证书都有一个唯一的 IP 地址。您还没有提到这是不是您要做的。如果是这种情况,那么仅将一个 IP 指向临时 VPS 不足以使 SSL 站点出现 - SSL 站点的所有 IP 地址也需要指向那里。

最近,SNI 被创建用于允许从单个 IP 地址提供多个 SSL 证书。这种方法的缺点是浏览器支持减少。如果您使用 SNI 或愿意使用,那么您可以从单个 IP 地址为所有域提供服务,无论它们是否需要 SSL。

相关内容