diff --git a/lib/gat/listen.go b/lib/gat/listen.go
index 7204a61222fa347492060a8c196ee5d1b02be5f8..b68fcd8078c449985fbcd7f44cc7baa8c28d6029 100644
--- a/lib/gat/listen.go
+++ b/lib/gat/listen.go
@@ -5,6 +5,8 @@ import (
 	"encoding/json"
 	"fmt"
 	"net"
+	"os"
+	"path/filepath"
 	"strconv"
 	"strings"
 
@@ -80,6 +82,11 @@ func (T *Listener) Provision(ctx caddy.Context) error {
 }
 
 func (T *Listener) Start() error {
+	if T.networkAddress.Network == "unix" {
+		if err := os.MkdirAll(filepath.Dir(T.networkAddress.Host), 0o660); err != nil {
+			return err
+		}
+	}
 	listener, err := T.networkAddress.Listen(context.Background(), 0, net.ListenConfig{})
 	if err != nil {
 		return err