Ruby [omniauth] 服务器放在国内的话,做国外的第三方登录要怎么解决翻墙问题?

1c7 · 发布于 2016年6月12日 · 最后由 1c7 回复于 2016年6月16日 · 1458 次阅读
25844

发帖主要是想问下大家碰到这种情况会怎么做。

目前我在国内服务器上(UCloud 广州节点) 跑了一个 Rails 项目,做 Facebook / Twitter / Google 第三方登录碰到了问题。 (用的 omniauth,包括 'omniauth-google-oauth2' 'omniauth-facebook' 'omniauth-twitter' )

似乎因为 Oauth 的机制,导致服务器必须自己发请求拿 token 之类的东西,因为服务器在国内当然没法翻墙也就导致第三方登录没法用。

那么现在我只能想到这几种方案:

  1. 把项目放到国外服务器上跑,国内访问就慢了一点不过也可以忍
  2. 对国内这台服务器做代理配置 ? 要怎么做 omniauth 的代理配置 ?
  3. 放弃国外第三方登录,做 QQ 微信 微博 的登录

除了这三种有其他方案吗?如果没有其他方案的话你会怎么选? 我在 ruby-china 这里搜了一下似乎没几个贴聊第三方登录的话题。 = = 蛮奇怪的。是我搜的姿势不对?

共收到 16 条回复
370

服务器可以翻的,2个方案:

  1. 国内服务器上拨云梯VPN ,然后配置 routes,只让你需要的那些IP走 VPN Gateway。类似云梯智能加速的模式。
  2. 国内服务器上配置 HTTP Proxy,然后配置 rules,只让你需要的那些域名走 Proxy。

还有一种最简单最完美的解决方案,不需要让服务器翻:

服务器放在国外,国内服务器上配置 Nginx reserve_proxy 转发 HTTP 请求,5-6行配置,再也不受类似的困扰。 而且,这种配置方法,用户是访问你的国内服务器,所以速度问题不大。

25844

#1楼 @kgen 谢谢,我试试去,搞定了再回复你~~

25844

#1楼 @kgen 后面那种方案我没太懂,能稍微展开讲讲吗? 意思就是需要两台服务器,国内外各一台,国内的配置反向代理,但是国内这台上面不跑代码。 代码是在国外那一台,国内的就只是做反向,拿到结果返回给用户。是这么个意思?

4楼 已删除
15139

#4楼 @1c7 那个方法不算完美吧。

370

#3楼 @1c7 是这样的结构,你的理解对的。

其实,就是常规 Ruby on Rails 的部署结构,你前面肯定是 Nginx 或 Apache Web Server,然后 reverse proxy 转发请求到你的 Unicorn 或 Puma Application Server。 你把 Web Server 放在国内,Application Server 放在国外,即可。

Nginx Reverse Proxy 配置方法见:https://www.nginx.com/resources/admin-guide/reverse-proxy/

96

#6楼 @kgen 这样子国内访问速度不会变慢吗?

370

#7楼 @qinix 国内访问速度,肯定比全部放国内要慢一些,每个请求大约多100ms左右的国内外延迟。 只要这台国内服务器到国外服务器之间的延迟和丢包率足够低,这个差别对用户影响并不大。1秒和1.2秒打开网页的区别。

主要是为了节约时间,避免解决国内各种 rubygems 获取不到,SSL 连接出问题,接入国外服务需要翻的问题。

14935

可否部署两个Application Server,nginx 进行转发,遇到有关第三方登陆的请求让国外服务器处理,其他的国内服务器处理。

25844

#8楼 @kgen DNS 是配到国内这台服务器上对吧? 顺带问下,貌似这种做法对国外用户会稍微慢一点? 根据 DNS 先访问到国内这台,然后反向代理国外那台。 总之非常感谢提供方案。

370

#10楼 @1c7 是的,DNS 指向国内这台服务器。

如果你要考虑国外用户,可以在国外再加一台 Web Server,直接请求国外那台。甚至和 Application Server 放在同一个内网里面,国外用户就更快了。

要节约成本的话,国外那台可以本身既做 Web Server,又做 Application Server,Nginx/Apache Reverse Proxy 支持本机反向代理本机的。

25844

#11楼 @kgen “可以在国外再加一台 Web Server,直接请求国外那台” 那么 DNS 在这种情况下是怎么配置?不懂这个不好意思。 😃

那么在这种情况下就是三台服务器,一台国内 Web Server,一台国外 Web Server,一台 国外 Application Server。对吧? DNS 是配置到哪儿? 国内这台 Web Server 反向代理到国外那台 Application Server。 国外的 Web Server 也反向代理到国外的 Application Server,对吗?

我比较想省钱,所以打算一共两台。 国内一台,国外一台,

国内这台纯粹 Web Server( 上面只跑一个 Nginx 做反向代理 ), 国外那台 Web Server + Application Server ( Nginx + Puma )。

国内的就访问国内的 Web Server 国外的就访问国外的 Web Server Nginx 的配置我网上搜搜就可以找到。可是 DNS 这边是咋配置呢?对 DNS 的理解并不深刻不知道怎么弄。 我不知道要做什么才能达到 “国内的就访问国内的 Web Server,国外的就访问国外的 Web Server” 这种效果。

希望能解答下我的疑惑谢谢

370

#12楼 @1c7 一些国外的收费DNS,或者国内一些免费DNS,支持按照国家区分返回DNS结果,这时你就能实现把国内用户和国外用户解析到不同的服务器了。

25844

#13楼 @kgen 好的,我去看看,我是从 GoDaddy 买的域名,不知道他们是否提供这样的功能。 再次感谢。

370

#14楼 @1c7 GoDaddy 应该没这个功能,毕竟买卖是 GoDaddy 的强项,管理域名DNS记录并不是它的强项。 国内 DNSPod 有这个功能,但是 DNSPod 在国外解析速度一般。 国外有一些服务商也有分国家解析不同 IP,一般收费比较高的都有。

25844

#16楼 @kgen 好的,谢谢,我看看 DNSPod 去,顺带搜下其他 DNS 服务商

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册