我正在使用 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
虚拟主机。