1.问题
1)applyMiddleware中间件和nginx代理是不完全一样的
项目在本地运行,刚开始使用中间件applyMiddleware去代理,一起正常,但是放在线上使用nginx代理,就会出现接口不通的现象,因为这个api登录接口直接写的是:url/login,而其他接口是/url/v1/xxx的形式, 放在线上之后登陆接口没法正常登录,这个解决方式要么写两个代理,登录和其他接口各一个,要么让后台给登陆加个v1即可,前端代理也方便,我选了联系后台处理,这个是后话了,在解决这个问题前,遇到了问题2);
2)nginx可以连接,但是无法加载页面
可以进入html页面,但是在请求资源的时候会自动将http转为https,导致页面无法正常链接nginx,无法加载页面;
2.思路
其实一开始以为是nginx写的有问题,去验证了其他项目,都正常,所以排除这种可能,下面感觉是不是依赖除了问题,删掉重新装,也没有用,然后我运行了本地其他项目,看到加载资源的时候就是http,而新项目会转为https,这就是一个突破口,越想越觉得可能是这个问题,自行百度,就找到了解决方案:
先认识一段代码:
<meta http-equiv="Content-Security-Policy" content="upgrade-insecure-requests">
这个是写在入口文件中的,作用经查询说是会自动将域名的http转为https,看一下官方的解释吧:
也就是说在请求头加一个这个设置,浏览器会自动转为一个https的状态,知道了这个原因,就在html中去掉了这部分代码,项目就正常运行了。
3.结论
尽量使用nginx代理本地运行项目,和线上尽量保持一致
注意html头部的这个引入:
<meta http-equiv="Content-Security-Policy" content="upgrade-insecure-requests">