客户站点绑定域名
开发的项目,给客户提供自助建站,允许客户绑定自己的域名并给用户的域名生成ssl证书,目前功能已实现,但是实现过方式略复杂,下面是实现方式,请各位指教看能否优化:
1. 让客户把自有域名解析CNAME到我们指定的地址
实现如下:
我们自己的域名 serv.xxx.com 解析到服务器IP 11.22.33.44,客户把自有域名(比如abc.com)的CNAME解析到 serv.xxx.com
然后在我们平台上绑定该域名时,使用dns_get_record('abc.com', DNS_CNAME) 获取解析结果,检测到域名解析成功后,生成该域名的nginx的配置文件abc.com.conf
程序中根据来源域名判断如果是abc.com做对应逻辑
2. 客户绑定域名后,给客户的域名生成ssl证书并自动续签
实现如下:
使用 `https://packagist.org/packages/afosto/yaac` 这个库向 Let's Encrypt 发请求申请ssl证书,使用http校验域名所有权,申请到ssl证书成功后,把证书内容写入文件,然后根据证书文件路径再修改上一步生成的 abc.com.conf 配置文件中写入ssl相关配置
然后使用计划任务续签域名ssl证书
现在存在的问题如下:
问题1. php的dns_get_record 函数有时候获取到的域名解析结果不同,比如大家可以试试 dns_get_record('learnku.com')
,我这里就会返回两种结果,分别是:
命令行:php -r "print_r(dns_get_record('learnku.com'));"
有时为结果一:
Array
(
[0] => Array
(
[host] => learnku.com
[class] => IN
[ttl] => 3598
[type] => HINFO
[cpu] => RFC8482
[os] =>
)
[1] => Array
(
[host] => learnku.com
[class] => IN
[ttl] => 1152
[type] => NS
[target] => dns7.hichina.com
)
[2] => Array
(
[host] => learnku.com
[class] => IN
[ttl] => 1152
[type] => NS
[target] => dns8.hichina.com
)
)
有时为结果二:
Array
(
[0] => Array
(
[host] => learnku.com
[class] => IN
[ttl] => 3600
[type] => HINFO
[cpu] => RFC8482
[os] =>
)
[1] => Array
(
[host] => learnku.com
[class] => IN
[ttl] => 565
[type] => A
[ip] => 117.50.36.69
)
[2] => Array
(
[host] => learnku.com
[class] => IN
[ttl] => 347
[type] => NS
[target] => dns8.hichina.com
)
[3] => Array
(
[host] => learnku.com
[class] => IN
[ttl] => 347
[type] => NS
[target] => dns7.hichina.com
)
)
问题2. 根据域名生成的nginx配置过多,每个域名都要生成对应的nginx配置,每次生成配置文件后还要对nginx进行reload,没有搜索到在nginx中如何方便的管理多个域名和ssl证书
比如客户的域名是
a00001.com
a00002.com
...
a99998.com
a99999.com
那服务器上就会生成10w个nginx配置文件和保存20w个ssl证书文件(当然现在没有这么多),到时候管理这些配置和ssl证书也会很麻烦
推荐文章: