You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
95 lines
2.4 KiB
Go
95 lines
2.4 KiB
Go
package httpreverse
|
|
|
|
import (
|
|
"b612.me/starlog"
|
|
"github.com/spf13/cobra"
|
|
"net/url"
|
|
"os"
|
|
"os/signal"
|
|
)
|
|
|
|
var remote, config string
|
|
var addr, key, cert, log string
|
|
var port int
|
|
var enablessl, skipsslverify bool
|
|
var host string
|
|
|
|
func init() {
|
|
Cmd.Flags().StringVarP(&host, "host", "H", "", "host字段")
|
|
Cmd.Flags().StringVarP(&remote, "remote", "r", "", "反向代理地址")
|
|
Cmd.Flags().StringVarP(&config, "config", "C", "", "配置文件地址")
|
|
Cmd.Flags().StringVarP(&addr, "addr", "a", "0.0.0.0", "监听地址")
|
|
Cmd.Flags().StringVarP(&key, "key", "k", "", "ssl key地址")
|
|
Cmd.Flags().StringVarP(&cert, "cert", "c", "", "ssl 证书地址")
|
|
Cmd.Flags().StringVarP(&log, "log", "l", "", "log日志地址")
|
|
Cmd.Flags().BoolVarP(&enablessl, "enable-ssl", "s", false, "启用ssl")
|
|
Cmd.Flags().BoolVarP(&skipsslverify, "skil-ssl-verify", "S", false, "跳过证书验证")
|
|
Cmd.Flags().IntVarP(&port, "port", "p", 8080, "监听端口")
|
|
}
|
|
|
|
var Cmd = &cobra.Command{
|
|
Use: "hproxy",
|
|
Short: "Http Reverse Proxy(Http反向代理)",
|
|
Run: func(cmd *cobra.Command, args []string) {
|
|
if log != "" {
|
|
starlog.SetLogFile(log, starlog.Std, true)
|
|
}
|
|
if config != "" {
|
|
r, err := Parse(config)
|
|
if err != nil {
|
|
starlog.Errorln(err)
|
|
os.Exit(1)
|
|
}
|
|
go func() {
|
|
sig := make(chan os.Signal)
|
|
signal.Notify(sig, os.Kill, os.Interrupt)
|
|
starlog.Noticeln("Stop Due to Recv Siganl", <-sig)
|
|
r.Close()
|
|
}()
|
|
err = r.Run()
|
|
if err != nil {
|
|
starlog.Errorln("Http Reverse Proxy Exit Error", err)
|
|
os.Exit(2)
|
|
}
|
|
starlog.Infoln("Http Reverse Proxy Exit Normally")
|
|
return
|
|
}
|
|
if remote == "" {
|
|
starlog.Errorln("please enter the reverse url")
|
|
os.Exit(4)
|
|
}
|
|
u, err := url.Parse(remote)
|
|
if err != nil {
|
|
starlog.Errorln(err)
|
|
os.Exit(3)
|
|
}
|
|
reverse := ReverseConfig{
|
|
Name: "web",
|
|
Addr: addr,
|
|
Host: host,
|
|
ReverseURL: map[string]*url.URL{
|
|
"/": u,
|
|
},
|
|
Port: port,
|
|
UsingSSL: enablessl,
|
|
SkipSSLVerify: skipsslverify,
|
|
Key: key,
|
|
Cert: cert,
|
|
XForwardMode: 1,
|
|
}
|
|
go func() {
|
|
sig := make(chan os.Signal)
|
|
signal.Notify(sig, os.Kill, os.Interrupt)
|
|
starlog.Noticeln("Stop Due to Recv Siganl", <-sig)
|
|
reverse.Close()
|
|
}()
|
|
err = reverse.Run()
|
|
if err != nil {
|
|
starlog.Errorln("Http Reverse Proxy Exit Error", err)
|
|
os.Exit(2)
|
|
}
|
|
starlog.Infoln("Http Reverse Proxy Exit Normally")
|
|
return
|
|
},
|
|
}
|