如果你和我一样,给站点使用的 HTTPS 证书是用 letsencrypt.sh 脚本来生成的,也许你会遇到和我类似的情况。
如果手里有两个子域名,分别用于不同的站点,而想用同一个证书,该怎么办?先看一眼的配置文件的内容:
1 2 3 4 5 6 7 |
# only modify the values, key files will be generated automaticly. ACCOUNT_KEY="letsencrypt-account.key" DOMAIN_KEY="business.com.key" DOMAIN_DIR="/var/business-www" DOMAINS="DNS:business.com,DNS:www.business.com" #ECC=TRUE #LIGHTTPD=TRUE |
显然,DOMAINS 是支持配置不止一个域名进去的。可是,在申请证书的过程中,远程会对域名指向的站点进行所有权的验证,脚本会向 DOMAIN_DIR 指向的目录下写入一个文件,而远程使用域名对该文件进行访问。问题来了,除非要配置的这不止一个域名均互相为别名,否则它们的站点内容就不在同一个路径下,而 DOMAIN_DIR 里却只能有一个路径。
笔者的解决方案是,在各个站点的根路径下使用符号链接来指向同一个实际的目标路径,将此目标路径写入 DOMAIN_DIR,这样,本地的脚本执行时都写往该路径下,而所有的站点又都能以自己的域名形式访问到响应文件,问题就得到了解决。
顺便记录一下在 nginx 的配置里,如何禁用以 . 号开头的访问但同时又放开 letsencrypt 需要的 .well-known:
1 2 3 4 5 6 |
location ~ /\. { deny all; } location ^~ /.well-known/ { } |