Skip to content

Commit

Permalink
Fixed #474
Browse files Browse the repository at this point in the history
- Added automatic port check and reminder for beginners
  • Loading branch information
tobychui committed Jan 18, 2025
1 parent bfd64a8 commit eeb438e
Show file tree
Hide file tree
Showing 2 changed files with 32 additions and 4 deletions.
10 changes: 10 additions & 0 deletions src/mod/netutils/netutils.go
Original file line number Diff line number Diff line change
Expand Up @@ -157,3 +157,13 @@ func resolveIpFromDomain(targetIpOrDomain string) string {

return targetIpAddrString
}

// Check if the given port is already used by another process
func CheckIfPortOccupied(portNumber int) bool {
listener, err := net.Listen("tcp", ":"+strconv.Itoa(portNumber))
if err != nil {
return true
}
listener.Close()
return false
}
26 changes: 22 additions & 4 deletions src/reverseproxy.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ import (
"imuslab.com/zoraxy/mod/dynamicproxy/loadbalance"
"imuslab.com/zoraxy/mod/dynamicproxy/permissionpolicy"
"imuslab.com/zoraxy/mod/dynamicproxy/rewrite"
"imuslab.com/zoraxy/mod/netutils"
"imuslab.com/zoraxy/mod/uptime"
"imuslab.com/zoraxy/mod/utils"
)
Expand All @@ -28,10 +29,22 @@ func ReverseProxtInit() {
Load Reverse Proxy Global Settings
*/
inboundPort := 443
autoStartReverseProxy := true
if sysdb.KeyExists("settings", "inbound") {
//Read settings from database
sysdb.Read("settings", "inbound", &inboundPort)
SystemWideLogger.Println("Serving inbound port ", inboundPort)
if netutils.CheckIfPortOccupied(inboundPort) {
autoStartReverseProxy = false
SystemWideLogger.Println("Inbound port ", inboundPort, " is occupied. Change the listening port in the webmin panel and press \"Start Service\" to start reverse proxy service")
} else {
SystemWideLogger.Println("Serving inbound port ", inboundPort)
}
} else {
//Default port
if netutils.CheckIfPortOccupied(inboundPort) {
inboundPort = 8743
SystemWideLogger.Println("Port 443 is occupied. Switching to backup port 8743 instead")
}
SystemWideLogger.Println("Inbound port not set. Using default (443)")
}

Expand Down Expand Up @@ -60,6 +73,9 @@ func ReverseProxtInit() {
}

listenOnPort80 := true
if netutils.CheckIfPortOccupied(80) {
listenOnPort80 = false
}
sysdb.Read("settings", "listenP80", &listenOnPort80)
if listenOnPort80 {
SystemWideLogger.Println("Port 80 listener enabled")
Expand Down Expand Up @@ -136,9 +152,11 @@ func ReverseProxtInit() {
//Start Service
//Not sure why but delay must be added if you have another
//reverse proxy server in front of this service
time.Sleep(300 * time.Millisecond)
dynamicProxyRouter.StartProxyService()
SystemWideLogger.Println("Dynamic Reverse Proxy service started")
if autoStartReverseProxy {
time.Sleep(300 * time.Millisecond)
dynamicProxyRouter.StartProxyService()
SystemWideLogger.Println("Dynamic Reverse Proxy service started")
}

//Add all proxy services to uptime monitor
//Create a uptime monitor service
Expand Down

0 comments on commit eeb438e

Please sign in to comment.