我目前遇到了以下问题,但天哪,我解决不了。我在谷歌上找到的 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 域,但每个配置的结果仍然相似:
- 所有 HTTP 请求都会产生包含子域的 HTTPS URL。
- 所有 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
。该部分仅适用于通配符证书。https
server
https
server {
listen 80 default_server;
listen 443 ssl default_server;
... ssl configuration
return 301 https://example.com$request_uri;
}
server {
listen 443 ssl http2;
...
}
看这个文件了解详情。