Trueniu国内网站通过阿里云反向代理的解决方案

Posted 迪亚波罗

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Trueniu国内网站通过阿里云反向代理的解决方案相关的知识,希望对你有一定的参考价值。

目录:

1. 背景

2. 思路

3. 过程

4. 不足

5. 结束语

 一、 背景

        为了便于统一管理网站,我们把客户的全部站点(包括中文站、英文站)都放到了位于AWS的美东服务器上,包括站点的全部图片资源。由于“长城墙”比较高的原因,就产生了一个问题:国内用户访问中文站延迟高到离谱。这不符合我们的初心:服务高可用。

二、 思路

        实际测试显示国内用户访问站点时的路线是:中国电信->香港中转->韩国(日本)中转->美东,也就是说中间绕了很多路,这也就是延迟高的原因;如果通过阿里云服务器来代理访问,则路线是:中国电信->美东,也就是中间没有绕路,请求直达目的地,访问速度当然加快了。我们选择使用nginx高性能反向代理工具来实现这一需求,并且也可以利用Nginx的代理缓存实现拉取目的地服务器的资源并存储在阿里云上,进一步优化访问加速的需求。

        综上所述,思路就是:通过国内云服务器提供商阿里云,做反向代理。

三、 过程

        需求有了,不是耍流氓了^_^。

        思路也有了,不会跳坑了。

        首先是购置阿里云服务器,配置是1核2g,这是学生机的配置(一月9.9,买不了吃亏,买不了上当…),当然我是以学生的身份买的,算是比较明显的薅阿里的羊毛了。

接下来就是安装Nginx,一些需要用到的模块:http_ssl_module、http_stub_status_module、http_realip_module、http_sub_module。

        上一份站点nginx的完整配置,复制以下url至浏览器查看,需公司内网:

        http://git.dy/snippets/1/

        单独解释一下其中的一些要点。

        // proxy_cache_path: 缓存目录 levels: 缓存阻止方式 use_temp_path: 关闭缓存临时文件 keys_zone: 定义缓存区域名称及分配缓存内存 inactive: 缓存有效期,指定时间内无访问则删除缓存资源 max_size: 实际缓存数据的最大尺寸

        proxy_cache_path /var/nginx/cache/aws/dayal-timber levels=2:2:2 use_temp_path=off keys_zone=aws:500m inactive=30d max_size=10g;

1. ssl配置

        ssl on;

        ssl_certificate /usr/local/nginx/ssl/dayal-timber/xxx.pem;

        ssl_certificate_key /usr/local/nginx/ssl/dayal-timber/xxx.key;

        ssl_session_timeout 5m;

        ssl_protocols SSLv2 SSLv3 TLSv1;

        ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;

        ssl_prefer_server_ciphers on;

2. 代理配置

        // s3桶名

        set $s3_bucket          ' bucket ';

        add_header   x-by "aws";

        proxy_http_version  1.1;

        proxy_set_header  Host $s3_bucket;

        proxy_set_header  Authorization '';

        // 安全起见,隐藏header部分信息

        proxy_hide_header  x-amz-id-2;

        proxy_hide_header  x-amz-request-id;

        proxy_hide_header  Set-Cookie;

        proxy_ignore_headers  "Set-Cookie";

        proxy_buffering  on;

        proxy_intercept_errors  on;

        resolver                8.8.8.8 valid=300s;

        resolver_timeout    10s;

        // 组合反向代理目标路径

        proxy_pass   http://$s3_bucket$uri;

3. 代理缓存配置

        // 代理缓存区域名称,上面的keys_zone

        proxy_cache            aws;

        // 缓存文件的缓存时间 200、302:状态值 30d:缓存文件的缓存时间,30天后再次访问该缓存文件,缓存会过期,请求回源

        proxy_cache_valid       any 1m;

        proxy_cache_valid       200 302 30d;

        add_header            Trueniu-Nginx-Cached $upstream_cache_status;

        proxy_cache_lock     on;

        proxy_buffer_size  128k;

        proxy_buffers  200 128k;

4. Sub_filter配置

        // 两个参数,第一个参数是:替换对象,第二个参数是:替换内容。

        sub_filter  s3.amazonaws.com/adwords.yeahmobi.com 'www.dayal-timber.com';

        // 是否只替换一次

        sub_filter_once  off;

四、 不足

        在实际测试中发现以下二个问题:

        1:部分已被代理服务器缓存的资源有时会回源,导致加载时间再次延迟严重;

        2:代理服务器只缓存了图片类资源,其他资源(js、css、fonts)还是直接向源头发起请求,需改进。

五、 结束语

        通过进一步的访问测试,发现页面上所有的s3域名都已经成功了替换成了自定义域名,即站点上所有的请求url都指向了代理服务器,达到了我们的目的,可谓普天同庆。这里的关键点在于以下二个:

        1:判断站点请求资源类型,如果是图片类,则代理至s3,非图片类的,代理至ec2;

        2:替换站点请求s3资源url的域名前缀,达到实际请求url到我们的代理服务器;

        至此,Trueniu国内网站访问速度解决方案完结,过程可谓初生牛犊,但又充满挑战,中途得到了很多大牛的帮助与支持,但还是有很多的细节考虑的不是很完善,亟待努力。

        最后,打一个广告:Trueniu外贸站,“走”遍世界亦不颤!


以上是关于Trueniu国内网站通过阿里云反向代理的解决方案的主要内容,如果未能解决你的问题,请参考以下文章

nginx反向代理

nginx反向代理PC端和手机端分别请求各自后台工程

nginx反向代理PC端和手机端分别请求各自后台工程

电信ADSL光纤下自建centos服务器 阿里云服务器反向代理 外面再加个CDN 该如何操作呢?

正向代理和反向代理的区别

阿里云服务器ECS利用反向代理FRP内网穿透