88 "flag"
99 "fmt"
1010 "log"
11+ "net"
1112 "net/http"
1213 "net/url"
1314 "os"
@@ -30,7 +31,7 @@ import (
3031
3132const 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: " )
3435var allowHosts = flag .String ("allowHosts" , "" , "comma separated list of allowed remote hosts" )
3536var denyHosts = flag .String ("denyHosts" , "" , "comma separated list of denied remote hosts" )
3637var 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
108121type signatureKeyList [][]byte
0 commit comments