在一台主机上重定向多个域的正确方法 - NGINX

bsk*_*ool 3 nginx

在这个例子中,我在 2 个不同的 CMS 和 5 个不同的域上有 4 个网站。

a.com sub.a.com b.com c.com在 CMS1
d.com在 CMS2

http应该重定向到https
a.com www.a.com www.sub.a.comsub.a.com
www.b.comb.com
www.c.comc.com
www.d.comd.com

每个域都有自己独立的网站,由其公共 CMS 处理。例如,这意味着,即使b.comc.com使用相同的CMS,管理面板和根目录; 前端提供的页面完全不同。此功能由 CMS 处理。

由于这种配置,我有 2 个 .conf 文件用于 NGINX,一个用于域 ac,一个用于域 d。

问题来了。以下是我到目前为止提出的但并不像我上面概述的那样工作。域www.a.com-www.c.com似乎都重定向到sub.a.com. www.sub.a.com不会重定向到sub.a.com. 我看这一切都错了吗?

一个.com.conf

server {
  listen 80;
  server_name a.com www.a.com sub.a.com www.sub.a.com b.com www.b.com c.com www.c.dom;
  return 301 https://$server_name$request_uri;
}

server {
  listen 443 ssl;
  server_name www.a.com www.sub.a.com;
  return 301 https://sub.a.com$request_uri;
}

server {
  listen 443 ssl;
  server_name www.b.com;
  return 301 https://b.com$request_uri;
}

server {
  listen 443 ssl;
  server_name www.c.com;
  return 301 https://c.com$request_uri;
}

server {
  listen 443 ssl;
  server_name a.com sub.a.com b.com c.com;
  root /srv/a.com/www;
  include snippets/ssl-a.com.conf;
  include snippets/ssl-params.conf;
  # REST OF CONFIG
}
Run Code Online (Sandbox Code Playgroud)

d.com.conf

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

server {
  listen 443 ssl;
  server_name www.d.com;
  return 301 https://d.com$request_uri;
}

server {
  listen 443 ssl;
  server_name d.com;
  root /srv/d.com/www;
  include snippets/ssl-d.com.conf;
  include snippets/ssl-params.conf;
  # REST OF CONFIG
}
Run Code Online (Sandbox Code Playgroud)

Ric*_*ith 5

如果要选择用于发出请求的名称,则应使用$host而不是。有关更多信息,请参阅此文档$server_namenginx

例如:

server {
    listen 80;
    server_name a.com www.a.com sub.a.com www.sub.a.com b.com www.b.com c.com www.c.dom;
    return 301 https://$host$request_uri;
}
Run Code Online (Sandbox Code Playgroud)