Send headers to FastCGI server

This commit is contained in:
Trevor Slocum 2020-11-04 13:07:06 -08:00
parent 5e9515ff09
commit 8e2e404a81
2 changed files with 13 additions and 11 deletions

View file

@ -10,7 +10,6 @@ import (
"regexp" "regexp"
"strconv" "strconv"
"strings" "strings"
"time"
"github.com/kballard/go-shellquote" "github.com/kballard/go-shellquote"
"github.com/yookoala/gofast" "github.com/yookoala/gofast"
@ -60,7 +59,7 @@ type serverConfig struct {
hostname string hostname string
port int port int
fcgiPools map[string]*gofast.ClientPool fcgiPools map[string]gofast.ConnFactory
} }
var config *serverConfig var config *serverConfig
@ -102,7 +101,7 @@ func readconfig(configPath string) error {
} }
} }
config.fcgiPools = make(map[string]*gofast.ClientPool) config.fcgiPools = make(map[string]gofast.ConnFactory)
for hostname, host := range config.Hosts { for hostname, host := range config.Hosts {
if host.Cert == "" || host.Key == "" { if host.Cert == "" || host.Key == "" {
log.Fatal("a certificate must be specified for each domain (gemini requires TLS for all connections)") log.Fatal("a certificate must be specified for each domain (gemini requires TLS for all connections)")
@ -140,9 +139,7 @@ func readconfig(configPath string) error {
log.Fatalf("failed to parse fastcgi resource %s: %s", serve.FastCGI, err) log.Fatalf("failed to parse fastcgi resource %s: %s", serve.FastCGI, err)
} }
connFactory := gofast.SimpleConnFactory(f.Scheme, f.Host+f.Path) config.fcgiPools[serve.FastCGI] = gofast.SimpleConnFactory(f.Scheme, f.Host+f.Path)
clientFactory := gofast.SimpleClientFactory(connFactory, 0)
config.fcgiPools[serve.FastCGI] = gofast.NewClientPool(clientFactory, 1, 1*time.Minute)
} }
} else if serve.Command != "" { } else if serve.Command != "" {
serve.cmd, err = shellquote.Split(serve.Command) serve.cmd, err = shellquote.Split(serve.Command)

View file

@ -32,22 +32,27 @@ func (w *responseWriter) WriteHeader(statusCode int) {
// Do nothing // Do nothing
} }
func serveFastCGI(c net.Conn, clientPool *gofast.ClientPool, reqURL *url.URL, filePath string) { func serveFastCGI(c net.Conn, connFactory gofast.ConnFactory, u *url.URL, filePath string) {
header := map[string][]string{
"Accept": {"*/*"},
"Host": {u.Hostname()},
}
r := &http.Request{ r := &http.Request{
Method: "GET", Method: "GET",
URL: reqURL, URL: u,
Proto: "HTTP/1.1", Proto: "HTTP/1.1",
ProtoMajor: 1, ProtoMajor: 1,
ProtoMinor: 1, ProtoMinor: 1,
Header: make(http.Header), Header: header,
Body: ioutil.NopCloser(bytes.NewReader(nil)), Body: ioutil.NopCloser(bytes.NewReader(nil)),
Host: reqURL.Host, Host: u.Host,
} }
gofast. gofast.
NewHandler( NewHandler(
gofast.NewFileEndpoint(filePath)(gofast.BasicSession), gofast.NewFileEndpoint(filePath)(gofast.BasicSession),
clientPool.CreateClient, gofast.SimpleClientFactory(connFactory, 0),
). ).
ServeHTTP(newResponseWriter(c), r) ServeHTTP(newResponseWriter(c), r)