Nginx 中有许多带 SSL 的域名

Nginx 中有许多带 SSL 的域名

我有许多域名hello1.com,例如hello2.com……hello101.com 它们都拥有 Let's encrypt 的 SSL 证书。所有这些域名都需要代理到此 URI http://127.0.0.1:8000django存在,它将处理所有事情)

因此,这是Nginx一个域的配置:

server {
    listen  80 default_server;
    return 404;
}

server {
    listen 443 ssl;
    server_name         hello.com;

    location ~ ^/(static|media)/ {
        root            /hosting/hello/files;
        expires         30d;
    }
    location / {
         proxy_set_header Host $host;
         proxy_set_header X-Forwarded-For $remote_addr;
         proxy_set_header X-Forwarded-Proto https;
         proxy_pass     http://127.0.0.1:8000;
         proxy_set_header Accept-Encoding  "";
    }

    ssl_certificate /etc/letsencrypt/live/hello.com/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/hello.com/privkey.pem; # managed by Certbot

    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot

}

但如果我想配置我所有的服务器,就会有很多重复的代码行,而且很难维护。

每个域只有 3 行配置不同:

server_name        <domain>.com;
ssl_certificate /etc/letsencrypt/live/<domain>.com/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/<domain>.com/privkey.pem; # managed by Certbot

我怎样才能将所有其他线路移动到一个位置?我不想重复此配置 100 次。


UPD:我可以使用通配符server_name或列出所有域,如下所示:

server_name   hello1.com hello2.com hello3.com etc.

然后我需要将当前域名(它在$host变量中吗?)放入这两个字符串中:

ssl_certificate /etc/letsencrypt/live/<domain>/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/<domain>/privkey.pem;

我该怎么做?

答案1

如果每个名称使用不同的 TLS 证书,那么您还需要有单独的server块。

如果您拥有同一份 TLS 证书上的所有名称,那么这些服务器名称也可以共享同一个server块。要创建这样的证书,您需要同时提供多个-d选项,例如。certbotcertbot ... -d domain1 -d domain2 -d domain3

无论哪种情况,您都可以include自己创建可以在多个server块之间共享的配置片段。

相关内容