工作过程中遇见一个问题,使用Vue-cli 搭建了一个工程,由于跨域的问题 使用了自带的dev-server Express Server(A后台) http-proxy-middleware 去访问后台的接口nginx Server(B后台),而这个接口为niginx 代理的另一个后台(C后台),理清一下关系:

  开发页面去请求A后台(devServer)的接口, 然后这个请求会被转发的B后台(nginx), 然后再会被nginx映射到C后台(我们真实要访问的后台),你可能会问为什么不用A直接去代理访问C, 非要在中间加了个nginx呢 ? 由于C是个交换机设备上的server, 直接用我的A (devServer)去代理C不好使,所以才有这样的情景。

  从B到C的过程一切都很正常,但是从A到B中间的每次的请求返回时connection 都是close , 而正常的是keep-alive的,这就导致我在页面里登录成功后 继续请求其他接口还是验证不通过。网上找了好多资料都不好使。

  最终解决方案是,(当一条路走不通的时候,换一条试试):

  跨域问题解决的方法之一, CORS

  通过修改ngnix配置文件,加入allow-origin头

        location ~ \.do$ {
add_header 'Access-Control-Allow-Origin' 'http://localhost:8080'; //这个是我的A devServer,必须设置具体的值,不要使用* 否则访问接口的时候浏览器会报错
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
add_header 'Access-Control-Allow-Credentials' true;
add_header 'Access-Control-Allow-Headers' 'DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type';
proxy_pass http://172.16.15.65;
}

  配置完这个重启nginx然后你的页面里直接写B的接口就不会存在跨域问题了,但是这个时候如果登录的过程中产生了一个cookie这个信息在你后面访问借口的时候不会自动添加上的,需要在你的ajax里面加上withCredentials,例如jquery 的ajax

     $.ajax({
url : "*****",
type : post,
dataType : params.dataType,
data : cliPostData,
cache : false,
//注意这里
xhrFields: {
withCredentials: true
},
success : function(data) {
}
      })

  这样就可以携带cookie的认证信息了,然后再进行页面的直接访问接口就可以正常使用了。

记一个http-proxy-middleware 代理访问nginx映射的接口不通过的问题(connection close)的更多相关文章

  1. 记一个关于std::unordered_map并发访问的BUG

    前言 刷题刷得头疼,水篇blog.这个BUG是我大约一个月前,在做15445实现lock_manager的时候遇到的一个很恶劣但很愚蠢的BUG,排查 + 摸鱼大概花了我三天的时间,根本原因是我在使用s ...

  2. 通过代理访问nginx和直接访问nginx区别

    80.82.78.38 [23/Sep/2016:05:36:18 +0800] "GET http://www.baidu.com/cache/global/img/gs.gif HTTP ...

  3. 正向代理与反向代理以及Nginx【总结】(转)

    今天在了解Nginx的时候,涉及到反向代理的问题,看到一篇博文写的清晰明了,转载记录一下,后续继续学习,再次感谢博主的分享. 原文地址:https://www.cnblogs.com/Anker/p/ ...

  4. Nginx 防CC攻击拒绝代理访问

    先大概说说简单的结构…前端一个Nginx反向代理,后端一个Nginx instance app for PHP…实际上就是个Discuz,之前面对CC攻击都是预警脚本或者走CDN,但是这次攻击者不再打 ...

  5. Linux(7)- Nginx.conf主配置文件、Nginx虚拟主机/访问日志/限制访问IP/错误页面优化、Nginx反向代理、Nginx负载均衡

    一.Nginx.conf主配置文件 Nginx主配置文件conf/nginx.conf是一个纯文本类型的文件,整个配置文件是以区块的形式组织的.一般,每个区块以一对大括号{}来表示开始与结束. 核心模 ...

  6. Nginx反向代理访问内网服务器

    Nginx反向代理访问内网服务器 问题描述 ​ 公司给配的台式机太垃圾了,不能访问外部网络就算了,还没有maven私服.近期项目不光得使用maven还得使用内网中的数据库之类,台式机太卡只能用自己的笔 ...

  7. Docker Nginx-Proxy 容器Nginx Proxy反向代理

    Docker Nginx-Proxy 容器Nginx Proxy反向代理   简单介绍 Docker容器的自动Nginx反向代理   dockerhub地址 https://hub.docker.co ...

  8. CentOS6.3搭建Nginx代理访问MongoDB GridFS图片资源

    PHP可以直接读取MongoDB GridFS中的图片并显示到页面中,但对PHP的压力就大了.偶然机会,了解到Nginx可以代理访问,实现过程如下: 1.工具准备 安装一些必要的编译工具及库,这里是直 ...

  9. requests使用“proxy”代理访问接口

    在requests中使用proxy代理访问 使用前先更新requests版本为支持socks的版本.   先pip安装对应库:  >> pip install -U requests[so ...

随机推荐

  1. redis 简单安装使用

    官方站点:http://redis.io/ 官方下载:http://redis.io/download 能够依据须要下载不同版本号 windows版:https://github.com/mythz/ ...

  2. Oracle集合操作

    在Oracle中提供了三种类型的集合操作: 并(UNION).交(INTERSECT).差(MINUS) UNION:将多个查询的结果组合到一个查询结果之中,并去掉反复值 UNION ALL:将多个查 ...

  3. 解决Unable to find setter method for attribute: [commandName]

    最近学习springmvc的表单标签库,其中form标签主要用于渲染HTML表单,而form标签有很多属性,可供选择,其中一般来说(以前)最重要的是commandName属性,因为它定义了模型属性的名 ...

  4. 【转】Spring Bean单例与线程安全

    一.Spring单例模式及线程安全 Spring框架中的Bean,或者说组件,获取实例的时候都是默认单例模式,这是在多线程开发的时候需要尤其注意的地方. 单例模式的意思是只有一个实例,例如在Sprin ...

  5. 自学Zabbix3.6.3-触发器triggers expression表达式

    触发器中的表达式使用很灵活,我们可以创建一个复杂的逻辑测试监控,触发器表达式形式如下: 1 {<server>:<key>.<function>(<param ...

  6. python+mysql+flask创建一个微博应用(持续更新)

    微博应用的结构: 用户管理,包括登录管理,会话,用户角色,个人档案及用户头像. 数据库管理,包括数据库迁移处理. Web表单支持,包括字段检验和用于防止垃圾邮件的验证码功能. 大数据的分页功能. 全文 ...

  7. 在nginx上部署vue项目(history模式);

    在nginx上部署vue项目(history模式): vue-router 默认是hash模式,使用url的hash来模拟一个完整的url,当url改变的时候,页面不会重新加载.但是如果我们不想has ...

  8. 成功解决react+webpack打包文件过大的问题

    最近在学习并使用webpack+react+antd写了一个小项目,也可以说是demo,待全部开发完成后发现webpack的打包文件足足有将近13.3MB,快吓死宝宝了,经过连续几天的学习,和调试最后 ...

  9. 【ANT】taskdef class org.programmerplanet.ant.taskdefs.jmeter.JMeterTask cannot be found using the classloader AntClassLoader[]解决办法

    把文件apache-jmeter-3.1\extras\ant-jmeter-1.1.1.jar复制到apache-ant-1.10.1\lib目录下即可.

  10. 【ANT】java项目生成文件示例

    <?xml version="1.0" ?> <project default="dist"> <property name=&q ...