Add the possiblity to listen on Unix socket
This commit is contained in:
parent
becd086865
commit
1315282c7f
2 changed files with 32 additions and 5 deletions
|
@ -89,7 +89,9 @@ Maximum number of database connections (default is 20)\&.
|
|||
Minimum number of database connections (default is 1)\&.
|
||||
.TP
|
||||
.B LISTEN_ADDR
|
||||
HTTP server listening address\&.
|
||||
Address to listen on. Default is 127.0.0.1:8080\&.
|
||||
.br
|
||||
Use absolute path to listen on Unix socket (/var/run/miniflux.sock)\&.
|
||||
.TP
|
||||
.B PORT
|
||||
Override LISTEN_ADDR to 0.0.0.0:$PORT\&.
|
||||
|
|
|
@ -6,7 +6,10 @@ package httpd // import "miniflux.app/service/httpd"
|
|||
|
||||
import (
|
||||
"crypto/tls"
|
||||
"net"
|
||||
"net/http"
|
||||
"os"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"miniflux.app/api"
|
||||
|
@ -29,27 +32,49 @@ func Serve(cfg *config.Config, store *storage.Storage, pool *worker.Pool, feedHa
|
|||
keyFile := cfg.KeyFile()
|
||||
certDomain := cfg.CertDomain()
|
||||
certCache := cfg.CertCache()
|
||||
listenAddr := cfg.ListenAddr()
|
||||
server := &http.Server{
|
||||
ReadTimeout: 30 * time.Second,
|
||||
WriteTimeout: 30 * time.Second,
|
||||
IdleTimeout: 60 * time.Second,
|
||||
Addr: cfg.ListenAddr(),
|
||||
Handler: setupHandler(cfg, store, feedHandler, pool),
|
||||
}
|
||||
|
||||
if certDomain != "" && certCache != "" {
|
||||
switch {
|
||||
case strings.HasPrefix(listenAddr, "/"):
|
||||
startUnixSocketServer(server, listenAddr)
|
||||
case certDomain != "" && certCache != "":
|
||||
cfg.IsHTTPS = true
|
||||
startAutoCertTLSServer(server, certDomain, certCache)
|
||||
} else if certFile != "" && keyFile != "" {
|
||||
case certFile != "" && keyFile != "":
|
||||
cfg.IsHTTPS = true
|
||||
server.Addr = listenAddr
|
||||
startTLSServer(server, certFile, keyFile)
|
||||
} else {
|
||||
default:
|
||||
server.Addr = listenAddr
|
||||
startHTTPServer(server)
|
||||
}
|
||||
|
||||
return server
|
||||
}
|
||||
|
||||
func startUnixSocketServer(server *http.Server, socketFile string) {
|
||||
os.Remove(socketFile)
|
||||
|
||||
go func(sock string) {
|
||||
listener, err := net.Listen("unix", sock)
|
||||
if err != nil {
|
||||
logger.Fatal(`Server failed to start: %v`, err)
|
||||
}
|
||||
defer listener.Close()
|
||||
|
||||
logger.Info(`Listening on Unix socket %q`, sock)
|
||||
if err := server.Serve(listener); err != http.ErrServerClosed {
|
||||
logger.Fatal(`Server failed to start: %v`, err)
|
||||
}
|
||||
}(socketFile)
|
||||
}
|
||||
|
||||
func startAutoCertTLSServer(server *http.Server, certDomain, certCache string) {
|
||||
server.Addr = ":https"
|
||||
certManager := autocert.Manager{
|
||||
|
|
Loading…
Reference in a new issue