nginx的子域的SSL重定向重定向顶级域名(nginx subdomain ssl redirec

2019-09-29 15:37发布

我安装在我的子域中的所有HTTP流量重定向到经过HTTPS,但我注意到,当我访问http://mydomain.com它重定向到https://subdomain.mydomain.com 。 没问题,遇到的https://mydomain.com

只是为了澄清,

http://mydomain.com不应该重定向但它currectly重定向到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 ...
}

Answer 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状态代码和可能的消息。 例如

server {
  listen 80;
  server_name mydomain.com;
  return 403 "nothing to see here";
}

您也可以使用default_server这样listen 80 default_server; 确保所有“未配置”主机名会在这个区块



文章来源: nginx subdomain ssl redirect redirects top level domain
标签: nginx