需求

百度的原始请求:
https://api.map.baidu.com/place/v2/suggestion?query=s&region=sc&city_limit=true&output=json&ak=dl0tuE2WhjbHyqKcHevxXRYnLjV53OZm

代理为:

https://api.example.com/proxy/baidu/suggestion?query=s&region=sc&city_limit=true&output=json&ak=dl0tuE2WhjbHyqKcHevxXRYnLjV53OZm

顺序

Client –》 SLB –》 Nginx-Proxy –>baidu.com api   -阿里云环境

Clinet –>Nginx  -> Nginx-Proxy –>baidu.com api  - 测试环境

问题

在自建环境中,没有任何问题,但是发布到阿里云SLB(service load balance)之后,居然百度端会报
参数无效。

我们是采用Bitbucket来管理Nginx-proxy, 由于采用的是Docker执行,整体上倒是很方便,就是相比直接部署来说,每次发布时间要长一些。(由于是全自动化,倒是可以喝个水,溜下单身狗什么的)

# in QA, it works well with SLB
location ^~/proxy/baidu/ {
#support cross-domain visit for app add_header Access-Control-Allow-Methods GET,POST,OPTIONS;
#allow credentials
add_header Access-Control-Allow-Credentials true;
#allow-headers
add_header 'access-control-allow-headers' 'Authentication,Origin,X-Requested-With,Content-Type,Accept,token,appId,unitId'; #alias //;
# proxy_set_header X-Real-IP $remote_addr;
# proxy_set_header REMOTE-HOST $remote_addr;
# proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass http://api.map.baidu.com/place/v2/;
#proxy_redirect https://api.map.baidu.com/place/v2// /; #proxy_pass http://node-http/log/testGet/;
#proxy_redirect http://node-http/log/testGet// /;
}

检查过程

由于采用docker部署方式,理论上说都是一样的。唯一可能的是:SLB那边转发做了一定的改动。因此,采用tcpdump来抓包,比较两个环境下的转发请求的不同

其实,我最开始的时候,采用的是Node-http来获得Nginx-Proxy 请求

Client –》 SLB –》 Nginx-Proxy –>baidu.com api   -阿里云环境 改为

Client –》 SLB –》 Nginx-Proxy –>Node Http

通过捕获Http请求,来比较两个环境下请求有哪些不同。其实两种工具都可以: Node Http 或者采用 Tcpdump 来获得请求。

比较结果:

发现过程就是用firefox的web Tool不停的编辑header头,做测试了,直到。。。

最终发现是:由于在配置SLB的时候增加了一个header造成的,去掉就可以了。

X-Forwarded-Proto: https\r\n

在此期间分别向阿里云和百度提交了工单,阿里云的工程师回复比较积极,百度就呵呵了。有可能用的百度地图服务是免费的,因此人家呵呵。

后面补充一点

由于在Nginx-Proxy docker中即要启动Nginx,同时,又需要启动tcpdump,因此需要安装了s6-svscan 服务驻守程序。

我简单把dockerfile内容供参考吧

FROM nginx:1.12.1-alpine

RUN apk update
RUN apk add tcpdump
RUN apk add s6 COPY ./services /etc/s6/services
RUN chmod +x /etc/s6/services/nginx/run
RUN chmod +x /etc/s6/services/nginx/finish RUN chmod +x /etc/s6/services/tcpdump/run
RUN chmod +x /etc/s6/services/tcpdump/finish CMD ["s6-svscan", "/etc/s6/services"]

注意要自己编写 services目录下面的服务启动文件 run和关闭文件finish,具体的大家google一下吧(为什么不百度,因为它呵呵我。)

能够关掉任务很开心

记阿里云SLB后配置Nginx反向代理百度地图API的坑的更多相关文章

  1. CentOS 7 学习(二) 配置Nginx反向代理

    CentOS 7 学习(二) 配置Nginx反向代理 Nginx可以通过php-fpm来运行PHP程序,也可以转向apache,让apache调用php程序来运行. 不过对于Nginx来说,其反向代理 ...

  2. 为docker私有registry配置nginx反向代理

    公司的Docker私有registry已经搭建好了,用官方的registry image很容易就搭建好了.现在就是要用nginx的反向代理把它放出来,以便在外网可以访问. 我的上一篇blog 讲了如何 ...

  3. 使用SSL配置Nginx反向代理的简单指南

    反向代理是一个服务器,它接收通过Web发出的请求,即http和https,然后将它们发送到后端服务器(或服务器).后端服务器可以是单个或一组应用服务器,如Tomcat,wildfly或Jenkins等 ...

  4. 配置LANMP环境(7)-- 配置nginx反向代理,与配置apache虚拟主机

    一.配置nginx反向代理 1.修改配置文件 vim /etc/nginx/nginx.conf 在35行http下添加一下内容: include /data/nginx/vhosts/*.conf; ...

  5. 阿里云SLB后Nginx、Tomcat获取真实IP

    一.SLB后Nginx如何获取真实IP 前提:nginx作为slb获取真实ip是使用 http_realip_module,默认一键安装包安装的nginx没有安装这个模块需要重新重新编译nginx并加 ...

  6. 在阿里云域名https配置(nginx为例)

    如题: 在阿里云上注册了域名之后在阿里云域名控制台配置https: 1.在域名控制台选择要配置的域名,并在操作栏点击“解析” 2.在域名解析点击更多下的SSL进入到证书列表页,这里有收费的也有免费的, ...

  7. [亲测]ASP.NET Core 2.0怎么发布/部署到Ubuntu Linux服务器并配置Nginx反向代理实现域名访问

    前言 ASP.NET Core 2.0 怎么发布到Ubuntu服务器?又如何在服务器上配置使用ASP.NET Core网站绑定到指定的域名,让外网用户可以访问呢? 步骤 第1步:准备工作 一台Liun ...

  8. [亲测]七步学会ASP.NET Core 2.0怎么发布/部署到Ubuntu Linux服务器并配置Nginx反向代理实现域名访问

    前言 ASP.NET Core 2.0 怎么发布到Ubuntu服务器?又如何在服务器上配置使用ASP.NET Core网站绑定到指定的域名,让外网用户可以访问呢? 步骤 第1步:准备工作 一台Liun ...

  9. node项目发布+域名及其二级域名配置+nginx反向代理+pm2

    学习node的时候也写了一些demo.但是只是限于本地测试,从来没有发布.今天尝试发布项目. 需要准备的东西 node 项目:为了突出重点,说明主要问题.我只是拿express 写了很简单的demo. ...

随机推荐

  1. [Swift]LeetCode447. 回旋镖的数量 | Number of Boomerangs

    Given n points in the plane that are all pairwise distinct, a "boomerang" is a tuple of po ...

  2. [Swift]LeetCode492. 构造矩形 | Construct the Rectangle

    For a web developer, it is very important to know how to design a web page's size. So, given a speci ...

  3. [Swift]LeetCode566. 重塑矩阵 | Reshape the Matrix

    In MATLAB, there is a very useful function called 'reshape', which can reshape a matrix into a new o ...

  4. linux入门--Linux的应用领域

    Linux 似乎在我们平时的生活中很少看到,那么它应用在哪些领域呢?其实,在生活中随时随地都有 Linux 为我们服务着. 网站服务器 用事实说话!访问国际知名的 Netcraft 网站 http:/ ...

  5. Identity Server 4 中文文档(v1.0.0) 目录

    欢迎来到IdentityServer4 第一部分 简介 第1章 背景 第2章 术语 第3章 支持和规范 第4章 打包和构建 第5章 支持和咨询选项 第6章 演示服务器和测试 第7章 贡献 第二部分 快 ...

  6. iOS学习——#define、const、typedef的区别

    在iOS开发中经常遇到一些字段和类型的定义,例如配置生产和测试不同环境的参数等,这时候经常用到#define.const以及typedef.那么它们之间有什么区别呢?我们接下来一个一个具体了解下. 一 ...

  7. 重磅推出TabLayout高级窗口组件

    TabLayout是在APICloud现有窗口系统基础上升级而来的高级窗口组件,符合Material Design规范,可通过简单的配置为窗口实现原生的导航栏和TabBar,它将帮助您节省30%以上的 ...

  8. war包部署到腾讯云中报404的排错经历

    项目完成了部分功能,需要把项目放到公网上,方便演示讨论.本来以为挺简单的,直接将war包放到腾讯云服务器tomcat中,结果报错404,第一次碰到这种情况,于是想办法解决,花了一天的时间,终于解决了问 ...

  9. Python __new__ 实现单例模式 python经典面试题

    话不多说,上代码 class Singleton(object): def __new__(cls, *args, **kwargs): if not hasattr(cls, '_instance' ...

  10. 用了 HTTPS 还不安全,问题就出在低版本 TLS 上

    HTTPS 加密时代已经来临,近两年,Google.Baidu.Facebook 等互联网巨头,不谋而合地开始大力推行 HTTPS, 2018 年 7 月 25 日,Chrome 68 上线,所有 H ...