倚楼听风雨
淡看江湖路

谷歌翻译服务解决方案

背景

由于谷歌宣称「因为使用率低」的原因退出中国市场,导致我们 CEM 相关的翻译服务无法进行翻译。可参考 TechCrunch 原文:

解决方案

解决方案其实比较简单,虽然谷歌对国内进行了屏蔽,但是对于其他地域依然提供在线以及 API 形式的翻译服务,比如中国香港、中国澳门、中国台湾以及其他国家等,那么我们其实可以利用云服务器厂商提供的其他地域服务器节点(比如香港节点)来对谷歌翻译 API 服务进行转发,因为香港等云服务器节点是可以对谷歌翻译服务进行访问的。
其实,不仅仅是翻译,无论是个人还是企业,如果需要用到一些大陆已经屏蔽的国外服务,其实都可以通过云服务器代理的方式来简介实现国外服务的访问,前提是你的业务要合法合规。

谷歌翻译服务解决方案的图片-高老四博客

如上图所示,是一个反向代理的基本架构:

  1. 我们要有一个可以访问谷歌服务的云服务器
  2. 在云服务器中使用 Nginx 配置反向代理,使得针对翻译的请求服务都通过 Nginx 转发到对应的「translate.googleapis.com」上去。

关于 Nginx

不推荐 yum 安装 Nginx,所以以下说明都是关于手动编译安装 Nginx 时的相关说明,编译安装 Nginx 比较简单,关闭 selinux,然后 yum 安装好 gcc-c++、pcre-devel、zlib-devel、openssl-devel 依赖。
接下来总共分为三步:

  1. wget https://nginx.org/download/nginx-x.xx.x.tar.gz
  2. tar -zxvf ./nginx-x.xx.x.tar.gz
  3. /configure
  4. make
  5. make install

这样默认编译安装下来,会安装在「/usr/local/nginx」目录当中。

Nginx 在安装时配置 https

https 是 Nginx 直接支持的模块,所以如果要是编译安装的时候需要配置 https,直接在『./configure』后面配置「–with-http_ssl_module」即「./configure –with-http_ssl_module」即可。

Nginx 在已经安装后配置 https

如果你已经安装了 Nginx,但是当时并没有配置 https,那也可以进行重新编译,编译的时候记得要执行「./configure –with-http_ssl_module」,但是不需要重新安装,即按照上述步骤直接执行到「make」命令即可,make 命令执行完毕之后,在当前目录会出现『objs』目录,进入到 objs 目录将 nginx 文件覆盖原有的「/usr/local/nginx/sbin」里面原有的 nginx 文件重启 Ngixn 即可。

Nginx 的反向代理配置

Nginx 中的「proxy_pass」代表代理转发,如下面配置的谷歌翻译转发服务:

如上,当我们的服务请求当前服务器(或者域名)的「/translate_a/single」uri 的时候,Nginx 会通过代理转发到『translate.googleapis.com』,这里面只会是域名会被替换,域名后面的 URI 均不会改变,通过这样的方式,因为当前这台服务器是可以请求谷歌翻译服务的,当前的服务器又可以直接提供访问服务,从而间接的我们就实现了谷歌翻译的正常使用。

Nginx 的跨域配置

之前谈到了 Nginx 配置 https,为什么要配置 https 呢?这里除了安全的原因,还有一个就是为了解决 https 不能访问 http 的原因。比如你业务的域名是 https://business.glorze.com,但是如果你不配置 Nginx https,你配置的翻译服务域名可能是 ip 或者是 http://translate.glorze.com,在这种情况下,如果业务中存在翻译请求,那么 https://business.glorze.com 请求 http://translate.glorze.com 是无法请求的,甚至 Chrome 浏览器会强制把「http://translate.glorze.com」变成『https://translate.glorze.com』来进行请求。

浏览器强制使用 https 的行为也不能使用你的翻译服务可用,此时会抛出跨域的问题,对于不用域名之间的访问,总是会出现跨域的问题,这是正常的。
所以,无论如何,首先你的翻译服务应该配置好 https。
其次如何解决跨域问题?也比较简单。
首先在配置文件中的 http 模块中声明跨域域名白名单:

接下来在「nginx.conf」配置中的『location /』中配置跨域域名白名单即可。

 

  • Access-Control-Allow-Origin:配置为 * 表示服务器可以接受所有的请求源(Origin),即接受所有跨域的请求,也可以指定一个确定的URL。
  • Access-Control-Allow-Headers:代表允许在请求该地址的时候带上指定的请求头,例如:Content-Type、Authorization,使用逗号(,)拼接起来放在双引号(”)中,可根据实际请求类型添加。
  • Access-Control-Allow-Methods:代表允许使用指定的方法请求该地址,常见的方法有:GET、POST、OPTIONS、PUT、PATCH、DELETE、HEAD。

Nginx 的请求头大小配置

如上谷歌翻译 API 所示,一项翻译业务可能一次性翻译很多条数据,即批量翻译,Nginx 默认请求体的大小的是 128K,如果我们遇到了 Ngixn 出现「414 Request-URI Too Large」的情况,可以尝试加大 Nginx 客户端请求头缓冲区,在「nginx.conf」的 http 模块中配置如下:

禁止云服务器的 IPV6

有的时候我们进行代理转发业务时候,可能由于云服务器支持 IPv6,所以在 Nginx 的 error.log 会看到类似下面这样的报错信息:

716158#0: *13028 connect() to [2404:6800:xxxx:801::2xxa]:443 failed (101: Network is unreachable) while connecting to upstream, client: 100.127.xxx.204, server: localhost, request: “GET /translate_a/single

这是因为 Nginx 有时候会使用 IPv6 协议进行请求,那么对方网站不支持 IPv6 的话,那么代理转发就宕机了,所以解决方案也比较粗暴,可以直接禁用服务器的 IPv6,直接修改「/etc/sysctl.conf」文件,添加或修改为如下:

相关文章阅读

  1. GitHub 加速教程
  2. 记一次网站迁移全过程,单服务器单 IP 双域名搭建 lnmp 架构实现 WordPress 与 Discuz! 并存
  3. 分享几个实用有趣的酷站,丰富你的网络生活 第五期
  4. 关于图片压缩分享一些我收藏的几个网站 持续更新

更博不易,如果觉得文章对你有帮助并且有能力的老铁烦请捐赠盒烟钱,点我去赞助。或者扫描文章下面的微信/支付宝二维码打赏任意金额(点击「给你买杜蕾斯」),也可以加入本站封闭式交流论坛「DownHub」开启新世界的大门,老四这里抱拳谢谢诸位了。捐赠时请备注姓名或者昵称,因为您的署名会出现在赞赏列表页面,您的捐赠钱财也会被用于小站的服务器运维上面,再次抱拳感谢。

赞(7) 给你买杜蕾斯
本站原创文章受自媒体平台原创保护,未经允许不得转载高老四博客 » 谷歌翻译服务解决方案

开始你的表演 抢沙发

觉得文章有用就打赏一下老四,鼓励我更好的创作

非常感谢你的打赏,我们将继续给力更多优质内容,让我们一起创建更加美好的网络世界!

支付宝扫一扫打赏

微信扫一扫打赏

登录

找回密码

注册