问题现象
- 直接通过域名进行访问,可正常打开网页;
- 通过DNS解析的域名与IP对应信息;
- 直接通过IP地址进行访问,显示404无法访问页面;
问题分析
- 通过抓包分析域名访问时数据包交互情况,发现客户端首先是向服务器的80端口发起TCP连接,完成建立后发出HTTP get报文,在收到服务器的HTTP响应报文后,改为向TCP 8081端口建立连接;
- 而通过抓包分析IP访问时数据包交互情况,却发现客户端向服务器的80端口建立完成TCP连接后,所发出HTTP get报文,没有得到服务器的HTTP回复;
出现以上现象的原因是,由于web服务器使用了nginx代理将同一端口根据不同域名转发到不同端口,从而解决在一台服务器上部署多个Tomcat/Apache项目,共用同一个端口号80/443的问题。
- 通过域名访问时所发出HTTP get报文可发现,报文的host字段中将会包含HTTP所请求的域名地址;服务器将根据此域名的nginx映射信息,在返回的HTTP应答报文中告知客户端,该域名资源的真实端口为8081;
- 客户端向服务器的8081端口,重新发起TCP连接;
- 而通过IP访问时所发出HTTP get报文的host字段中,所记录则是IP地址,服务器将此访问视为向80端口的访问,不再进行nginx代理;
- 但由于80端口并没有直接提供web服务,找不到相应资源,所以返回404的错误码;
我的微信
微信扫一扫
评论