解决阿里云ECS运行前后台分离项目调用QQ互联导致: redirect uri is illegal(100010)问题

智码破浪使
• 阅读 3034

我的项目使用的是前后台分离,前台使用的是VUEJS,所在的域名是www.xfindzp.com,后台接口的域名是api.xfindzp.com,然后我现在开发QQ和微信的第三方登录,配置的回调域是:https://api.xfindzp.com/socia...,然后我把这个地址放到前台www.xfindzp.com里面的登录页面的a标签中,设置href="https://api.xfindzp.com/social-login/qq",但是点击跳转下面的错,经过分析发现跟阿里云服务器/etc/hosts文件和nginx配置api.xfindzp.com域名文件有关,所以记录下解决过程,分享给大家:
解决阿里云ECS运行前后台分离项目调用QQ互联导致: redirect uri is illegal(100010)问题

1、修改/etc/hosts文件

192.168.0.81 xfindzp.com api.xfindzp.com
47.97.127.145 xfindzp.com api.xfindzp.com
127.0.0.1   xfindzp.com api.xfindzp.com localhost localhost.localdomain localhost4 localhost4.localdomain4
::1        xfindzp.com api.xfindzp.com localhost localhost.localdomain localhost6 localhost6.localdomain6

2、修改配置域名api.xfindzp.com的nginx配置文件,如下:

server {
        listen       80;
        server_name  api.xfindzp.com;
        location / {
                proxy_pass http://api.xfindzp.com:6060; #这里的端口记得改成项目对应的哦
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header X-Forwarded-Proto $scheme;
                proxy_set_header X-Forwarded-Port $server_port;
        }
    }

   server {
        listen       443 ssl;
        server_name  api.xfindzp.com;

        ssl_certificate      /usr/local/nginx/cert/api.xfindzp/214731881260330.pem;
        ssl_certificate_key  /usr/local/nginx/cert/api.xfindzp/214731881260330.key;

        location / {
                #1、这里的api.xfindzp.com如果写成localhost或者127.0.0.1,那么肯定会报:redirect uri is illegal(100010)
                #2、api.xfindzp.com想让它起作用,必须在/etc/hosts文件里面配置好,并重启服务器,否则也不会生效
                proxy_pass http://api.xfindzp.com:6060; 
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header X-Forwarded-Proto $scheme;
                proxy_set_header X-Forwarded-Port $server_port;
                proxy_set_header Upgrade $http_upgrade;
                proxy_set_header Connection "upgrade";
        }
    }

3、配置好两个文件,然后重启下服务器ECS就成功了,当重新访问就成功了!

解决阿里云ECS运行前后台分离项目调用QQ互联导致: redirect uri is illegal(100010)问题

4、总结:
1)分析问题原因,当报错的时候查看qq返回的url,发现有127地址,所以就查看nginx配置文件,发现确实 是自己设置了127地址,改成api.xfindzp.com之后后台又访问不了,然后又把api.xfindzp.com域名放到/etc/hosts里面,重启才生效
2)网上也有其它相关的解决方法,我这个只针对我的问题。

5、引用:
1)Spring Security源码分析三:Spring Social实现QQ社交登录
2)腾讯开放平台联调工具集
3)centos6.x配置虚拟主机名及域名hosts
4)修改centos等linux的hostname-永久生效
5)Linux修改本机/etc/hosts的hostName后经常不生效
6)redirect uri is illegal(100010)


后续:2018-8-23 21:51

按照上面设置成功是成功,但是后台接口域名api.xfindzp.com每隔多长时间访问就会非常卡处于pending,没办法我又换成localhost或者127或者自己的内网ip了,这样一来QQ互联就还是有问题,然后在网上找到一段代码proxy_set_header Host $host;设置一下居然成功了,如下:

server {
        listen       80;
        server_name  api.xfindzp.com;
        location / {
                proxy_pass http://192.168.0.81:6060; #这里的端口记得改成项目对应的哦
                # 设置成这个就好了
                proxy_set_header Host $host;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header X-Forwarded-Proto $scheme;
                proxy_set_header X-Forwarded-Port $server_port;
        }
    }

   server {
        listen       443 ssl;
        server_name  api.xfindzp.com;

        ssl_certificate      /usr/local/nginx/cert/api.xfindzp/214731881260330.pem;
        ssl_certificate_key  /usr/local/nginx/cert/api.xfindzp/214731881260330.key;

        location / {
                proxy_pass http://192.168.0.81:6060;
                # 设置成这个就好了
                proxy_set_header Host $host;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header X-Forwarded-Proto $scheme;
                proxy_set_header X-Forwarded-Port $server_port;
                proxy_set_header Upgrade $http_upgrade;
                proxy_set_header Connection "upgrade";
        }
    }

引用:
1)Nginx配置proxy_pass转发的/路径
2)在Nginx中$host和$http_host有什么区别

点赞
收藏
评论区
推荐文章
blmius blmius
4年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
Wesley13 Wesley13
4年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
当心这些“坑”!阿里云服务器部署前后端分离项目
前言Hi,大家好,我是麦叔,今天给大家带来使用阿里云服务器部署前后端分离项目的实战。最近买了个阿里云服务器和域名,买来之后就扔在哪里放着了(想不通当时为什么买,哈哈
Easter79 Easter79
4年前
thinkcmf+jsapi 实现微信支付
首先从小程序端接收订单号、金额等参数,然后后台进行统一下单,把微信支付的订单号返回,在把订单号发送给前台,前台拉起支付,返回参数后更改支付状态。。。回调publicfunctionnotify(){$wechatDb::name('wechat')where('status',1)find();
Jacquelyn38 Jacquelyn38
4年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Peter20 Peter20
4年前
mysql中like用法
like的通配符有两种%(百分号):代表零个、一个或者多个字符。\(下划线):代表一个数字或者字符。1\.name以"李"开头wherenamelike'李%'2\.name中包含"云",“云”可以在任何位置wherenamelike'%云%'3\.第二个和第三个字符是0的值wheresalarylike'\00%'4\
Easter79 Easter79
4年前
Twitter的分布式自增ID算法snowflake (Java版)
概述分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。而twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移
Wesley13 Wesley13
4年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Stella981 Stella981
4年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
为什么mysql不推荐使用雪花ID作为主键
作者:毛辰飞背景在mysql中设计表的时候,mysql官方推荐不要使用uuid或者不连续不重复的雪花id(long形且唯一),而是推荐连续自增的主键id,官方的推荐是auto_increment,那么为什么不建议采用uuid,使用uuid究