栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

带有Apache2 SNI /主机名错误的Golang ReverseProxy

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

带有Apache2 SNI /主机名错误的Golang ReverseProxy

简短的例子

假设您正在向发起HTTP请求

https://your-proxy.local
。您的请求处理程序采用该
http.Request
结构,并将其
URL
字段重写为
https://your-apache-backend.local

您没有考虑的是,原始HTTP请求还包含一个

Host
标头(
Host: your-proxy.local
)。将相同的请求传递给该请求时
http://your-apache-backend.local
,该请求中的
Host
标头仍会显示
Host: your-proxy.local
。这就是Apache所抱怨的。

说明

当您将TLS与服务器名称指示(SNI)一起使用时,请求主机名不仅将用于DNS解析,还将选择用于建立TLS连接的SSL证书。

Host
另一方面,HTTP
1.1 标头用于通过Apache区分多个虚拟主机。两个名称 必须匹配 。Apache HTTPD
Wiki中也提到了此问题:

SNI /请求主机名不匹配,或者SNI提供了主机名而请求没有。

这是一个浏览器错误。Apache将拒绝该请求,并显示400类型错误。

还要重写

Host
标题。如果要保留原始
Host
标头,可以将其存储在
X-Forwarded-Host
标头中(这是非标准标头,但在反向代理中广泛使用):

func (p *Proxy) directorApache(req *http.Request) {    mainServer := fmt.Sprintf("%s:%d", Config.HostMain, Config.PortMain)    req.URL.Scheme = "https"    req.URL.Host = mainServer    req.Header.Set("X-Forwarded-Host", req.Header().Get("Host"))    req.Host = mainServer}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/377468.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号