如何解决具有动态主机和端口的反向代理
如果请求 localhost:8080?url=google.com
它充当 Google 的反向代理。我看过其他一些具有某种程度相似但限制的帖子,例如维护端口。
这是我的做法:
package main
import(
"fmt"
"log"
"net/url"
"net/http"
"net/http/httputil"
)
type baseHandle struct{}
type handler struct {
proxy *httputil.ReverseProxy
}
func (h handler) ServeHTTP(w http.ResponseWriter,r *http.Request) {
h.proxy.ServeHTTP(w,r)
}
func (h *baseHandle) ServeHTTP(w http.ResponseWriter,r *http.Request) {
url_arg := r.URL.Query()["url"]
if len(url_arg) < 0 {
w.Write([]byte("403: Host forbidden"))
return
}
url_parsed,err := url.Parse(url_arg[0])
if err != nil {
w.Write([]byte("403: Host forbidden"))
return
}
director := func(req *http.Request) {
req.URL.Scheme = "http://"
req.URL.Host = url_parsed.Host
}
reverseProxy := &httputil.ReverseProxy{Director: director}
handler := handler{proxy: reverseProxy}
http.Handle("/",handler)
http.ListenAndServe(fmt.Sprintf(":%d",80),nil)
return
}
func main(){
h := &baseHandle{}
http.Handle("/",h)
server := &http.Server{
Addr: ":8080",Handler: h,}
log.Fatal(server.ListenAndServe())
}
我觉得我离完成它并不遥远,因为我看到网络在浏览器上带来了一些东西,但我一定错过了一些东西。
只是为了让您了解这背后的原因是我们公司的 VPN 阻止了所有非 https 流量,我们的团队在 EMR 及其应用程序(Zeppelin、Jupyter、Livy 等)上高度可靠。 创建 ELB 不在表中,因为 EMR 集群的创建和删除非常频繁,但是如果我可以根据初始请求将这个反向代理动态地应用于所有主机和端口,它可以允许我们连接到所有流量通过的所有应用程序这个服务器。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。