nodejs之http-proxy几点常见问题
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几点常见问题相关推荐
- 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: ...
最新文章
- emoji 乱码_这个自制emoji的网站,让你成为永远不输的斗图王者
- 半透明遮罩层覆盖整个可视区域
- 零基础如何入门数据分析?
- 手机远程ssh登录Linux,Linux SSH(远程登录)到Milestone手机
- 使用 iptables 限制***猜密码续—深入 recent 模块
- datagridview绑定数据源不显示_sharding-jdbc系列之 数据源配置(一)
- java arraylist排序_一文读懂Java集合框架
- c/c++教程 - 2.4.2.6 初始化列表语法,初始化列表参数
- android报错:org.ksoap2.SoapFault cannot be cast to org.ksoap2.serialization.SoapObject
- 怎样使用Javascript操作XMLDOM才能兼容IE、FireFox浏览器呢?
- 阶段5 3.微服务项目【学成在线】_day04 页面静态化_19-页面静态化-模板管理-模板存储...
- 民企信息化建设个人经历(一)
- Android地图轨迹抽稀、动态绘制
- 柳传志退休,联想的贸工技路线对错由后人评说
- python求数独全解
- NLP文档挖宝(1)——tokenizer的诞生
- 电影数据分析——国产烂片深度揭秘
- 使用Python将mat文件转换为npy文件
- 计算机组装与维护我要自学网,【答疑】3D机械建模软件有哪些,3D机械建模一般用的是哪个软件? - 视频教程线上学...
- Zk中组建显示模型mold都有哪些
热门文章
- AI模型走下高科技神坛、走进大规模量产、深入渗透产业界丨百度研究院2020十大预测...
- 中国程序员人数将增长50%,过半500强都要卖软件,边缘应用程序增长8倍丨IDC预测下一个五年...
- 《Docker技术入门与实战》——2.4 本章小结
- CentOS 7 程序自启动的问题
- org.springframework.beans包
- 深入理解JavaScript系列(33):设计模式之策略模式(转)
- Eclipse 每行 79 字符限制的提示线
- getBoundingClientRect计算页面元素的offsetLeft、offsetTop
- windows聚焦壁纸不更新_技术编辑示范win10系统锁屏壁纸聚焦不更新的处理教程
- 2019年python课本_2019年Python学习指南