diff options
author | Erik Dubbelboer <erik@dubbelboer.com> | 2020-07-11 20:40:19 +0200 |
---|---|---|
committer | Erik Dubbelboer <erik@dubbelboer.com> | 2020-07-11 20:40:19 +0200 |
commit | f97a382d80953ea8d48f7cb021d3924396833284 (patch) | |
tree | 30092c1998ab0a7db5af6bc7522e82b5df22e17f /examples | |
parent | update link to router package (#842) (diff) | |
download | fasthttp-f97a382d80953ea8d48f7cb021d3924396833284.tar.gz fasthttp-f97a382d80953ea8d48f7cb021d3924396833284.tar.bz2 fasthttp-f97a382d80953ea8d48f7cb021d3924396833284.zip |
Add letsencrypt example
Diffstat (limited to 'examples')
-rw-r--r-- | examples/letsencrypt/letsencryptserver.go | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/examples/letsencrypt/letsencryptserver.go b/examples/letsencrypt/letsencryptserver.go new file mode 100644 index 0000000..b6a0b91 --- /dev/null +++ b/examples/letsencrypt/letsencryptserver.go @@ -0,0 +1,40 @@ +package main + +import ( + "crypto/tls" + "net" + + "github.com/valyala/fasthttp" + "golang.org/x/crypto/acme" + "golang.org/x/crypto/acme/autocert" +) + +func requestHandler(ctx *fasthttp.RequestCtx) { + ctx.SetBodyString("hello from https!") +} + +func main() { + m := &autocert.Manager{ + Prompt: autocert.AcceptTOS, + HostPolicy: autocert.HostWhitelist("example.com"), // Replace with your domain. + Cache: autocert.DirCache("./certs"), + } + + cfg := &tls.Config{ + GetCertificate: m.GetCertificate, + NextProtos: []string{ + "http/1.1", acme.ALPNProto, + }, + } + + ln, err := net.Listen("tcp4", "0.0.0.0:443") // Let's Encrypt tls-alpn-01 only works on port 443. + if err != nil { + panic(err) + } + + lnTls := tls.NewListener(ln, cfg) + + if err := fasthttp.Serve(lnTls, requestHandler); err != nil { + panic(err) + } +} |