Skip to content

Commit bbb9aca

Browse files
committed
Add support for UNIX domain socket
Allows listening to UNIX domain socket with the `-addr` option. The syntax is `unix:path`. (same as NGINX `listen` directive)
1 parent c08b3c5 commit bbb9aca

File tree

1 file changed

+19
-8
lines changed

1 file changed

+19
-8
lines changed

cmd/imageproxy/main.go

Lines changed: 19 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import (
2020
"fmt"
2121
"io/ioutil"
2222
"log"
23+
"net"
2324
"net/http"
2425
"net/url"
2526
"os"
@@ -43,7 +44,7 @@ import (
4344

4445
const defaultMemorySize = 100
4546

46-
var addr = flag.String("addr", "localhost:8080", "TCP address to listen on")
47+
var addr = flag.String("addr", "localhost:8080", "address to listen on, could be either a TCP address or a UNIX domain socket path prefixed with unix:")
4748
var allowHosts = flag.String("allowHosts", "", "comma separated list of allowed remote hosts")
4849
var denyHosts = flag.String("denyHosts", "", "comma separated list of denied remote hosts")
4950
var referrers = flag.String("referrers", "", "comma separated list of allowed referring hosts")
@@ -97,15 +98,25 @@ func main() {
9798
p.Verbose = *verbose
9899
p.UserAgent = *userAgent
99100

100-
server := &http.Server{
101-
Addr: *addr,
102-
Handler: p,
103-
}
104-
105101
r := mux.NewRouter().SkipClean(true).UseEncodedPath()
106102
r.PathPrefix("/").Handler(p)
107-
fmt.Printf("imageproxy listening on %s\n", server.Addr)
108-
log.Fatal(http.ListenAndServe(*addr, r))
103+
104+
fmt.Printf("imageproxy listening on %s\n", *addr)
105+
106+
var listener net.Listener
107+
var err error
108+
109+
if strings.HasPrefix(*addr, "unix:") {
110+
listener, err = net.Listen("unix", (*addr)[5:])
111+
} else {
112+
listener, err = net.Listen("tcp", *addr)
113+
}
114+
115+
if err != nil {
116+
log.Fatalf("listen failed: %v", err)
117+
}
118+
119+
log.Fatal(http.Serve(listener, r))
109120
}
110121

111122
type signatureKeyList [][]byte

0 commit comments

Comments
 (0)