Pages

Sunday, 18 October 2015

AirGoo -一个提供访问Google搜索的反向代理程序。

FAQ

  • 这玩意能干啥?
为了能任性的能基本愉快的使用Google搜索、图片、地图。
  • 原理和工作模式?
AirGoo
  • 那XXX也能反代,为什么要写app?
要能“基本可用”“基本愉快”的Googling,需要处理因反代而带来的域及资源等很多麻烦问题,为了实现这个反代谷歌的最低水准,写app是实现复杂处理的较容易方法,也才能完整妥善的处理好资源问题。
  • 似乎挺费内存?
目前只有Node.js实现版本,可能需要几十到一百兆内存,未来可能会增加其它语言的实现,或许可以更快的释放内存占用。内存不被利用就是浪费资源,总比大量的使用I/O要好的多。虽然内存不是白菜价但还是消费品水平,升级配置才是根本。
  • 能不能去广告换标识?
除了去除链接的二次跳转,原样还原,原样传输,不更改具体业务数据。
  • 为什么Google其它产品就不能愉快使用?
Google产品线很庞大很复杂,只能覆盖到搜索图片地图这些基本服务。
  • 可以不用nginx等吗?
当然可以,只是无法利用到nginx提供的cache、https/spdy等特性了。

Usage

阅读项目Wiki了解用法及配置。

ChangeLog

V1.1.5 - 15/7/22
  • 修复了部分资源处理不干净的问题
  • 调整了在abusing时的处理
  • 更新了readme
: 本次更新需要清理中间缓存、浏览器缓存。

from https://github.com/Lafeng/AirGoo
---------------
AirGoo方案简要说明

前提是,我们已经把域名指向了服务器并且为该域名申请了一份ssl证书(或自签)。
这里采取的方案是单服务器AirGoo(1.1.5)+nginx+debian 7。

一,环境部署
首先我们需要一个Node.js环境,这里可以根据
进行简单部署。
apt-get install -y apt-transport-https curl
curl -sL https://deb.nodesource.com/setup_0.12 | sudo bash -
apt-get install -y nodejs
为了方便安装nginx(>1.7.3),这里先添加dotdeb的源。
echo "deb http://packages.dotdeb.org wheezy all" >> /etc/apt/sources.list
echo "deb-src http://packages.dotdeb.org wheezy all" >> /etc/apt/sources.list
wget -q -O - http://www.dotdeb.org/dotdeb.gpg | apt-key add -
debian 8 的话就把上面wheezy换成jessie
然后一键安装nginx
apt-get install nginx-full

二,获取配置AirGoo
1,获取
AirGoo开源项目地址如下
https://github.com/spance/AirGoo
首先下载AirGoo到/var/www/目录下,如果不存在/var/www/目录就创建一个
mkdir /var/www
cd /var/www
wget https://github.com/spance/AirGoo/archive/master.zip
一般事先没有安装解压zip的工具,所以先安装解压工具然后解压
apt-get install zip unzip
unzip master.zip
解压出来的文件夹应该是AirGoo-master。
2,配置
进入AirGoo-master,修改config.json。
由于是通过nginx作为前端,所以把监听地址修改为127.0.0.1,
这里把字体改成繁体,自动去掉安全搜索。
sed -i -e 's/0.0.0.0/127.0.0.1/' -e 's/zh-CN/zh-TW/' config.js
3,进程守护
这里使用supervisor,鉴于小内存vps进程容易挂掉,可以自动重启。
写入/etc/supervisor/conf.d/AirGoo.conf如下内容
[program:AirGoo]
command=node /var/www/AirGoo-master/server.js
user=www-data
autostart=true
autorestart=true
然后重新载入一下
supervisorctl reload

三,配置nginx
先操作这个文件/etc/nginx/nginx.conf
找到http段落相关内容,修改如下
http {
...
#Gzip设置
    gzip on;
    gzip_disable "msie6";
    gzip_min_length 1k;
    gzip_proxied any;
    gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;
#缓存设置
    client_body_buffer_size  512k;
    proxy_connect_timeout    5;
    proxy_read_timeout       60;
    proxy_send_timeout       5;
    proxy_buffer_size        16k;
    proxy_buffers            4 64k;
    proxy_busy_buffers_size 128k;
    proxy_temp_file_write_size 128k;
    proxy_temp_path   /home/cache/temp;
    #cache_one是自定义的缓存空间的名字,7d是释放天数,1g是允许占用的最大空间
    proxy_cache_path  /home/cache/path levels=1:2 keys_zone=cache_one:256m inactive=7d max_size=1g;
#ssl统一设定
    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 10m;
    ssl_session_tickets  on;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA:DES-CBC3-SHA:HIGH:!aNULL:!eNULL:!EXPORT:!DES:!MD5:!PSK:!RC4;
    ssl_prefer_server_ciphers on;
...
}
创建缓存文件夹,保证nginx对缓存区域读写权限,由于是包安装,一般都会有个www-data的用户,直接把缓存文件夹所有权让给www-data用户即可。
mkdir -p /home/cache/{path,temp}
chown -R www-data.www-data /home/cache
注释掉/etc/nginx/sites-available/default里面的所有内容,可以使用下面的命令
sed -i 's/^/#/' /etc/nginx/sites-available/default
在/etc/nginx/conf.d/文件夹下直接创建一个以.conf为后缀的文件,如AirGoo.conf,写入如下内容
server {
listen 80;
#gg.xxx.xxx换成自己的域名
server_name gg.xxx.xxx;
rewrite ^(.*) https://gg.xxx.xxx$1 permanent;
}
server {
listen 443 ssl spdy;
server_name gg.xxx.xxx;
#证书私钥存放地址
ssl_certificate /etc/nginx/gg.xxx.xxx.crt;
ssl_certificate_key /etc/nginx/gg.xxx.xxx.key;
    location / {
        # using cache
        proxy_cache             cache_one;   # 前面定义的key_zone name
        proxy_cache_lock        on;
        proxy_cache_key         $host$uri$is_args$args;
        proxy_cache_valid       200 3d;
        proxy_cache_use_stale   error timeout updating;
        # add cache status header
        add_header          X-Cache $upstream_cache_status;
        # back-end
        # 下面的三个header非常重要
        proxy_set_header    X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header    X-Forwarded-Proto https;
        proxy_set_header    X-Forwarded-Host $http_host;
        proxy_http_version  1.1;
        proxy_redirect      off;
                            # Your AirGoo address:port
        proxy_pass          http://localhost:8080;
    }
}
重新载入一下nginx
nginx -s reload

其他方案
https://github.com/cuber/ngx_http_google_filter_module