Skip to content

Commit 731fa16

Browse files
albb0920willnorris
authored andcommitted
cmd/imageproxy: add support for listening on Unix socket
Allows listening to Unix domain socket with the `-addr` option. The syntax is `unix:path`. (same as nginx `listen` directive)
1 parent 816f1a6 commit 731fa16

File tree

1 file changed

+16
-3
lines changed

1 file changed

+16
-3
lines changed

cmd/imageproxy/main.go

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import (
88
"flag"
99
"fmt"
1010
"log"
11+
"net"
1112
"net/http"
1213
"net/url"
1314
"os"
@@ -30,7 +31,7 @@ import (
3031

3132
const defaultMemorySize = 100
3233

33-
var addr = flag.String("addr", "localhost:8080", "TCP address to listen on")
34+
var addr = flag.String("addr", "localhost:8080", "address to listen on, either a TCP address or a Unix domain socket path prefixed with unix:")
3435
var allowHosts = flag.String("allowHosts", "", "comma separated list of allowed remote hosts")
3536
var denyHosts = flag.String("denyHosts", "", "comma separated list of denied remote hosts")
3637
var referrers = flag.String("referrers", "", "comma separated list of allowed referring hosts")
@@ -92,6 +93,18 @@ func main() {
9293
p.MinimumCacheDuration = *minCacheDuration
9394
p.ForceCache = *forceCache
9495

96+
var ln net.Listener
97+
var err error
98+
99+
if path, ok := strings.CutPrefix(*addr, "unix:"); ok {
100+
ln, err = net.Listen("unix", path)
101+
} else {
102+
ln, err = net.Listen("tcp", *addr)
103+
}
104+
if err != nil {
105+
log.Fatalf("listen failed: %v", err)
106+
}
107+
95108
server := &http.Server{
96109
Addr: *addr,
97110
Handler: p,
@@ -101,8 +114,8 @@ func main() {
101114
IdleTimeout: 120 * time.Second,
102115
}
103116

104-
fmt.Printf("imageproxy listening on %s\n", server.Addr)
105-
log.Fatal(server.ListenAndServe())
117+
fmt.Printf("imageproxy listening on %s\n", *addr)
118+
log.Fatal(server.Serve(ln))
106119
}
107120

108121
type signatureKeyList [][]byte

0 commit comments

Comments
 (0)