要搭建一个自己专用的搜索引擎的必要条件就是我们得有一个境外的服务器,哪怕香港的也行。如果在境内的话,还是处于GFW之内,是没有什么意义。当然借着这个思路,还能做什么,就靠大家的想象力了。各大云厂商的VPS也是不错的选择。华为云、亚马逊云、谷歌云都有12个月的免费试用,足够我们折腾和验证技术了。

今天的实验环境是 ubuntu server 16的服务器。我已经写好了脚本,部分关键部位还是需要手工操作。先来看看效果

google-search.gif

搜索了一个关于yii2的技术问题,没有任何广告吧。

Do it

首先我们用xshell登录我们服务器,创建一个工作文件下,当然当前路径也是可以的。我们需要下载几个源码包,这个我已经写好了脚本download.sh

mkdir source
cd source
## 下载 nginx
wget "http://nginx.org/download/nginx-1.16.1.tar.gz"
## 下载 pcre-8.39
wget "https://ftp.pcre.org/pub/pcre/pcre-8.39.tar.gz"
## 下载 openssl-1.1.1d
wget "https://www.openssl.org/source/openssl-1.1.1d.tar.gz"
## 下载 zlib-1.2.11
wget "http://zlib.net/zlib-1.2.11.tar.gz"
## 下载 google_filter 扩展
git clone "https://github.com/cuber/ngx_http_google_filter_module"
## 下载 substitutions 扩展
git clone "https://github.com/yaoweibin/ngx_http_substitutions_filter_module"
##  解压包
tar -zxvf nginx-1.16.1.tar.gz
tar -zxvf pcre-8.39.tar.gz
tar -zxvf openssl-1.1.1d.tar.gz
tar -zxvf zlib-1.2.11.tar.gz

我们直接执行命令  bash download.sh,系统很快会帮我们下载好要使用的 ngx_http_google_filter等源码。接下来我们开始编译。如果没有安装过编译环境,那么请先安装编译环境。

sudo apt update sudo apt upgrade
sudo apt install build-essential git gcc g++ make #安装编译环境

nginx和其它几个源码包编译的配置我也写了一个脚本configure.sh

./configure \
  --prefix=/opt/nginx \
  --with-pcre=../pcre-8.39 \
  --with-openssl=../openssl-1.1.1d \
  --with-zlib=../zlib-1.2.11 \
  --with-http_ssl_module \
  --add-module=../ngx_http_google_filter_module \
  --add-module=../ngx_http_substitutions_filter_module

接下来 我们进入到  ../source/nginx-1.16.1/ 路径下,当然这个编译配置脚本configure.sh也需要放在这个路径下开始执行。 bash configure.sh 查看执行的结果,如果没有报错。那么我们就编译安装。

sudo make install

这个编译需要一定的时间,大约10分钟之内。等编译好之后,它会帮我们把nginx安装到 /opt/nginx 路径下,如果你不想放在这个路径下,可以修改编译配置脚本 。

编译安装完成后,就是配置nginx,让它能够代理google搜索,工作起来。nginx.conf 的配置如下

worker_processes  1;
events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;    
    server {
        listen 12345 ssl;
        server_name so.domain.com;
        ssl_certificate      /etc/letsencrypt/live/so.domain.com/fullchain.pem;
        ssl_certificate_key  /etc/letsencrypt/live/so.domain.com/privkey.pem;
        ssl_session_timeout 5m;
        resolver 8.8.8.8;
        location / {
            google on;
            google_scholar on;
            google_language "zh-CN";
            google_robots_allow on;
        }
    }
}

这里需要注意的是 listen 12345 ssl; 没有 ssl on; 这是nginx新版本的一个变化。另外端口号这里为了演示,我写的是12345,因为这个搜索是个人自己用的所以端口号要写的比较私人一点。不能用443,防止被封域名。当然端口号也可以定期修改。

配置文件中的ssl加密证书可以私有,也可以参考我的另一篇文章来创建,登录个人域名网站时浏览器不会报警告。当然如果不想使用ssl加密也是可以的,在配置文件中把有关ssl 的配置删掉即可。

配置文件修改好以后,我们把它复制到 /opt/nginx/conf路径下。

现在就可以 启动nginx 来看看效果了

sudo /opt/nginx/sbin/nginx

如果没有报错,那么我们的个人私有搜索引擎网站已经开始运行了。现在打开浏览器试试。


最后我们还需要一个脚本nginx来方便的控制nginx的启动,关闭和开启启动

#! /bin/bash
### BEGIN INIT INFO
# Provides:          sinoll.com
# Required-Start:    $local_fs $network
# Required-Stop:     $local_fs
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: nginx service
# Description:       nginx service daemon
### END INIT INFO

PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
DAEMON=/opt/nginx/sbin/nginx
NAME=nginx
DESC=nginx
test -x $DAEMON || exit 0
# Include nginx defaults if available
if [ -f /etc/default/nginx ] ; then
. /etc/default/nginx
fi
set -e
case "$1" in
start)
echo -n "Starting $DESC: "
start-stop-daemon --start --quiet --pidfile /opt/nginx/logs/$NAME.pid \
  --exec $DAEMON -- $DAEMON_OPTS
echo "$NAME."
;;
stop)
echo -n "Stopping $DESC: "
start-stop-daemon --stop --quiet --pidfile /opt/nginx/logs/$NAME.pid \
--exec $DAEMON
echo "$NAME."
;;
restart|force-reload)
echo -n "Restarting $DESC: "
start-stop-daemon --stop --quiet --pidfile \
/opt/nginx/logs/$NAME.pid --exec $DAEMON
sleep 1
start-stop-daemon --start --quiet --pidfile \
/opt/nginx/logs/$NAME.pid --exec $DAEMON -- $DAEMON_OPTS
echo "$NAME."
;;
reload)
echo -n "Reloading $DESC configuration: "
start-stop-daemon --stop --signal HUP --quiet --pidfile /opt/nginx/logs/$NAME.pid \
--exec $DAEMON
echo "$NAME."
;;
*)
N=/etc/init.d/$NAME
echo "Usage: $N {start|stop|restart|force-reload}" >&2
exit 1
;;
esac
exit 0

#####   这个文件 复制到 /etc/init.d/nginx  ####

这个脚本 放在 /etc/init.d/路径下,注意文件名没有扩展名。然后我们就可以这样来控制nginx的状态了

sudo source /etc/init.d/nginx #更新配置
sudo /etc/init.d/nginx restart|reload|stop|start

文章主要参考了

## https://github.com/cuber/ngx_http_google_filter_module/blob/master/README.zh-CN.md

这样,我们的个人google搜索引擎就搭建起来了,既方便了工作又提高了效率。当然有人会说为什么不直接搭VPN,做这个就是在不开VPN的时候搜索用的。