由于某些我也不知道的原因,Google 在国内是个时而抽风时而不存在的网站,于是咱们要丰衣足食自己搭建个 Google 镜像出来。
在看这篇文章之前,首先你得准备一台墙外的服务器或 VPS,本文默认用 root
用户,并操作在系统的 /root
目录下,为了安全考虑,请自行更换目录。
一、编译安装 Nginx
1、首先更新下系统
sudo apt-get update && sudo apt-get upgrade
2、安装的 Nginx 需要的包以及 Git
sudo apt-get install libpcre3 libpcre3-dev zlib1g-dev libssl-dev build-essential git
3、新建立个 Nginx 目录,方便管理
mkdir nginx && cd nginx
下载 Nginx 最新稳定版,目前的版本是 1.6.2
,用 Git 克隆两个 Nginx 模块,一个是 wen.lu 开源的 ngx_http_google_filter_module,另一个是 Nginx 替换关键词模块 ngx_http_substitutions_filter_module
wget http://nginx.org/download/nginx-1.6.2.tar.gz tar -xvf nginx-1.6.2.tar.gz git clone https://github.com/cuber/ngx_http_google_filter_module git clone https://github.com/yaoweibin/ngx_http_substitutions_filter_module
4、进入 Nginx 目录并创建个 Nginx 临时文件夹
cd nginx-1.6.2 mkdir /var/tmp/nginx
5、使用下面的参数开始编译
./configure \ --prefix=/usr --conf-path=/etc/nginx/nginx.conf --pid-path=/var/run/nginx.pid --lock-path=/var/lock/nginx.lock --http-client-body-temp-path=/var/tmp/nginx/client --http-proxy-temp-path=/var/tmp/nginx/proxy --http-fastcgi-temp-path=/var/tmp/nginx/fastcgi --http-scgi-temp-path=/var/tmp/nginx/scgi --http-uwsgi-temp-path=/var/tmp/nginx/uwsgi --with-http_ssl_module --with-http_gzip_static_module --with-ipv6 --with-http_sub_module \ --add-module=/root/nginx/ngx_http_google_filter_module \ --add-module=/root/nginx/ngx_http_substitutions_filter_module
PS:如果需要支持 IPv6 请别忘记增加 IPv6 模块 --with-ipv6
6、没问题以后直接用 make 安装
make && make install
二、开启 Nginx 服务
默认这么安装好以后每次检查配置、重启之类的操作略麻烦,所以我们模仿 Ubuntu 14.04 官方源,给系统设置个 nginx 服务,方便我们检查配置、启动重启关闭 Nginx 以及开机自动启动 Nginx
1、进入系统的 /etc/init.d 目录
cd /etc/init.d/
2、新建并编辑一个 nginx 文件
vi nginx
3、具体内容如下
#!/bin/sh ### BEGIN INIT INFO # Provides: nginx # Required-Start: $local_fs $remote_fs $network $syslog # Required-Stop: $local_fs $remote_fs $network $syslog # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: starts the nginx web server # Description: starts nginx using start-stop-daemon ### END INIT INFO PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin DAEMON=/usr/sbin/nginx NAME=nginx DESC=nginx # Include nginx defaults if available if [ -f /etc/default/nginx ]; then . /etc/default/nginx fi test -x $DAEMON || exit 0 set -e . /lib/lsb/init-functions test_nginx_config() { if $DAEMON -t $DAEMON_OPTS >/dev/null 2>&1; then return 0 else $DAEMON -t $DAEMON_OPTS return $? fi } case "$1" in start) echo -n "Starting $DESC: " test_nginx_config # Check if the ULIMIT is set in /etc/default/nginx if [ -n "$ULIMIT" ]; then # Set the ulimits ulimit $ULIMIT fi start-stop-daemon --start --quiet --pidfile /var/run/$NAME.pid \ --exec $DAEMON -- $DAEMON_OPTS || true echo "$NAME." ;; stop) echo -n "Stopping $DESC: " start-stop-daemon --stop --quiet --pidfile /var/run/$NAME.pid \ --exec $DAEMON || true echo "$NAME." ;; restart|force-reload) echo -n "Restarting $DESC: " start-stop-daemon --stop --quiet --pidfile \ /var/run/$NAME.pid --exec $DAEMON || true sleep 1 test_nginx_config # Check if the ULIMIT is set in /etc/default/nginx if [ -n "$ULIMIT" ]; then # Set the ulimits ulimit $ULIMIT fi start-stop-daemon --start --quiet --pidfile \ /var/run/$NAME.pid --exec $DAEMON -- $DAEMON_OPTS || true echo "$NAME." ;; reload) echo -n "Reloading $DESC configuration: " test_nginx_config start-stop-daemon --stop --signal HUP --quiet --pidfile /var/run/$NAME.pid \ --exec $DAEMON || true echo "$NAME." ;; configtest|testconfig) echo -n "Testing $DESC configuration: " if test_nginx_config; then echo "$NAME." else exit $? fi ;; status) status_of_proc -p /var/run/$NAME.pid "$DAEMON" nginx && exit 0 || exit $? ;; *) echo "Usage: $NAME {start|stop|restart|reload|force-reload|status|configtest}" >&2 exit 1 ;; esac exit 0
4、赋予权限并增加到系统服务
sudo chmod +x ./nginx sudo update-rc.d nginx defaults
三、修改默认的 nginx.conf 配置文件
默认官方的配置文件写的很简单,这里我们也模仿 Ubuntu 14.04 官方源修改一个适合我们的 Nginx 配置
1、编辑 /etc/nginx/nginx.conf
vi /etc/nginx/nginx.conf
具体内容如下:
worker_processes 4; pid /var/run/nginx.pid; events { worker_connections 768; } http { sendfile on; tcp_nopush on; tcp_nodelay on; keepalive_timeout 65; types_hash_max_size 2048; server_tokens off; access_log /var/log/nginx/access.log; error_log /var/log/nginx/error.log; proxy_temp_file_write_size 128k; proxy_temp_path /var/cache/nginx/temp; proxy_cache_path /var/cache/nginx/cache levels=1:2 keys_zone=cache_one:100m inactive=7d max_size=10g; gzip_static on; gzip on; gzip_disable "msie6"; include /etc/nginx/sites-enabled/*; }
2、新建几个必要的文件夹
其中 /etc/nginx/sites-enabled
用来放我们的网站配置文件,/var/log/nginx
用来放 log 日志文件,/var/cache/nginx/cache
和 /var/cache/nginx/temp
则是 Nginx 反代缓存文件夹。
mkdir -p /etc/nginx/sites-enabled mkdir -p /var/log/nginx mkdir -p /var/cache/nginx/cache mkdir -p /var/cache/nginx/temp
3、检查 Nginx 配置
直接运行 nginx -t
如果输出如下提示,则一切正常
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful
四、开启 Nginx SSL 支持
1、为了管理方便,我们建立个 ssl 目录
mkdir -p /root/ssl && cd /root/ssl
2、运行下面的命令,生成 example.com.key
和 example.com.csr
openssl req -new -newkey rsa:2048 -nodes -out example.com.csr -keyout example.com.key -subj "/C=US/ST=CA/L=Los Angeles/O=Example Inc./OU=Web Security/CN=example.com"
如果是泛域名证书,最后的域名改成 *.example.com
3、然后把 csr 文件提交给你的 SSL 证书商
验证好域名以后会颁发给你一个 .crt
文件,我们命名为 example.com.crt
4、接着我们新建一个配置文件,用来反代 Google
请自行更换配置文件里的域名和证书文件名
vi /etc/nginx/sites-enabled/google.conf
具体配置如下
server { listen 80; server_name example.com; return 301 https://example.com$request_uri; } server { listen 443 ssl; server_name example; ssl on; ssl_certificate /root/ssl/example.com.crt; ssl_certificate_key /root/ssl/example.com.key; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_prefer_server_ciphers on; ssl_ciphers ALL:!aNULL:!ADH:!eNULL:!LOW:!EXP:RC4+RSA:+HIGH:+MEDIUM; keepalive_timeout 70; ssl_session_cache shared:SSL:10m; ssl_session_timeout 10m; resolver 8.8.8.8; location / { google on; google_scholar "scholar.google.com"; } }
5、保存后重启下 Nginx
service nginx restart
OK,大功告成!浏览器里访问 https://example.com/
看看是否已经可以反代 Google 了。
五、注意事项以及赠送 20 个免费 SSL 证书
1、Google 学术的域名各个地区的机房不一样,请先运行 curl -I scholar.google.com
看看是否跳转到了不同的域名,比如香港的服务器就会跳转到 scholar.google.com.hk
,日本的就会跳转到 scholar.google.co.jp
,那么相应的 google_scholar "scholar.google.com";
这行就要修改成你服务器里访问到的域名
2、用的人过多以后 IP 会被 Google 限制,搜索的时候会要求输入验证码,这里我们的解决方案是通过 DNS 轮转到不同的服务器,这样就会有不同的出口 IP,当然自己用的话没啥问题。
3、我也搭建了一个给大家用 https://g.net.co/ 因为我本人的需求是用 Google 搜索英文资料,所以把语言改成了 en-US
,默认搜索出来的都是英文资料。
4、如果你需要免费的泛域名证书,请联系我 showfom [at] gmail [dot] com
附上你的博客或网站地址,然后我会告诉你帮我做两个首页的友情链接,检查没问题以后我会送你一个,只有 20 份,先到先得。
来自http://ttt.tt/162/