nodejs之http-proxy几点常见问题 1
http-proxy
http-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服务可能是这样子
主域名 | 二级域名1 | 二级域名2 | 二级域名3 |
---|---|---|---|
17u.cn | ebk.17u.cn | ebk2.17u.cn | ebk3.17u.cn |
前端同样部署了3个nodejs服务,也同样配置了3个代理。部署到线上却发现,请求总是指向第一个二级域名,其他的二级域名访问不到。
百思不得姐!
后来仔细查看http的信息,发现几个服务的ajax请求发到服务器上之后,hostname都是浏览器的域名,而nginx的反向代理配置都是根据hostname来做转发的。因为我们的hostname对于nginx来说都是陌生的,所以就默认转发到默认的第一个服务上去了。
查了http-proxy配置,哈哈,果然有这种修改的配置,只要稍微改一下就好了。
'/saasapi/*': {target: 'http://ebk.17u.cn',changeOrigin: true
},
changeOrigin: true
意思就是把hostname改为和target一致就可以了。这样后端nginx就可以正常转发了。
后端配置了cookie Path
后端api,不仅仅配置了二级域名,还配置了二级目录,前端部署的服务也一样需要二级目录。
api地址就变成这个样子:
ebk.17u.cn/saasapi
前端地址:
trans.17u.cn/saas
代理配置做对应调整
'/saas/saasapi/*': {target: 'http://ebk.17u.cn',changeOrigin: true,rewrite: path => path.replace(/^\/saas\/saasapi\/cxy/, '/saasapi')
},
这样子看起来很正常吧,但是问题出在哪呢?后端把登录之后设置的cookie也设置了path:Path='/saasapi'
。
这样子问题就来了,trans.17u.cn/saas
当前域名下读取不到/saasapi
下面的cookie,导致前端登录每次都通过,但就是不能正常调api,每次调取都提示没有登录。
有问题还是先查文档。
还是发现了解决方案
cookiePathRewrite: { '/saasapi': '/saas/saasapi' }
重写cookie路径就好了,同理如果后端接口指定了cookie的domain,一样有方案解决
cookieDomainRewrite
还有一些其他rewrite,应该都比较好用的。
ps:在解决过程中,发现改了也总是不能成功,一度怀疑是库的bug。后来发现需要清除掉chrome的cookie。
直接点Application -> Cookie:删除下面的cookie是不行的。清理不掉全部的cookie,需要到Application -> clear storage中,clear site data才可以。最终成功
nodejs之http-proxy几点常见问题 1相关推荐
- Verdaccio介绍及安装 -- nodejs私有npm proxy registry代理
Verdaccio 是一个 Node.js创建的轻量的私有npm proxy registry Verdaccio 是一个跨平台的 Web 应用程序. 在安装之前,您需要确保系统环境已满足以下条件. ...
- NVM安装nodejs的方法
安装nodejs方式有很多种. 第一种:官网下载 通过nodejs官网下载安装 ,但有个缺陷,不同版本的nodejs无法顺利的切换. 第二种: NVM安装 NVM可以帮助我们快速切换 node版本 ...
- NVM - Nodejs的版本管理工具安装和使用
NVM全名:Node.js Version Management,nodejs的版本管理工具.通过它可以安装和切换不同版本的nodejs.下面列出下载.安装及使用方法. (当前仅在windows环境下 ...
- nodeJS如何快速升级降级?
我笔记本上的nodeJS是10版本的,在运行前端VUE项目时,报错,具体错误信息为: 咳咳咳,没有记录下来.. 总而言之,项目用的是8版本,我的是10版本,跑的时候有问题,所以需要降级. 具体的降级方 ...
- 使用nvm安装nodejs
一.nvm是什么? 在工作中,我们可能同时在进行2个或者多个不同的项目开发,每个项目的需求不同,进而不同项目必须依赖不同版本的NodeJS运行环境,这种情况下,对于维护多个版本的node将会是一件非常 ...
- onlyoffice 本地二次开发基础教程
前言 本教程面向需要有二次开发的同学,主要是面向前端UI开发(本人使用MAC环境搭建),windows应该类似 搭建环境要求 nodejs 自己使用 10.15.3 docker 安装步骤 组织目录结 ...
- Node.js入门(含NVM、NPM、NVM的安装)
本文最初发表于博客园,并在GitHub上持续更新前端的系列文章.欢迎在GitHub上关注我,一起入门和进阶前端. 以下是正文. Node.js的介绍 引擎 引擎的特性: JS的内核即引擎.因为引擎有以 ...
- Windows command tools
Babun - a windows shell you will love Cmder - Portable console emulator for Windows Settings Nodejs ...
- node.js开发环境配置
node.js是什么 Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境.Node.js 使用了一个事件驱动.非阻塞式 I/O 的模型,使其轻量又高效.Node.j ...
- 前端node 和vue开发之环境搭建
下载nvm nodejs 的快捷键是配置后自动生成的 nvm 的 setting.txt配置 root: C:\dev\nvm path: C:\dev\nodejs arch: 32 proxy: ...
最新文章
- 高等数学下-赵立军-北京大学出版社-题解-练习8.2
- java异常体系_JAVA异常体系结构详解
- 阿里公布碳中和目标:2030年带动生态 15年减碳15亿吨
- 计算机系统-电路设计04-全加器的内部电路实现
- 对比鸿蒙,Google 的 Fuchsia 当前进度如何?
- No module named ‘pyqt5‘解决办法
- 干净地卸载QTP的小工具 - QTPCleanUninstaller
- 汇编语言程序设计思维导图
- 例2.2 圆柱体的表面积
- pandas算加权平均值_pandas和groupby:如何计算agg中的加权平均值
- 联想e570c固态接口支持协议_thinkpad e570c15.6英寸笔记本电脑支持什么固态硬盘接口...
- unity android光照贴图格式,Unity3D-光照贴图技术
- php怎么控制mp3播放器,简单的C++ MP3播放器类
- css3切角文本框_[CSS揭秘]切角效果
- C语言:浮点型的基本知识
- Validator检验框架的使用
- dcs程序流程图分析_常见DCS工艺流程图识别 教你正确读图
- 推荐系统-排序层:主流CTR模型综述【Click-Through-Rate,点击率预估,指精排层的排序】【CTR 模型的输入(即训练数据)是:大量成对的 (features, label)数据】
- 【文件上传绕过】——解析漏洞_IIS7.0 | IIS7.5 | Nginx的解析漏洞
- python - Django