当前位置: 首页 > 后端技术 > Node.js

nodejs中http-proxy的一些FAQ

时间:2023-04-03 18:03:24 Node.js

http-proxyhttp-proxy是一个nodejs的http代理库,已经被webpack-dev-server集成,作为代理使用。原因是在流行前后端分离的今天,如果我们需要在本地调整后端API接口而不配置hostname,那肯定是跨域请求。因为浏览器的跨域安全限制,无法调用,所以本地代理就成了本地开发环境的必备。'/saasapi/*':{target:'http://ebk.17u.cn',},意思大概是将saasapi开头的ajax请求重定向到http://ebk.17u.cn。本地开发是没有问题的,如果在线使用nodejs服务器,如果刚好配置了代理,在线部署的时候出现意想不到的问题~后端nginx配置了反向代理。某网站主域名为17u.cn。如果后端部署了多个api服务,那么他的api服务可能是这样的:主域名,二级域名,二级域名,二级域名,317u.cnebk.17u.cnebk2.17u。cnebk3.17u.cn,同样部署了3个前端nodejs服务也配置了3个代理。上线部署时,发现请求总是指向第一个二级域名,其他二级域名无法访问。想不出来妹子了!仔细查看http信息后发现,几个服务的ajax请求发送到服务器后,hostname都是浏览器的域名,nginx的反向代理配置是根据hostname进行转发的。因为我们的主机名对nginx来说是陌生的,所以默认转发到默认的第一个服务。查看了http-proxy的配置,哈哈,有这么修改的配置,稍微改一下就可以了。'/saasapi/*':{target:'http://ebk.17u.cn',changeOrigin:true},changeOrigin:true表示更改主机名以匹配目标。这样后端nginx就可以正常转发了。后端配置cookiePath后端api,不仅二级域名,二级目录也可以。前端部署的服务也需要二级目录。api地址变成这样:ebk.17u.cn/saasapi前端地址:trans.17u.cn/saasProxy配置做相应的调整'/saas/saasapi/*':{target:'http://ebk.17u.cn',changeOrigin:true,rewrite:path=>path.replace(/^\/saas\/saasapi\/cxy/,'/saasapi')},这看起来很正常,但是问题在哪里毛呢?后台也设置登录后设置的cookie的路径:Path='/saasapi'。问题来了。/saasapi下的cookie在trans.17u.cn/saas当前域名下无法读取,导致前端登录每次都通过,但是api无法正常调整,每次调用都提示没有登录。如果您有任何疑问,请先查看文档。我仍然找到了解决方案cookiePathRewrite:{'/saasapi':'/saas/saasapi'}只是重写cookie路径。同样,如果后端接口指定了cookie的域,也有cookieDomainRewrite等rewrite的解决方案,应该会比较好用。ps:在解决的过程中,发现修改总是不成功,一度怀疑是库的bug。后来发现需要清除chrome的cookies。直接点击应用->Cookie:不能删除以下cookie。您无法清除所有的cookie,您需要进入应用程序->清除存储,然后清除站点数据。终于成功了