NixOS环境下Traefik无法识别Let's Encrypt通配符证书(Nginx可正常使用)
NixOS环境下Traefik无法识别Let's Encrypt通配符证书(Nginx可正常使用)
我看到你在NixOS上用Traefik配置通配符证书时遇到了SSL_ERROR_UNRECOGNIZED_NAME_ALERT错误,而且同一份证书在Nginx里能正常工作,确实挺让人头疼的。我仔细扒了你的配置,发现两个关键问题,咱们一步步来解决:
1. 证书路径拼写错误
你在dynamicConfigOptions.tls.certificates里的私钥路径写错了:
keyFile = "/var/lib/acme/domain/key.pem";
正确路径应该和证书文件的路径保持一致,补上.com后缀:
keyFile = "/var/lib/acme/domain.com/key.pem";
这个拼写错误会直接导致Traefik找不到私钥,自然无法正确加载证书,这是引发当前错误的核心原因。
2. 简化证书配置(避免冗余冲突)
其实你已经通过defaultCertificate设置了全局默认证书,没必要再在certificates节点重复添加相同的证书配置——这种冗余反而可能引发加载冲突。可以直接删掉certificates这一段,只保留defaultCertificate的配置即可,Traefik会自动用这个通配符证书处理所有匹配的域名请求。
修正后的完整Traefik动态配置片段
dynamicConfigOptions = { tls = { stores.default = { defaultCertificate = { certFile = "/var/lib/acme/domain.com/cert.pem"; keyFile = "/var/lib/acme/domain.com/key.pem"; }; }; }; http.routers.hello = { rule = "Host(`hello.domain.com`)"; entryPoints = [ "websecure" ]; service = "hello"; tls = true; }; http.services.hello = { loadBalancer.servers = [{ url = "http://localhost:8000"; }]; }; };
额外检查项
- 权限验证:NixOS里Let's Encrypt证书的默认权限是
root:acme,确保Traefik用户有权限读取这些文件,你可以把traefik加入acme组:
users.users.traefik.extraGroups = [ "docker" "acme" ];
- 重启生效:修改配置后执行
sudo nixos-rebuild switch,让新配置和证书生效。
备注:内容来源于stack exchange,提问作者protob
相关产品推荐
相关产品推荐

