我为子域上的所有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 ...
}
引用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状态代码并可能返回一条消息。例如
server {
listen 80;
server_name mydomain.com;
return 403 "nothing to see here";
}
您也可以使用default_server
像这样listen 80 default_server;
来确保所有“未配置”主机名会在这个区块
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句