Nginx配置多个HTTPS域名的方法

  

Nginx是一款强大的Web服务器和反向代理服务器,同时也是配置HTTPS域名的首选工具之一。本文将详细介绍如何通过Nginx配置多个HTTPS域名,并给出两个示例。

步骤一:生成 SSL 证书

首先,我们需要为每个HTTPS域名生成SSL证书。可以使用ACME自动化工具,例如Certbot或Let’s Encrypt,来生成代码。以下是通过Certbot生成SSL证书的步骤:

  1. 安装 Certbot,具体安装方法可以参考官方文档,这里不再赘述。
  2. 运行以下命令来生成SSL证书:
sudo certbot certonly --standalone -d example.com -d www.example.com

在此示例中,example.comwww.example.com是您要设置的HTTPS域名。

  1. 证书生成后,可以在/etc/letsencrypt/live/目录下找到证书和相关密钥文件。

步骤二:配置 Nginx

Nginx配置多个HTTPS域名的方法是将每个域名的配置放入在单独的服务器块中。以下是配置示例:

server {
    listen 443 ssl;
    server_name example.com;
    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;

    # 以下是每个HTTPS域名特有的配置
    location / {
        root /var/www/example.com;
        index index.html;
    }
}

server {
    listen 443 ssl;
    server_name www.example.com;
    ssl_certificate /etc/letsencrypt/live/www.example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/www.example.com/privkey.pem;

    # 以下是每个HTTPS域名特有的配置
    location / {
        root /var/www/www.example.com;
        index index.html;
    }
}

在示例中,每个HTTPS域名都有自己的服务器块,并使用相应的SSL证书和密钥文件。另外,每个服务器块中还包含用于该特定域名的单独配置。

步骤三:测试 Nginx 配置

在配置完Nginx后,可以使用以下命令来测试配置。

sudo nginx -t

如果输出“nginx:configuration file /etc/nginx/nginx.conf syntax is ok”和“nginx:configuration file /etc/nginx/nginx.conf test is successful”,那么配置文件就没有问题。如果有问题,则会输出相应的错误信息。

步骤四:重载 Nginx 配置

在测试完成后,使用以下命令重载Nginx配置。

sudo systemctl reload nginx

重载配置后,Nginx将重新读取配置文件并加载相应的HTTPS配置。

示例一:配置多个域名

server {
    listen 443 ssl;
    server_name example.com;
    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;

    location / {
        root /var/www/example.com;
        index index.html;
    }
}

server {
    listen 443 ssl;
    server_name www.example.com;
    ssl_certificate /etc/letsencrypt/live/www.example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/www.example.com/privkey.pem;

    location / {
        root /var/www/www.example.com;
        index index.html;
    }
}

在示例中,我们配置了两个HTTPS域名:example.comwww.example.com,并将它们放置在不同的服务器块中。每个服务器块包含单独的SSL证书和密钥,并为特定域名提供其自己的配置。

示例二:配置反向代理

server {
    listen 443 ssl;
    server_name proxy.example.com;
    ssl_certificate /etc/letsencrypt/live/proxy.example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/proxy.example.com/privkey.pem;

    location / {
        proxy_pass http://backend.example.com;
        proxy_set_header Host $http_host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

在示例中,我们使用Nginx配置HTTPS反向代理。带有HTTPS交通的代理服务器使用proxy.example.com这一HTTPS域名进行通讯,并将请求转发到backend.example.com这个Web服务器上。原始HTTP头会通过代理服务器向后端服务器传递,从而使后端服务器能够了解原始请求中使用的域名和IP地址。

总结

通过本文,您应该已经了解到如何使用Nginx配置多个HTTPS域名,以及如何使用反向代理设置HTTPS域名。无论您是为自己的网站配置HTTPS域名,还是为他人的网站配置HTTPS域名,使用本文提供的步骤和示例来完成设置总是很容易。

相关文章