Nginx 将所有子域名重定向到非子域名 URL

Nginx 将所有子域名重定向到非子域名 URL

我目前遇到了以下问题,但天哪,我解决不了。我在谷歌上找到的 20 多个类似帖子都没有帮助。

首先,我创建了一个简单的 HTTP 到 HTTPS 重定向,它看起来像这样:

server {
    listen 80;
    server_name my-domain.com;
    return 301 https://my-domain.com$request_uri;
}

server {
    listen 443 ssl http2;
    server_name my-domain.com;
    ...
}

这完全没问题。如果我尝试打开我的域名.com,我将被重定向到https:// 我的域名.com。但子域名仍然存在问题。如果我打开www.my-domain.com或者测试.my-domain.com,我希望这些子域名重定向到我的根HTTPS域名:https:// my-domain.com。前面没有任何子域名。HTTPS 子域名也应如此。我确实想禁止所有子域名(目前)。

我尝试了很多配置,比如添加*.my-domain.com到 server_name,但这仍然无法按预期工作。我还尝试从 *.my-domain.com 创建 HTTPS 重定向到我的正常 HTTPS 域,但每个配置的结果仍然相似:

  1. 所有 HTTP 请求都会产生包含子域的 HTTPS URL。
  2. 所有 HTTPS 请求都不会导致不包含子域的 HTTPS URL。

现在我的问题是:如何将每个子域(http 和 https)重定向到不包含子域的特定 https URL?每个组合应始终导致:https:// my-domain.com$request_uri

提前致谢

更新:

虽然没有完全解决我的问题,但我可以忍受。我在域配置中创建了一个从 www.my-domain.com 到 my-domain.com 的 CNAME。我还修改了 nginx 并添加了一个新的服务器配置,该配置从 443 www.my-domain 重定向到 https:// my-domain。我还有一个普通的端口 80 服务器,它也从 www.my-domain 重定向到 https:// my-domain。我修改了我的证书并将 www.my-domain 添加到域和子域列表中。现在,www.my-domain(http 或 https)上的每个请求都将重定向到https://我的域名。此外,我的域名(http 且不带 www.)将重定向到https://我的域名也。这似乎满足了我的需求。

答案1

您可以使用一个default_server块来匹配另一个块中未明确定义的任何域http。该部分仅适用于通配符证书。httpsserverhttps

server {
    listen 80 default_server;
    listen 443 ssl default_server;
    ... ssl configuration
    return 301 https://example.com$request_uri;
}

server {
    listen 443 ssl http2;
    ...
}

这个文件了解详情。

相关内容