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相关推荐

  1. Verdaccio介绍及安装 -- nodejs私有npm proxy registry代理

    Verdaccio 是一个 Node.js创建的轻量的私有npm proxy registry Verdaccio 是一个跨平台的 Web 应用程序. 在安装之前,您需要确保系统环境已满足以下条件. ...

  2. NVM安装nodejs的方法

    安装nodejs方式有很多种. 第一种:官网下载  通过nodejs官网下载安装 ,但有个缺陷,不同版本的nodejs无法顺利的切换. 第二种: NVM安装  NVM可以帮助我们快速切换 node版本 ...

  3. NVM - Nodejs的版本管理工具安装和使用

    NVM全名:Node.js Version Management,nodejs的版本管理工具.通过它可以安装和切换不同版本的nodejs.下面列出下载.安装及使用方法. (当前仅在windows环境下 ...

  4. nodeJS如何快速升级降级?

    我笔记本上的nodeJS是10版本的,在运行前端VUE项目时,报错,具体错误信息为: 咳咳咳,没有记录下来.. 总而言之,项目用的是8版本,我的是10版本,跑的时候有问题,所以需要降级. 具体的降级方 ...

  5. 使用nvm安装nodejs

    一.nvm是什么? 在工作中,我们可能同时在进行2个或者多个不同的项目开发,每个项目的需求不同,进而不同项目必须依赖不同版本的NodeJS运行环境,这种情况下,对于维护多个版本的node将会是一件非常 ...

  6. onlyoffice 本地二次开发基础教程

    前言 本教程面向需要有二次开发的同学,主要是面向前端UI开发(本人使用MAC环境搭建),windows应该类似 搭建环境要求 nodejs 自己使用 10.15.3 docker 安装步骤 组织目录结 ...

  7. Node.js入门(含NVM、NPM、NVM的安装)

    本文最初发表于博客园,并在GitHub上持续更新前端的系列文章.欢迎在GitHub上关注我,一起入门和进阶前端. 以下是正文. Node.js的介绍 引擎 引擎的特性: JS的内核即引擎.因为引擎有以 ...

  8. Windows command tools

    Babun - a windows shell you will love Cmder - Portable console emulator for Windows Settings Nodejs ...

  9. node.js开发环境配置

    node.js是什么 Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境.Node.js 使用了一个事件驱动.非阻塞式 I/O 的模型,使其轻量又高效.Node.j ...

  10. 前端node 和vue开发之环境搭建

    下载nvm nodejs 的快捷键是配置后自动生成的 nvm 的 setting.txt配置 root: C:\dev\nvm path: C:\dev\nodejs arch: 32 proxy: ...

最新文章

  1. 高等数学下-赵立军-北京大学出版社-题解-练习8.2
  2. java异常体系_JAVA异常体系结构详解
  3. 阿里公布碳中和目标:2030年带动生态 15年减碳15亿吨
  4. 计算机系统-电路设计04-全加器的内部电路实现
  5. 对比鸿蒙,Google 的 Fuchsia 当前进度如何?
  6. No module named ‘pyqt5‘解决办法
  7. 干净地卸载QTP的小工具 - QTPCleanUninstaller
  8. 汇编语言程序设计思维导图
  9. 例2.2 圆柱体的表面积
  10. pandas算加权平均值_pandas和groupby:如何计算agg中的加权平均值
  11. 联想e570c固态接口支持协议_thinkpad e570c15.6英寸笔记本电脑支持什么固态硬盘接口...
  12. unity android光照贴图格式,Unity3D-光照贴图技术
  13. php怎么控制mp3播放器,简单的C++ MP3播放器类
  14. css3切角文本框_[CSS揭秘]切角效果
  15. C语言:浮点型的基本知识
  16. Validator检验框架的使用
  17. dcs程序流程图分析_常见DCS工艺流程图识别 教你正确读图
  18. 推荐系统-排序层:主流CTR模型综述【Click-Through-Rate,点击率预估,指精排层的排序】【CTR 模型的输入(即训练数据)是:大量成对的 (features, label)数据】
  19. 【文件上传绕过】——解析漏洞_IIS7.0 | IIS7.5 | Nginx的解析漏洞
  20. python - Django

热门文章

  1. Sinew探索金融衍生品领域,增强金融市场流动性
  2. 今天申请了亚马逊新加坡站点
  3. 自控力 笔记10 结语 完结篇
  4. 《东周列国志》第十四回 卫侯朔抗王入国 齐襄公出猎遇鬼
  5. effective python pdf下载-《Effective Python》电子书pdf下载百度网盘
  6. html横向滚动字幕代码,js文字横向滚动特效
  7. 最小二乘法-线性拟合
  8. android 离散分布控件,Android自定义睡眠质量分布控件
  9. 医学统计学笔记之设计
  10. 疯了! Python 成功预测前三场比赛,快看今天的?(附代码及比赛时间表)