nodejs+cloudfoundry 实现代理服务器。
来源:互联网 发布:淘宝帐号安全申诉表单 编辑:程序博客网 时间:2024/05/16 09:47
以前一直用的goagent翻墙,最近发现它越来越慢了, 所以自己用nodejs写了个代理,放在cloudfoundry上面, 比goagent快很多呀。 话不多说,直接贴代码:
放在cloudfoundry上面的代码:
var http=require('http');var https=require('https');var url=require('url');//创建http服务器http.createServer(function(req,res){ //获得请求body var body=''; req.on('data',function(chunk){ body+=chunk; }); req.on('end',function(){ //代理请求 if(!req.headers.fetchurl) return res.end('must have fetchUrl!'); var request_url=req.headers.fetchurl; var option=url.parse(request_url); var httpObj='http:'==option.protocol?http:https; //发送header req.headers.host=option.host; option.path=option.path?option.path:option.pathname+(option.search?option.search:'');//cloudfrondry上 url.parse 后 没有path这个下标 req.headers.path=option.path; delete req.headers.fetchurl; option.method=req.method; option.headers=req.headers; httpObj.request(option,function(result){ //设置header for(var key in result.headers){ res.setHeader(key,result.headers[key]); } result.on('data',function(chunk){ res.write(chunk); }); result.on('end',function(){ res.end(); }); }).on('error',function(error){ res.end('remote http.request error'+error)}).end(body); });}).listen(80);
怎么将nodejs代码上传的cloudfoundry, 可以用cloudfoundry提供的vmc命令行工具,详情大家见官方文档: http://cndocs.cloudfoundry.com/tools/vmc/installing-vmc.html
放在本地的代码(文件名暂且命名为local.js):
var http=require('http');var url=require('url');//创建http服务器http.createServer(function(req,res){ //获得请求body var start_time=new Date; var body=''; req.on('data',function(chunk){ body+=chunk; }); req.on('end',function(){ //代理请求 var request_url='http://your_app_name.cloudfoundry.com'; var option=url.parse(request_url); //发送header req.headers.host=option.host; req.headers.fetchurl=req.url;//设置fetchUrl delete req.headers['accept-encoding'];//不进行压缩,在cloudfoundry上面压缩时访问google会出问题 option.method=req.method; option.headers=req.headers; http.request(option,function(result){ //打出日志 console.log('\033[90m'+req.url+'\t\033[33m'+result.statusCode+'\t\033[36m'+(new Date - start_time)+'ms \033[0m'); //设置header for(var key in result.headers){ res.setHeader(key,result.headers[key]); } result.on('data',function(chunk){ res.write(chunk); }); result.on('end',function(){ res.end(); }); }).on('error',function(error){ res.end('remote http.request error'+error)}).end(body); });}).listen(8787);
将local.js代码中的your_app_name.cloudfoundry.com 改为你真实的cloudfoundry应用的地址。
在本地运行 node local.js 这时候 本地监听了8787端口。
设置浏览器的代理服务器地址为 127.0.0.1:8787 。
火狐浏览器可以安装 autoproxy这个插件来设置代理。
chrome浏览器可以安装 switchproxy这个插件来设置代理。
注:还没实现对https网站的代理。 有兴趣的朋友 自己实现一下https,贴出你的代码和大家分享一下。
#前几天刚玩过cloudfoundry,先顶再试
###有些网站怎么不行啊,我这没法上facebook,用的教育网ipv6
cloudfoundry没把http.request接口封掉吗?
facebook 的网址会跳转到 https://www.facebook.com/ , 它是https的, 我代码中 没有处理https的 那个比较麻烦 我打算以后有空再研究, 你也试一试 实现https
没有
@snoopy 老吴,早就跟你提过cf和af,还有好多这样的云端服务器
@luofei614 代理的话建议你用个模块http-proxy,可以免去你很多麻烦~
@a272121742 嗯,af我看过,但是国内打开太慢,cf倒没去研究过。
@snoopy 恩,刚学nodejs没多久,很多模块还不熟悉,我看看这个。
@snoopy af刚开始我体验的时候打开很快的,不过现在确实太慢了,感觉打开国外的都很慢的,包括我今天打开netbean,开cf也不快
- nodejs+cloudfoundry 实现代理服务器。
- cloudfoundry nodejs process env
- nodejs代理服务器
- NodeJs配置代理服务器
- nodejs系列之八——nodejs与cloudfoundry
- 用 nodejs 做反向代理服务器
- 用 nodejs 做反向代理服务器
- nodejs与cloudfoundry之二:tunnel to mongodb
- 抛弃Nginx使用nodejs做反向代理服务器
- cloudfoundry集成oracle实现keepalive测试
- C#实现Web代理服务器
- Java实现Socket5代理服务器
- HTTP代理服务器的实现
- mina实现代理服务器
- java实现代理服务器
- 微服务之使用NodeJS创建HTTP代理服务器(反向代理)
- nodejs+nodejs-websocket 实现websocket
- IE 代理服务器设置程序实现
- IOS 中 pch 文件详解
- Centos6.5安装webbench时出现/bin/sh: ctags: command not found解决方法
- 14.6.3.1 The InnoDB Buffer Pool
- 如何在Linux中查看所有正在运行的进程
- SQL常用语法 - 增删改查
- nodejs+cloudfoundry 实现代理服务器。
- 贪心or暴力? POJ 2586 ~Y2K Accounting Bug
- mySql添加注释
- 关于spring+springmvc+mybatis的整合中,讲的不错的一篇SSM整合的帖子.
- HDU 4196 Remoteland
- ZooKeeper之深入浅出概述
- 学python 对以后运维的工作很重要吗
- Android开发桌面插件
- 实用的60个CSS代码片段[转]