mirror of
https://github.com/yusing/godoxy.git
synced 2025-05-20 04:42:33 +02:00
feat: improved port selection
This commit is contained in:
parent
ccb4639f43
commit
5f780f4902
2 changed files with 30 additions and 6 deletions
|
@ -406,10 +406,7 @@ func (r *Route) Finalize() {
|
||||||
if pp == 0 {
|
if pp == 0 {
|
||||||
switch {
|
switch {
|
||||||
case isDocker:
|
case isDocker:
|
||||||
pp = lowestPort(cont.PrivatePortMapping)
|
pp = preferredPort(cont.PrivatePortMapping)
|
||||||
if pp == 0 {
|
|
||||||
pp = lowestPort(cont.PublicPortMapping)
|
|
||||||
}
|
|
||||||
case r.Scheme == "https":
|
case r.Scheme == "https":
|
||||||
pp = 443
|
pp = 443
|
||||||
default:
|
default:
|
||||||
|
@ -519,9 +516,24 @@ func (r *Route) FinalizeHomepageConfig() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func lowestPort(ports map[int]container.Port) (res int) {
|
var preferredPortOrder = []int{
|
||||||
|
80,
|
||||||
|
8080,
|
||||||
|
3000,
|
||||||
|
8000,
|
||||||
|
443,
|
||||||
|
8443,
|
||||||
|
}
|
||||||
|
|
||||||
|
func preferredPort(portMapping map[int]container.Port) (res int) {
|
||||||
|
for _, port := range preferredPortOrder {
|
||||||
|
if _, ok := portMapping[port]; ok {
|
||||||
|
return port
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// fallback to lowest port
|
||||||
cmp := (uint16)(65535)
|
cmp := (uint16)(65535)
|
||||||
for port, v := range ports {
|
for port, v := range portMapping {
|
||||||
if v.PrivatePort < cmp {
|
if v.PrivatePort < cmp {
|
||||||
cmp = v.PrivatePort
|
cmp = v.PrivatePort
|
||||||
res = port
|
res = port
|
||||||
|
|
|
@ -3,6 +3,7 @@ package route
|
||||||
import (
|
import (
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
|
"github.com/docker/docker/api/types/container"
|
||||||
"github.com/yusing/go-proxy/internal/common"
|
"github.com/yusing/go-proxy/internal/common"
|
||||||
"github.com/yusing/go-proxy/internal/docker"
|
"github.com/yusing/go-proxy/internal/docker"
|
||||||
loadbalance "github.com/yusing/go-proxy/internal/net/gphttp/loadbalancer/types"
|
loadbalance "github.com/yusing/go-proxy/internal/net/gphttp/loadbalancer/types"
|
||||||
|
@ -136,3 +137,14 @@ func TestRouteValidate(t *testing.T) {
|
||||||
expect.NotNil(t, r.HealthCheck)
|
expect.NotNil(t, r.HealthCheck)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestPreferredPort(t *testing.T) {
|
||||||
|
ports := map[int]container.Port{
|
||||||
|
22: {PrivatePort: 22},
|
||||||
|
1000: {PrivatePort: 1000},
|
||||||
|
3000: {PrivatePort: 80},
|
||||||
|
}
|
||||||
|
|
||||||
|
port := preferredPort(ports)
|
||||||
|
expect.Equal(t, port, 3000)
|
||||||
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue