将 http 重定向到 https 但排除一些

将 http 重定向到 https 但排除一些

我正在使用 nginx,我想知道是否可以做到这一点。

现在要管理我的虚拟主机,我在 /etc/nginx/sites-available 中单独创建它们(之后激活它们)

mydomain.com
subdomain.mydomain.com
subdomain1.mydomain.com
anotherdomain.com

因此,为了将 http 重定向到 https,我创建了一个重定向 vhost,其中包含:

server {
        listen 80 default_server;
        listen [::]:80 default_server;
        server_name _;
        return 301 https://$host$request_uri;
}

mydomain.com 和所有其他子域名均采用 https。

但问题是 anotherdomain.com,我不想将其重定向到 https。在这里我不知道该怎么做。我有一个想法:

仅在包含所有配置的 vhost 上创建,并执行以下操作:

# Config of anotherdomain.com

# Redirect all domain/subdomain after this part to https
server {
        listen 80 default_server;
        listen [::]:80 default_server;
        server_name _;
        return 301 https://$host$request_uri;
}

# Config of mydomain.com
# Config of subdomain.com
# Config of subdomain1.com

这将会起到一种覆盖的作用,就像在 CSS 中一样?

感谢您的反馈意见。

答案1

通常,每个域/子域都有一个转发块。我以前从未见过使用 default_server 进行重定向,但在大多数情况下,这可能是可行的。

因此,不要使用默认服务器,而是按如下方式定义一个块,可以只针对相关域,也可以针对每个域定义一个块

server {
  listen 80;
  server_name anotherdomain.com;

  location / {
    // whatever
  }
}

这将覆盖 default_server 块。我个人会按域为每个网站定义转发块,因为这样看起来更简洁。

server {
  listen 80;
  server_name example.com;
  return 301 https://example.com$request_uri;
}

答案2

default_server是当请求与任何其他虚拟主机不匹配时使用的虚拟主机。

因此,您需要定义一个anotherdomain.com与端口 80 匹配的虚拟主机。nginx 将使用该配置而不是您的default_server虚拟主机。

相关内容