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国内网站通过阿里云反向代理的解决方案的主要内容,如果未能解决你的问题,请参考以下文章