3 回答
TA贡献1790条经验 获得超9个赞
我现在无法完全重现您的设置,但原则上,您应该在反向代理.Director
函数中更改请求:
控制器必须是一个函数,它将请求修改为要使用传输发送的新请求。
简而言之:
proxy.Transport = &http.Transport{
TLSClientConfig: &tls.Config{
Certificates: []tls.Certificate{certificate},
RootCAs: certPool,
InsecureSkipVerify: true,
}
}
proxy.Director = func(req *http.Request) {
req.Host = remote.Host
req.URL.Scheme = remote.Scheme
req.URL.Host = remote.Host
req.URL.Path = remote.Path
}
proxy.ServeHTTP(c.Writer, c.Request)
此外,您可能还需要 TLS 配置中的证书和根 CA。证书是您发送到服务器的证书,而 rootCA 用于验证服务器提供的证书。
TA贡献1851条经验 获得超4个赞
我最终切换到直接使用。但最大的问题是我正在使用而不是.以下是我最终得到的结果:ReverseProxyRootCAsClientCAs
clientCAs := x509.NewCertPool()
clientCAs.AppendCertsFromPEM(signedCert)
certificate, err := tls.X509KeyPair(signedCert, privateKey)
proxy := &httputil.ReverseProxy({
Transport: &http.Transport{
TLSClientConfig: &tls.Config{
Certificates: []tls.Certificate{certificate},
ClientCAs: clientCAs
},
Director: func (req *http.Request) {
// Alter request here
}
},
})
proxy.ServeHTTP(w, r)
在此之后,一切都在游泳中工作。谢谢大家!
- 3 回答
- 0 关注
- 198 浏览
添加回答
举报