我已经有一个可以将所有不存在的子域重定向到特定域的工作配置。现在我想添加一个配置,将所有 HTTP 请求重定向到同一域上的 HTTPS。
此配置文件执行子域重定向:
# redirect any non-existent subdomain (blah.domain.de -> domain.de)
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name _;
return 301 https://domain.de$request_uri;
}
这是我尝试用于 HTTP->HTTPS 的配置:
# redirect any HTTP request to its HTTPS address (http://domain.de/blub -> https://domain.de/blub)
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name domain.de mail.domain.de admin.domain.de;
return 301 https://$server_name$request_uri;
}
但这不起作用,因为 default_server 被定义了两次。如何将这两个功能结合起来?
我真的必须将第二个配置添加到每个子域配置吗?
您需要
default_server
从后一个配置中删除并将每个域名添加到该server_name
部分。然后你需要使用
return 301 https://$host$request_uri;
重定向语句。Nginx 不支持嵌套 if 语句(它也不支持复杂条件)。
我让它以另一种方式工作。我通过 SSL 片段将它添加到每个子域配置中。每个子域配置都包含相同的 SSL 配置。所以我在这个配置中添加了一个 http 检查:
这包含在每个子域服务器块配置中:
它做我想要的。也许还有另一种方法,而不将其包含在每个子域中。