我为子域上的所有HTTP流量设置了重定向以通过HTTPS,但我注意到当我访问http://mydomain.com
时,它会重定向到https://subdomain.mydomain.com
。 https://mydomain.com
没有遇到任何问题。
只是澄清一下,
http://mydomain.com
不应重定向,但目前会重定向到https://subdomain.mydomain.com
http://subdomain.mydomain.com
应重定向到https://subdomain.mydomain.com
。
这是我的nginx conf
server {
listen *:80;
server_name subdomain.mydomain.com;
server_tokens off;
root /nowhere; # this doesn't have to be a valid path since we are redirecting, you don't have to change it.
rewrite ^ https://$server_name$request_uri permanent;
}
server {
listen 443 ssl;
server_name subdomain.mydomain.com;
server_tokens off;
.... other stuff ...
}
答案 0 :(得分:1)
引自http://nginx.org/en/docs/http/request_processing.html
nginx首先决定哪个服务器应该处理请求。让我们 从简单的配置开始,所有三个虚拟服务器 听口*:80:
server {
listen 80;
server_name example.org www.example.org;
...
}
server {
listen 80;
server_name example.net www.example.net;
...
}
server {
listen 80;
server_name example.com www.example.com;
...
}
在此配置中,nginx仅测试请求的标头字段 “主机”确定应将请求路由到哪个服务器。如果 它的值与任何服务器名称都不匹配,或者请求不匹配 根本包含此标头字段,然后nginx将请求路由到 此端口的默认服务器。在上面的配置中, 默认服务器是第一个 - 这是nginx的标准默认值 行为。
这意味着在您的示例中,当您向http://mydomain.com
发出请求时,唯一可用的服务器块是server_name subdomain.mydomain.com;
块,因此它会重定向到https。最简单的解决方案是创建一个新的服务器块,它只返回一个http状态代码,可能还有一条消息。 E.g。
server {
listen 80;
server_name mydomain.com;
return 403 "nothing to see here";
}
您也可以使用此default_server
之类的listen 80 default_server;
来确保所有“未配置的”主机名都会出现在此块中