事故现象
客户端反馈系统无法使用。打开页面很多内容无法显示。
f12 显示很多请求都失败了。
定位问题
客户咨询
客户反馈昨天 在nginx 上面配置了https证书。导致了http 请求无法访问。 客户已经在nginx上面配置了https。即 网页端的请求会重定向到https请求上面。那为啥还有 http请求呢?
代码查看
通过查看代码,目前这个系统是tomcat部署的,采用jsp 作为视图显示。
浏览器发送的请求,一般是请求jsp。 这个请求被nginx 重定向变为 https 是没有问题的。
但是 jsp 会发送 js css 等静态文件的请求以及 ajax 请求,这些请求 都是 http请求。目前出现的问题就是这些请求。
jsp 里面有封装请求的代码,如截图:
真正问题
如上面截图所示,真正问题原因是 因为 jsp里面的 request.getScheme() 获取到的是 http而不是https。
解决问题
方法一:
最开始我的想法是 在 request.getScheme() 后面加个s 。 即 request.getScheme()+“s”。这样粗暴的加个s。使 http 强行变成 https。但是这样的Jsp有很多,不方便维护。
方法二:
改tomcat 的配置。
如果使tomcat 6或以下:
配置Tomcat server.xml 的 Engine 模块下配置一个 Valve:
<Valve className="org.apache.catalina.valves.RemoteIpValve"
remoteIpHeader="X-Forwarded-For"
protocolHeader="X-Forwarded-Proto"
protocolHeaderHttpsValue="https"/>
如果使tomcat7 或以上
修改tomcat配置文件server.xml,增加 scheme=“https” secure=“true” 属性即可。
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"
scheme="https" secure="true"/>