2014年3月2日星期日

用gae为你的blogger作反向代理

原因

Blogger是个好东西,但是因为一些奇怪的原因,在中国总是访问不了。
偶尔看到一个博文:《利用GAE给Blogger做一个国内可以访问的镜像站》,十分高大上。
因此跟着文章思路瞎琢磨了一番,仅此记录。

bs2grproxy

项目主页:https://code.google.com/p/bs2grproxy/
源代码:http://bs2grproxy.googlecode.com/svn/
工具下载地址:https://code.google.com/p/bs2grproxy/downloads/list
工具备份:http://yunpan.cn/Q4qLULxwErWKm
作者的描述:

How to use
1. Download the source package
2. Modify app name in app.yaml
3. Upload the app
Enjoy

由此看来,这是一个基于GAE的轻量级反向代理程序。

前期步骤

不多赘述,引用Luke在博文的步骤,略修改。

步骤
1. 在GAE中新建立一个空的app,并记录下app名称。
2. 下载资源包 (这部之前你应该已经做到了)
3. 修改app.yaml文件中的app名称:

application: 你的App名称
version: 1-2
runtime: python
api_version: 1

handlers:

- url: /(.*)
script: bs2grproxy.py
secure: optional

下载bs2grproxy-1.2.zip后解压,然后用记事本打开app.yaml文件。其中application:后的斜体字部分就是你需要修改的地方,这里你应该换成自己的app名。

同时Luke建议大家再编辑下bs2grpconfig.py这个文件:

# You can set them later directly in Database
# HTML target url
TARGET_HOST = “你的博客地址”
# Cache check option. value can be ‘EOD’ or 0 <= number.

PS:如果没有配置bs2grpconfig.py,也可以在上传完程序后按以下步骤修改,只是等其生效需要很长很长时间。

  1. 进入相应app的管理页面 - Data - Datastore Viewer - 进入“name=www”项目。
  2. 在页面的最下方修改“target_host”的Value值。
  3. 保存等其生效。

4.上传配置好的bs2grproxy

另,Luke推荐的SDUpload已失效,作者在趣客中有提到。
可以设置secure让APP支持https。secure共有三个属性:

  1. never: 当我们使用https前缀访问时,会自动重定向到http。
  2. always: 当使用http访问时,会自动重定向到https。
  3. ptional: 自由选择,http and https均可使用。

后期的坑

其实原理和前期步骤并不复杂,但是由于自己之前并没有了解GAE,加之SDUpload的失效,因此在上传App的时候十分不顺利,在此记录。

SDUpload的失效

下载了SDUpload,使用SDUpload update ../app/命令,返回302错误代码。
后查得作者博文得知,由于google 已经提供了界面化的上传工具GoogleAppEngineLauncher,所以作者停止了更新。

GoogleAppEngineLauncher的未知错误

SDUpload作者处得知有了GoogleAppEngineLauncher这个工具,因此焦点转到这个工具上。SDUpload作者说已经将这个工具分离出来了,但是貌似地址失效,因此转到GAE官网下载SDK(python版本 备份)。
但是事情并没有那么顺利,用GoogleAppEngineLauncher打开修改后的App,点击Deploy后出了一个窗口,写着如下的东西:

2014-03-02 21:15:14 Running command:
“[‘G:\\xb1\xe0\xb3\xcc\python2.7\pythonw.exe’, ‘-u’, ‘C:\Program
Files\Google\google_appengine\appcfg.py’, ‘–no_cookies’,
u’–email=saber_zodiac@163.com’, ‘–passin’, ‘update’,
‘C:\Users\saber_000\Desktop\bs2grproxy\app’]”

然后就没有反应了,试了好几次也是如此,于是将该列表用空格join了一下,得到如下命令:

G:\编\python2.7\pythonw.exe -u C:\Program Files\Google\google_appengine\appcfg.py --no_cookies --email=saber_zodiac@163.com --passin update C:\Users\saber_000\Desktop\bs2grproxy\app

看来还是需要命令行了。

终于搞掂,命令行

一开始使用命令行执行上面的命令发现没有反应。
于是cdappcfg.py所在目录,直接执行:

appcfg.py --no_cookies --email=saber_zodiac@163.com --passin update C:\Users\saber_000\Desktop\bs2grproxy\app

提示:

Another transaction by user saber_zodiac@163.com is already in progress for app: s~lyc-blog, version: 1-2. That user can undo the transaction with “appcfg rollback”.

哦,那就rollback吧。

appcfg.py rollback C:\Users\saber_000\Desktop\bs2grproxy\app

完了之后,再执行update,终于顺利好了。

大功告成

我的博客http://mrlyc.blogspot.com/ 终于有了个怕被墙的镜像站http://lyc-blog.appspot.com/ 了。


@LYC
转载请注明出处

0 评论:

发表评论