Nginx 使用 SSL 重定向 2 个域名,包括 www

Nginx 使用 SSL 重定向 2 个域名,包括 www

我有一个 .com 和 .co.uk 版本的域名。我希望这些域名的所有组合(包括 www 子域名)都重定向到 https .co.uk 版本。

我所说的每种组合是指以下所有内容都应重定向到https://example.co.uk

http://example.com
https://example.com
http://www.example.com
https://www.example.com
http://example.co.uk
http://www.example.co.uk
https://www.example.co.uk

我认为我已经通过以下方式基本实现了这一目标:

server {
  listen 443 ssl http2;
  server_name example.co.uk;

  ssl_certificate /etc/letsencrypt/live/example.co.uk/fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/live/example.co.uk/privkey.pem;
  include /etc/letsencrypt/options-ssl-nginx.conf;
  ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;

  root /var/www/example.co.uk;
  index index.html;
}

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

server {
  listen 443 ssl;
  server_name www.example.co.uk;
  return 301 https://example.co.uk$request_uri;
}

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

server {
  listen 443 ssl;
  server_name example.com;
  return 301 https://example.co.uk$request_uri;
}

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

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

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

唯一的问题是,当我尝试时https://example.comhttps://www.example.com它会给我一个浏览器隐私错误页面。

我是否需要为两个域名和两个 www 子域名获取单独的 SSL 证书才能使此设置正常工作?所以我最终会得到 4 个证书?

答案1

最简单的方法是获取一个与所有域名匹配的证书。一个证书可以匹配多个名称,这称为主题备用名称 (SAN)。

您可以从 Let's encrypt 免费获得这样的证书,您只需安排对所有域名进行验证。

相关内容