Don't append port to unix sockets

See https://caddy.community/t/caddy-v2-php-fpm-502-error/6571?u=matt
This commit is contained in:
Matthew Holt 2019-12-06 11:45:50 -07:00
parent 68adfdc559
commit 33a318d173
No known key found for this signature in database
GPG key ID: 2A349DD577D586A5
2 changed files with 63 additions and 1 deletions

View file

@ -266,9 +266,18 @@ type ParsedAddress struct {
EndPort uint EndPort uint
} }
// IsUnixNetwork returns true if pa.Network is
// unix, unixgram, or unixpacket.
func (pa ParsedAddress) IsUnixNetwork() bool {
return isUnixNetwork(pa.Network)
}
// JoinHostPort is like net.JoinHostPort, but where the port // JoinHostPort is like net.JoinHostPort, but where the port
// is StartPort + offset. // is StartPort + offset.
func (pa ParsedAddress) JoinHostPort(offset uint) string { func (pa ParsedAddress) JoinHostPort(offset uint) string {
if pa.IsUnixNetwork() {
return pa.Host
}
return net.JoinHostPort(pa.Host, strconv.Itoa(int(pa.StartPort+offset))) return net.JoinHostPort(pa.Host, strconv.Itoa(int(pa.StartPort+offset)))
} }
@ -290,6 +299,10 @@ func (pa ParsedAddress) String() string {
return JoinNetworkAddress(pa.Network, pa.Host, port) return JoinNetworkAddress(pa.Network, pa.Host, port)
} }
func isUnixNetwork(netw string) bool {
return netw == "unix" || netw == "unixgram" || netw == "unixpacket"
}
// ParseNetworkAddress parses addr into its individual // ParseNetworkAddress parses addr into its individual
// components. The input string is expected to be of // components. The input string is expected to be of
// the form "network/host:port-range" where any part is // the form "network/host:port-range" where any part is
@ -307,7 +320,7 @@ func ParseNetworkAddress(addr string) (ParsedAddress, error) {
if err != nil { if err != nil {
return ParsedAddress{}, err return ParsedAddress{}, err
} }
if network == "unix" || network == "unixgram" || network == "unixpacket" { if isUnixNetwork(network) {
return ParsedAddress{ return ParsedAddress{
Network: network, Network: network,
Host: host, Host: host,

View file

@ -250,3 +250,52 @@ func TestParseNetworkAddress(t *testing.T) {
} }
} }
} }
func TestJoinHostPort(t *testing.T) {
for i, tc := range []struct {
pa ParsedAddress
offset uint
expect string
}{
{
pa: ParsedAddress{
Network: "tcp",
Host: "localhost",
StartPort: 1234,
EndPort: 1234,
},
expect: "localhost:1234",
},
{
pa: ParsedAddress{
Network: "tcp",
Host: "localhost",
StartPort: 1234,
EndPort: 1235,
},
expect: "localhost:1234",
},
{
pa: ParsedAddress{
Network: "tcp",
Host: "localhost",
StartPort: 1234,
EndPort: 1235,
},
offset: 1,
expect: "localhost:1235",
},
{
pa: ParsedAddress{
Network: "unix",
Host: "/run/php/php7.3-fpm.sock",
},
expect: "/run/php/php7.3-fpm.sock",
},
} {
actual := tc.pa.JoinHostPort(tc.offset)
if actual != tc.expect {
t.Errorf("Test %d: Expected '%s' but got '%s'", i, tc.expect, actual)
}
}
}