我有许多域名hello1.com
,例如hello2.com
……hello101.com
它们都拥有 Let's encrypt 的 SSL 证书。所有这些域名都需要代理到此 URI http://127.0.0.1:8000
(django
存在,它将处理所有事情)
因此,这是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
选项,例如。certbot
certbot ... -d domain1 -d domain2 -d domain3
无论哪种情况,您都可以include
自己创建可以在多个server
块之间共享的配置片段。