Snova — 一个插件化的web proxy框架

2012年1月2日 | 分类: 翻墙利器 | 标签: , ,

使用过GAE翻墙的网友应该知道有个hyk-proxy,以其强大的功能完美的图形化界面稳定的性能著称,不过原作者放弃了此项目,在此基础上开发更先进的snova项目。
重要项目知会

  • 项目已经更名/迁移到Snova,并与hyk-proxy历史版本不再兼容
  • hyk-proxy不再更新,hyk-proxy的相关问题请转移到项目Snova
  • hyk-proxy的AppID共享服务端任然继续运行,不过由于代码并未更新加上Google的新策略,经常会出现CPU、DB超过配额的情况。同时Snova也支持AppID共享计划,不过与hyk-proxy不兼容

关于snova

snova是一个插件化的web proxy框架,目前自动集成基于Google AppEngine平台的GAE插件,基于Heroku平台的Heroku插件,以及增强的PAC插件SPAC,

安装部署

      • 安装运行依赖

      JRE/JDK 1.6+

      • GAE模式

      GAE Plugin的部署配置说明.

      Step 1: 准备JDK/JRE环境

      运行部署snova需要JRE/JDK 1.6+

      Step 2: 创建GoogleAppEngine帐号/应用

      在官方站点创建自己的GAE帐号以及appid http://appengine.google.com/

      Step 3: 准备GAE SDK环境

      • 下载解压Google App Engine SDK(Java/Go) (最新版本), snova-gae支持Java/Go两种语言的server端实现,任选一个即可
      • Windows先没有Go的SDK,但上传snova-gae可以用任意Linux下的Go SDK上传

      Step 4: 部署Server到Appengine服务器

      • Java
      • GUI方式
    • 命令行方式
      • 下载并解压snova-gae-jserver-[version].zip
      • 进入解压的目录, 修改war/WEB-INF/appengine-web.xml, 将<application>值改为自己创建的appid
      • 执行appcfg.cmd/appcfg.sh update war上传, 注意在解压后进入的目录执行(appcfg在'<Google App Engine Java SDK>/bin’下 )
    • Go(Windows下可以用Linux SDK上传)
      • 下载并解压snova-gae-gserver-[version].zip
      • 进入解压的目录, 修改app.yaml, 将application: snova-master中snova-master值改为自己创建的appid
      • 执行appcfg.py update snova-gae-gserver-<version>上传(appcfg.py在'<Google App Engine Go SDK>/’下

       

      Step 5: 配置Snova GAE Plugin的客户端

        • Framework

        Framework的配置仅有两三项,具体涉及proxy的配置均在相应plugin的配置中;目前均在conf/snova.xml中(GUI启动则在Config对话框中配置),简要说明如下:

            1. <localserver host="localhost" port="48100" />, 默认的proxy地址,相应的浏览器的proxy地址应该填”127.0.0.1:48100″
            2. <ProxyEventHandler>GAE</ProxyEventHandler>, 默认选择的proxy实现,若安装了其他的plugin,则可以在此修改为其它的proxy实现

              • GAE Plugin

              基于GAE实现大部分配置均在gae-client.xml中(GUI启动则在GAE plugin的相应Config对话框中配置),简要说明如下:

                    • <WorkerNode appid="" /> 为已部署的ApplicationID, 即<appid>.appspot.com<appid>, eg:
                              <WorkerNode appid="gosnova" />

                    GUI方式下参考下面方式

                          • <WorkerNode appid="" />可配置多个,此情况下, 代理过程中采用轮询策略选择, eg:
                                     <WorkerNode appid="gosnova1" /> 
                                     <WorkerNode appid="gosnova2" />
                                • <WorkerNode appid="" /> 中可以配置用户名/密码,具体用户名/密码概念请参考Authorization, eg:
                                          <WorkerNode  appid="hyk-proxy-demo" user="root" passwd="12345"/>
                                      • 如果不配置appid的话,client会到master node上获取数个共享的appid用于自身启动,注意:
                                      • 共享的appid只能用于匿名用户使用(匿名用户的概念看这里Authorization
                                    • XMPP下 <Account user="" passwd="" />为XMPP账户,是可选配置,在HTTP无法直连情况下可启用,目前可配置GTALK/jabber.org/OVI等几乎所有XMPP帐号(若有不支持的XMPP account,请提交ISSUE), eg:
                                    •          <XMPP>
                                                  <Account user="abc@gmail.com" passwd="123456" />
                                               </XMPP>

                                      GUI方式则需要在Connection Tab下配置

                                            • XMPP账户可配置多个,此情况下代理过程中采用轮询策略选择,eg:
                                                      <XMPP>
                                                         <Account user="abc@gmail.com" passwd="123456" />
                                                         <Account user="xyz@gmail.com" passwd="123456" />
                                                      </XMPP>
                                                  • XMPP模式仅在ConnectionMode模式为XMPP(<ConnectionMode>XMPP</ConnectionMode>)情况下生效
                                                  • <ConcurrentRangeFetchWorker>3</ConcurrentRangeFetchWorker> 在下载文件/观看视频时生效,含义为并发的下载线程数,可以任意调整,建议在1~5之间调整
                                                    • Heroku模式(可选)

                                                    参考HerokuInstallation安装配置部署Heroku Plugin

                                                      • SPAC(可选)

                                                      参考SpecialProxyAutoConfig配置SPAC

                                                      AppId共享计划

                                                      • 在snova的GAE Plugin的GUI中提供有一个共享appid的功能,任何人可以据此共享自己的appid, 如下图:

                                                      • 在snova的命令行工具admin.sh/admin.bat中也内置share/unshare命令
                                                      • 当snova的用户由于某些原因(如不知道怎么安装server侧)没有配置自己的appid时,默认情况下,snova-gae会从服务器上随机获取几个共享appid,然后用匿名用户方式连接<shareappid>.appspot.com

                                                      注意

                                                      • Go版本GAE服务端与Java版本GAE服务端功能完全一致,区别在于Go版本的性能较Java版本为好,粗略观察差距大约在30%以上,另外Go实例启动时间很短(<500ms),而Java实例的启动时间较长(>4s)
                                                      • GUI以及CLI工具中均有share/unshare appid功能, 你可以分享自己的appid到中心服务器,也可以取消分享;中心服务器则随机分派appid给没有安装自己的snova-gae-server的用户
                                                      • Heroku平台无AppEngine平台的流量限制,但效率较GAE为低

                                                      项目地址http://code.google.com/p/snova/

                                                      下载地址http://code.google.com/p/snova/downloads/list

                                                      本文原始地址http://igfw.net/archives/6848

                                                      1. happy
                                                        2012年1月5日13:52

                                                        成功,但怎样导入证书?经常都有提示阻止访问!

                                                      2. happy
                                                        2012年1月4日20:54

                                                        这个貌似不是加密连接?好像有的地址会被重置。

                                                      3. 匿名
                                                        2012年1月4日20:50

                                                        http://code.google.com/p/snova/issues/detail?id=16 这里有用户为数种代理写了前端

                                                      4. WAVE
                                                        2012年1月3日12:24

                                                        有点难 博主如果再说明下就更好了 呵呵

                                                        • iGFW
                                                          2012年1月3日20:29

                                                          呵呵,等以后有时间了找个详细教程,不过其内置共享ID不用自己搭建也可以用。