You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.22 13:59:38