向AWS发起请求暴露内部服务器IP地址问题
为什么AWS托管的网站会在特定HTTP 1.0请求下暴露内部服务器IP?
你用curl -v example.com --http1.0 --header 'Accept:' --header 'Connection:' --header 'Host:'发起请求后,服务器返回的302跳转里带了内部IPhttps://10.0.10.243/,这个问题其实是几个因素共同作用的结果:
HTTP 1.0对Host头的处理特性:HTTP 1.1强制要求请求必须包含Host头,但HTTP 1.0没有这个硬性规定。你特意清空了Host头内容,后端的IIS 8.5服务器收到请求后,没办法识别外部访问的公网域名(也就是example.com),只能退而求其次,用自己的内部IP来构造重定向的Location地址。
IIS 8.5的默认重定向行为:从响应里的
Server: Microsoft-IIS/8.5能看出后端是IIS服务器,这个版本的IIS在处理没有有效Host头的请求时,生成跳转URL会优先使用服务器自身绑定的内部IP,而非外部公网域名。哪怕你的网站托管在AWS上、通过负载均衡转发请求,只要后端IIS没拿到正确的Host信息,就会触发这个暴露内部IP的逻辑。请求头清空的放大作用:你不仅去掉了Host头,还清空了Accept和Connection头,这让服务器更难判断请求的合法来源和意图,进一步诱发了它用内部信息响应的行为。
如果要修复这个问题,可以试试这几个方向:
- 确保IIS站点绑定了正确的外部域名,让服务器能基于Host头生成正确的跳转地址;
- 配置AWS负载均衡(比如ALB)在转发请求时保留并传递正确的Host头给后端IIS;
- 在IIS里设置自定义重定向规则,强制使用公网域名而非内部IP生成跳转链接;
- 用AWS WAF或者负载均衡层拦截这类缺失关键请求头的异常请求,避免触发暴露内部IP的场景。
内容的提问来源于stack exchange,提问作者Ali Celebi
相关产品推荐
相关产品推荐

