- 在Google App Engine 上创建一个新的应用
- 下载WallProxy资源包(GAE版,PHP版,客户端),上传GAE版的文件至刚创建的应用上
- 修改浏览器设置,启动客户端
- 打开gae_server中的的app.yaml文件,修改第一行为自己的id,并把gae_server文件夹复制到Google App Engine SKD的安装路径。【基础篇】第三步有详细的图文说明。
- 如果你的电脑上还没有安装好Python 和Google app engine SKD,请移步【基础篇】查看“第二步:下载并安装 Python ,Google App Engine SKD”安装好后桌面会有个飞机样子的小图标,点击启动,点“File”然后“Add Existing Application”选择路径添加新的应用。
2010年8月29日重要更新:上传问题和证书问题
经wallproxy大哥指点上传遇到麻烦的朋友可以使用SDupload上 传,证书问题解决办法为:把导入根证书的步骤加上吧,将cert/ca.crt导入为根证书,以后遇到https链接就不会弹出警告了,第一次运行后会生 成cert/ca.crt,Windows下IE等浏览器双击ca.crt按提示操作即可导入;Firefox将ca.crt文件拖到Firefox窗口 里,然后选中第一个选项确定即可,导入后最好将以前添加例外的网站全部删除以避免冲突。2010年8月31日重要更新:上传报错的解决办法
评论中.txt朋友提供了一种办法可以解决上传错误的问题,就是先修改hosts文件(这个在系统盘符的windows\system32 \drivers\etc下面),它是一个没有扩展名的文件,先修改为别的名字,最后修改回来。.txt朋友做出了测试证明了可行性。原理暂时不知道,使 用多个均衡负载的办法在评论中找。注意事项:除了wallproxy还有.txt和Geek Bao这几个朋友在评论中给予了很多问题的测试解决办法,择日我会整理更新到文章下面,目前大家可以在评论中仔细看看这些朋友提供的一些问题的解决办法。
我是一次性搞定,按过程一步一步做应该没问题。另外解决总是提醒安全风险的问题,需要导入证书,下面是wallproxy的作者集成的一些常见问题:
怎么设置多个app?¶
- 按如下方式设置多个GAE_PROXY或PHP_PROXY:
# 一个PHP_PROXY PHP_PROXY = [{ 'url': 'http://server.example.com/fetch.php', 'key': '', 'proxy': {}, }] # 三个GAE_PROXY,依此类推 GAE_PROXY = [{ 'url': 'http://server1.appspot.com/fetch.php', 'key': '123\0x01456\0x024789\0x030', 'proxy': {'http': 'www.google.cn:80'}, },{ 'url': 'http://server2.appspot.com/fetch.php', 'key': '', 'proxy': {'http': 'ipv6.google.com:80'}, },{ 'url': 'http://server3.appspot.com/fetch.php', 'key': '', 'proxy': {}, }] # 多个app通过随机选择实现负载均衡,如果需要改变调用频率,例如第1个与第2个调用概率比为4:1,可如下配置: GAE_PROXY = [GAE_PROXY[0]]*4 + [GAE_PROXY[1]] #第1个与第2个调用概率比为4:1
DIRECT_PROXY = [{}, {'http':'127.0.0.1:8000'}]
WallProxy支持生成根证书并签名子证书,为什么我的还是会弹出证书无效警告?¶
- 需要将ca.crt导入到浏览器根证书机构中,才能使得https不再弹出证书无效的警告。
- 首次运行程序后会在程序所在目录生成cert文件夹,里面有一个ca.crt文件
- Firefox依次操作:“首选项->高级->加密->查看证书->证书机构->导入->选择ca.crt文件->选中第一项->确定”,即可导入成功
- IE等Windows下浏览器用户双击ca.crt选择导入证书按提示操作即可导入成功
- Linux下Chrome用户参考Linux下Chrome导入证书进行导入
- 导入后最好将原来添加例外的网站都删除以避免证书冲突
为什么我下载的程序没有cert目录及ca.crt文件?¶
- ca.crt 与ca.key是配套的,如果两者都公开,会留给外界证书欺骗的隐患,所以不再提供现成的ca.crt和ca.key,而是在每位用户首次运行程序时自动 生成。同时生成的还有一个serial文件,用于纪录签名子证书的序列号,因为一个ca签名的证书应该拥有不同的序列号。当这3个文件缺少任意1个时都会 重新生成内容不同的这3个文件,这时需要再重新导入根证书,所以不要随意删除这3个文件中的任何一个。
WallProxy导入根证书后不弹出警告毫无意义,是误导?¶
- 因 为所有基于GAE的代理都不支持原生的https,都不是严格意义上安全的,所以将https走GAE代理后,不会因为不弹警告变得安全,更不会因为弹警 告变得安全。既然如此,不弹警告怎么说也要更方便一些。而且不导入而是将伪造的加入例外的话,遇到真正的证书后还会证书冲突。
- 再来说说安全性。WallProxy上行时所有数据经过zlib压缩后再异或加密;下行时对于html文件zlib压缩后再异或加密,其他文件比较压缩前后的体积,选择体积小的异或后发回,尽量节约了流量,也很少存在明文发送的可能。相比之下,GAppProxy上行时只对url进行了base64加密,其他内容为明文;下行时对文本文件zlib压缩,其他文件原样发回。安全性还算是有提升的。
- GAE代理无法原生支持https,既然拿它作https代理,就意味着更在乎速度而不是绝对安全,在这个基础上,能方便一点干嘛非要折磨自己呢?
¶
- GAE的url是根据app.yaml中的设置映射到某一个文件的,在app.yaml中我们可以看到以下内容:
- url: /fetch\.php script: fetch.py
表示访问/fetch.php时实际是访问的fetch.py文件(因为url用的是正则表达式,所以需要用\.而不是.)。
怎么防止服务端被别人盗用?¶
- 通过上面的映射将url改为非默认的fetch.php可以一定程度上防盗用。
- 当然最好的方法是设置Site_Key实现异或加密来防盗用(异或太简单?简单速度快啊,加密挺影响速度的)。在fetch.py中有一行Site_Key = ''在引号中填入一个任意的字符串(可包含转义字符),然后在修改proxy.conf时'key': ''中填入相同的字符串,即可。
访问服务端的默认UA是类似“Python-urllib/2.6”的,怎么伪装成浏览器?¶
- 配置文件proxy.conf中有个隐藏的HEADERS参数用于设置http头,默认是
HEADERS = {'Content-Type':'application/octet-stream'}
我们改为以下内容就伪装成了Firefox:HEADERS = {'Content-Type':'application/octet-stream', 'User-Agent':'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.2.8) Gecko/20100723 Ubuntu/10.04 (lucid) Firefox/3.6.8'}觉得默认的Content-Type不合理也可以进行修改。
提示“ImportError: No module named OpenSSL”¶
- 这是因为使用了源码版而Python没有OpenSSL模块
- Linux用户安装python-openssl即可解决:sudo apt-get install python-openssl
- Windows用户下载pyOpenSSL(建议使用Python 2.6)。svn中上传了Python2.6对应的所需pyOpenSSL模块,checkout下来后将_OpenSSL文件夹改名为OpenSSL放到程序所在目录也可以。
如何编写规则选择是使用GAE还是PHP?¶
Ubuntu下如何开机自动运行?¶
- 对 于一般的Python程序,无论是在sh脚本文件中直接写路径还是在路径后加&,当该脚本运行结束时Python都会伴随结束。我们不由脚本启动 而是由会话启动则不会这样了,依次选择“系统 > 首选项 > 会话 > 会话启动程序 > 添加”,在这里设置启动就可以了。
如遇到问题请查看原文连接:http://www.win8e.com/google-app-engine-wallproxy.html 中的评论。
Tweet
0 评论:
发表评论