如何修改Golang反向代理的路径/路由

gojuced7  于 2023-08-01  发布在  Go
关注(0)|答案(1)|浏览(124)

我正在使用一个反向代理,它根据路径指定的服务名称代理不同的远程计算机。在这个场景中,我遇到了类似的情况:
远程1:

  • 路线1:
    ---文件1
  • 路线2:
  • nestedRoute:
    ------文件2
    请求如下所示:
    客户端-> fqdn/service 1/route 2/nestedRoute --> remote 1
    响应是(我在反向代理中修改了asset的路径--见下文):
    Client <- fqdn/route2/nestedRoute <-- remote1
    浏览器中所需的响应:
    Client <--- fqdn/service1/route2/nestedRoute <-- remote1
    如何像上面那样将service 1注入到路径中,以便后续请求解析到正确的目录?
    我的代码或多或少是这样的:
func proxy(serviceName string) func(res http.ResponseWriter, req *http.Request){
    cnn, err := dialer.Dial("tcp",":1250") // Reason for doing this is relative to architecture and is a must.
    if err != nil {
     res.WriteHeader(http.StatusInternalServerError)
     return
    }
    transport := &http.Transport{
        Dial: func(network, addr string) (net.Conn, error) {
            return cnn, nil
        },}
   client := &http.Client{
        Transport: transport,
    }
    hostName := hostNameMap[serviceName]
    req.URL.Host = req.Host
    req.URL.Scheme = originSvr.Scheme
    req.RequestURI = ""
    req.URL.Path = string.TrimPrefix(req.url.path,"/serviceName")

    serverResponse, err := client.Do(req)
    if err != nil {
        res.WriteHeader(http.StatusInternalServerError)
        fmt.Fprint(res, req)
        return
    }

    res.WriteHeader(serverResponse.StatusCode)
    io.Copy(res, serverResponse.Body)
}

func main() {
    http.handle("/",rootHandler)
    http.Handle("/service1", http.HandlerFunc(proxy("service1")))
    http.Handle("/service2", handler)
    http.ListenAndServe(":8080", nil)
}

字符串
我目前正在考虑将body读入一个缓冲区,并修改所有到路由的链接,尽管这看起来相当脆弱。或者,我正在考虑为每个服务创建一个iframe,并在每个iframe中从root服务反向代理的内容。
否则,我不知道如何处理重定向与我目前如何有东西设置。

q0qdq0h2

q0qdq0h21#

在这种情况下,我可以控制远程机器上的应用程序。更具体地说,我正在运行一个wsgi应用程序,我能够指定一个前缀路径,每当访问该网站时,该路径就会被删除和前置。按照这里的说明解决了我的问题:https://dlukes.github.io/flask-wsgi-url-prefix.html

相关问题