Caddy Server Certmagic - 无效的内存地址

Caddy Server Certmagic - invalid memory address

我正在尝试使用 certmagic 设置服务器,但每次我 运行 代码时,我都会收到下面的堆栈消息,我在网上看到的所有地方都说你只需要做 certmagic.HTTPS([]string{"my-domain.com"}, router)但这里一定少了什么?

panic: runtime error: invalid memory address or nil pointer dereference
[signal SIGSEGV: segmentation violation code=0x1 addr=0x0 pc=0x6dd407]

goroutine 1 [running]:
go.uber.org/zap.(*Logger).check(0x0, 0xff, 0xc000026858, 0x11, 0xc000064f40)
    /.../go/pkg/mod/go.uber.org/zap@v1.17.0/logger.go:265 +0x987
go.uber.org/zap.(*Logger).Debug(0x0, 0xc000026858, 0x11, 0xc000064f40, 0x1, 0x1)
    /.../go/pkg/mod/go.uber.org/zap@v1.17.0/logger.go:180 +0x45
github.com/caddyserver/certmagic.(*Config).obtainCert.func2(0x8f2e70, 0xc0000240e0, 0x8f5370, 0xb14d30)
    /.../go/pkg/mod/github.com/caddyserver/certmagic@v0.14.0/config.go:511 +0x5c5
github.com/caddyserver/certmagic.(*Config).obtainCert(0xc0000952c0, 0x8f2e70, 0xc0000240e0, 0x873baf, 0x16, 0x1, 0x0, 0x0)
    /.../go/pkg/mod/github.com/caddyserver/certmagic@v0.14.0/config.go:566 +0x3a8
github.com/caddyserver/certmagic.(*Config).ObtainCertSync(...)
    /.../go/pkg/mod/github.com/caddyserver/certmagic@v0.14.0/config.go:421
github.com/caddyserver/certmagic.(*Config).manageOne.func1(0x842da0, 0xc000064400)
    /.../go/pkg/mod/github.com/caddyserver/certmagic@v0.14.0/config.go:334 +0x412
github.com/caddyserver/certmagic.(*Config).manageOne(0xc0000952c0, 0x8f2e70, 0xc0000240e0, 0x873baf, 0x16, 0x0, 0x0, 0x8f5370)
    /.../go/pkg/mod/github.com/caddyserver/certmagic@v0.14.0/config.go:361 +0x27b
github.com/caddyserver/certmagic.(*Config).manageAll(0xc0000952c0, 0x8f2e70, 0xc0000240e0, 0xc000020f60, 0x1, 0x1, 0xb45100, 0x0, 0x0)
    /.../go/pkg/mod/github.com/caddyserver/certmagic@v0.14.0/config.go:312 +0x1f1
github.com/caddyserver/certmagic.(*Config).ManageSync(...)
    /.../go/pkg/mod/github.com/caddyserver/certmagic@v0.14.0/config.go:251
github.com/caddyserver/certmagic.HTTPS(0xc000020f60, 0x1, 0x1, 0x8ec800, 0xc0000da0c0, 0x0, 0x0)
    /.../go/pkg/mod/github.com/caddyserver/certmagic@v0.14.0/certmagic.go:76 +0xdb
main.main()
    /var/www/test/main.go:17 +0xe7

代码是目前的最低限度,只是从头开始,了解它是如何工作的,然后再考虑将其扩展到其他项目

package main

import (
    "github.com/caddyserver/certmagic"
    "github.com/gorilla/mux"
    "log"
    "net/http"
)

func main() {
    router := mux.NewRouter()
    router.HandleFunc("/", func (w http.ResponseWriter, r *http.Request) {
        _, _ = w.Write([]byte("Hello world"))
    })
    log.Fatal(certmagic.HTTPS([]string{"my-domain.com"}, router))
}

甚至更简单(以及 certmagic 上提供的示例)得到相同的错误堆栈

func main() {
    handler := http.HandlerFunc(func (w http.ResponseWriter, r *http.Request) {
        _, _ = w.Write([]byte("Hello world"))
    })
    certmagic.HTTPS([]string{"my-domain.com"}, handler)
}

这是 certmagic 中的已知错误,已修复并合并。

您可以在此处查看详细信息:https://github.com/caddyserver/certmagic/pull/135

他们似乎经常发布,所以可以等待几天等待新版本,或者同时使用主分支而不是 v0.14.0。