Nginx 支持在同一个监听端口上配置多个虚拟主机(虚拟服务器),并且可以为每个虚拟主机配置不同的域名和证书。通过使用 server 块来实现这一点,每个 server 块可以有自己的域名和 SSL 证书配置。

下面是一个示例配置,展示了如何在同一个监听端口(例如 443 端口)上配置两个不同的域名,并为它们配置不同的 SSL 证书:

# 配置第一个域名
server {
    listen 443 ssl;
    server_name example1.com;

    ssl_certificate /path/to/example1.com.crt;
    ssl_certificate_key /path/to/example1.com.key;

    location / {
        root /var/www/example1;
        index index.html;
    }
}

# 配置第二个域名
server {
    listen 443 ssl;
    server_name example2.com;

    ssl_certificate /path/to/example2.com.crt;
    ssl_certificate_key /path/to/example2.com.key;

    location / {
        root /var/www/example2;
        index index.html;
    }
}

在这个配置中:

  1. listen 443 ssl; 指定 Nginx 监听 443 端口,并启用 SSL。
  2. server_name 指定虚拟主机的域名。
  3. ssl_certificatessl_certificate_key 指定每个域名对应的 SSL 证书和私钥。
  4. location 块内配置了每个域名对应的文档根目录。

这样,当用户访问 https://example1.com 时,Nginx 会使用 example1.com 的证书和配置;当用户访问 https://example2.com 时,Nginx 会使用 example2.com 的证书和配置。

确保你的证书和私钥文件路径正确,并且 Nginx 进程有权限访问这些文件。配置完成后,重新加载 Nginx 配置就可以生效了:

sudo nginx -s reload

可以在 server_name 指令中列出多个域名,Nginx 会解析为同一个虚拟主机,并使用相同的证书和配置。

# 配置 example1.com 和 m.example1.com
server {
    listen 443 ssl;
    server_name example1.com m.example1.com;

    ssl_certificate /path/to/example1.com.crt;
    ssl_certificate_key /path/to/example1.com.key;

    location / {
        root /var/www/example1;
        index index.html;
    }
}