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;
}
}
在这个配置中:
listen 443 ssl;
指定 Nginx 监听 443 端口,并启用 SSL。server_name
指定虚拟主机的域名。ssl_certificate
和ssl_certificate_key
指定每个域名对应的 SSL 证书和私钥。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;
}
}