nginx子域SSL重定向重定向顶级域

Sunnyrjuneja

我为子域上的所有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 ...
}
foibs

引用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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章