在 Ubuntu 20.10 上使用 Nginx 安装 Searx

介绍

Searx 是一种开源搜索引擎,可将来自 70 多个引擎(例如 Bing、Google、DuckDuckGo 或 Wikipedia)的结果收集到一个站点中,而无需记录您的搜索历史记录、IP 地址或浏览器指纹。

完成本指南后,您将拥有:

功能齐全的 Searx 搜索引擎(1.0.0 版) 私人和加密、无日志搜索 代理链接以增加隐私 使用反向代理规则引擎防止滥用

先决条件

要完成本指南,您需要具备以下条件:

带有 Ubuntu 20.10 和 root 访问权限的 Vultr 云实例 添加 IPv6 地址 基本的 Web、网络和 DNS 知识

1. 更新域 DNS 条目

使用您的自定义域,更新 一个记录 (IPv4) 和 AAAA记录 (IPv6) 与您的服务器的 IP 地址。 本指南使用 search.example.com 对于所有示例。 如果您使用 Vultr 托管您的 DNS,您可以通过访问 域名系统 控制面板中的选项卡。

设置入口
类型A 和 AAAA
姓名搜索
数据云实例 IPv4 (A) 和 IPv6 (AAAA) 地址
优先事项没变

2. 为您的服务器创建防火墙

在里面 防火墙部分 的产品页面,添加一个新的防火墙并将其附加到您的服务器。 防火墙中的最后一个条目用于 ssh 安全。 将 SSH 的默认端口 (22) 更改为 1024 到 65535 之间的任何随机端口号将有助于阻止一些机器人攻击。

IPv4 和 IPv6 协议

操作协议端口源
接受TCP (http)80 任何地方
接受TCP (https) 443 任何地方
接受 TCP 55800 本地 IP 是首选或任何地方

3. 创建用户并启用仅 SSH 访问

更新和升级 Ubuntu:

# apt update && apt upgrade -y 

创建一个新用户:

# adduser *example_User* 

输入密码和其他详细信息后,将此新用户添加到 sudo 组:

# usermod -aG sudo *example_User* 

在你的 本地计算机, 使用 ssh-keygen 创建一个 SSH 密钥对并将其命名为搜索引擎。

$ cd ~/.ssh
$ ssh-keygen -f searchengine

在 Linux 或 MacOS 上,将密钥复制到您的服务器。 对于 Windows,请阅读此内容 服务器故障帖子 对于 ssh-copy-id 的替代方案。

$ ssh-copy-id -i ~/.ssh/searchengine *[email protected]<cloud IP address>*

以 root 用户身份返回您的服务器,更新 SSH 配置以删除密码身份验证。

# nano /etc/ssh/sshd_config

查找并更改以下条目。 删除每行开头的所有井号“#”。

...
Port 55800 #change from 22 to match firewall

PubkeyAuthentication yes
UsePam no

PasswordAuthentication no
PermitRootLogin no

保存此文件并重新启动 ssh:

# systemctl restart ssh

保持 root 帐户仍处于登录状态,在您的计算机上打开一个新的终端窗口 本地计算机. 使用您的新用户帐户、自定义端口和密钥使用 ssh 登录到您的服务器:

$ ssh -p 55800 -i ~/.ssh/searchengine *[email protected]<cloud IP address>* 

您现在可以注销 root 用户并关闭 Vultr 终端窗口。 您将在本指南的其余部分使用这个新用户。

4. 添加交换文件

如果您的服务器内存少于 1GB,Searx 将不会安装。 添加交换文件将为您解决此问题:

    $ sudo swapoff /swapfile
    $ sudo fallocate -l 1G /swapfile
    $ sudo mkswap /swapfile
    $ sudo swapon /swapfile
    $ sudo chmod 600 /swapfile 
    $ sudo swapon --show

最后一个命令将输出如下结果:

          NAME    TYPE    SIZE    USED    PRIO
      /swapfile     file    1024M     0B    -2

5. 安装 Nginx 和免费的 SSL 证书

安装 Nginx。

$ sudo -H apt install nginx

使用域作为文件名创建配置文件(例如:search.example.com)。

$ sudo nano /etc/nginx/sites-available/search.example.com

改变 服务器名称 匹配您在上述第 2 步中创建的自定义域名:

server {
    listen 80;
    listen [::]:80; # For IPv6
    server_name search.example.com; # <-- CHANGE TO YOUR CUSTOM DOMAIN NAME
    access_log /dev/null; # No Logs
    error_log /dev/null; # No Logs
    root /var/www/html;
    index index.html index.htm;

    location / {
        try_files $uri $uri/ = 404;
    }

    # For Certbot
    location /.well-known/acme-challenge {
        root    /var/www/html;
    }

    # https://search.example.com/searx
    location /searx {
        proxy_pass         https://127.0.0.1:4004/;
        proxy_set_header   Host             $http_host;
        proxy_set_header   Connection       $http_connection;
        proxy_set_header   X-Real-IP        $remote_addr;
        proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
        proxy_set_header   X-Scheme         $scheme;
        proxy_set_header   X-Script-Name    /searx;
    }

    location /searx/static {
        alias /usr/local/searx/searx-src/searx/static;
    }

    location /morty {
        proxy_pass         https://127.0.0.1:3000/;
        proxy_set_header   Host             $http_host;
        proxy_set_header   Connection       $http_connection;
        proxy_set_header   X-Real-IP        $remote_addr;
        proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
        proxy_set_header   X-Scheme         $scheme;
    }
}

保存此文件并在其中创建一个符号链接 sites-enabled 在 Nginx 中激活站点。

$ sudo -H ln -s /etc/nginx/sites-available/search.example.com /etc/nginx/sites-enabled/search.example.com

验证 Nginx 配置正确:

$ sudo nginx -t

删除默认的 Nginx 站点(可选):

$ sudo rm /etc/nginx/sites-available/default
$ sudo rm /etc/nginx/sites-enabled/default

重新加载 Nginx。

$ sudo systemctl reload nginx

为了保护您的隐私,请阻止 Nginx 记录任何请求:

$ sudo nano /etc/nginx/nginx.conf

在里面 nginx.conf 文件,更改日志文件目录:

...
error_log: /dev/null;
access_log: /dev/null;
...

安装 EFF Certbot让我们加密 您的域的 SSL 证书。

$ sudo apt install certbot python3-certbot-nginx
$ sudo certbot --nginx -d search.example.com

重新启动 Nginx 服务以确保您的配置正常工作:

 $ sudo -H systemctl restart nginx

使用 netstat 命令确认您的服务器正在侦听端口 80 和 443:

 $ sudo netstat -tulpn

将配置文件的名称更改为 searx.conf. 这将有助于 Searx 安装脚本在下一步中工作。

$ sudo cp /etc/nginx/sites-available/search.example.com /etc/nginx/sites-available/searx.conf

$ sudo -H ln -s /etc/nginx/sites-available/searx.conf /etc/nginx/sites-enabled/searx.conf

$ sudo rm /etc/nginx/sites-available/search.example.com
$ sudo rm /etc/nginx/sites-enabled/search.example.com

$ sudo nginx -t 
$ sudo systemctl reload nginx

6. 安装 Searx 搜索引擎和组件

您现在已准备好安装 Searx! Searx 使用预先编写的脚本很容易安装。

安装 Golang:

$ sudo apt install golang

创建并 cd 到一个名为“下载”的新目录:

$ sudo mkdir ~/Downloads && cd ~/Downloads 

使用 git 将 Searx 存储库克隆到新的 searx 目录中:

$ sudo git clone https://github.com/searx/searx searx

使用 -p 标志创建两个目录结构。 这可以避免以后运行 Searx 安装脚本时出现权限问题。

$ sudo mkdir -p ~/Downloads/searx/cache/etc/uwsgi/apps-available

$ sudo mkdir -p ~/Downloads/searx/cache/lib/systemd/system     

导航到 searx 目录并编辑 .config.sh 文件:

$ cd searx
$ sudo nano ./.config.sh

更换 PUBLIC_URL 您的自定义域名与 A 和 AAAA DNS 记录匹配。

PUBLIC_URL="https://search.example.com/searx"

使用安装脚本安装 Searx 和 uWSGI:

$ sudo -H ./utils/searx.sh install all

确认 Searx 正在运行:

$ sudo -H ./utils/searx.sh inspect service

创建并复制两个密钥以供您使用 settings.yml 文件。

$ openssl rand -hex 16

$ openssl rand -base64 33

编辑塞尔克斯 settings.yml 文件以匹配您的自定义域和密钥

$ sudo nano /etc/searx/settings.yml 

在服务器部分更新 base_url 和 secret_key。 取消对 result_proxy 部分的注释并添加您的自定义 URL 和密钥。

...
server:
    port : 8888
    bind_address : "127.0.0.1" # address to listen on
    secret_key : "ultrasecretkey" # Use: openssl rand -hex 16 to change this!
    base_url : https://search.example.com # Set custom base_url. Possible values: False or "https://your.custom.host/location/"
    image_proxy : True # Proxying image results through searx

# uncomment below section if you have running morty proxy
result_proxy:
    url : https://search.example.com/morty
    key : !!binary "your_morty_proxy_key" # Use: openssl rand -base64 33 to change this!

保存设置文件,然后重新启动并测试:

$ sudo systemctl restart uwsgi
$ sudo ./utils/searx.sh inspect service

Searx 已安装但尚未从 Internet 上可用。 请求通过 Filtron 路由以保护您的服务器免遭滥用,因此接下来将安装它。

安装 Filtron 反向代理。 您不需要在此脚本的末尾安装 nginx 反向代理 (ProxyPass),因为该步骤已经完成。

$ sudo -H ./utils/filtron.sh install all     

使用安装脚本安装 Morty Results 代理:

$ sudo -H ./utils/morty.sh install all

重新启动 Searx 并检查状态:

$ sudo -H service uwsgi restart
$ sudo -H ~/Downloads/searx/utils/searx.sh inspect service
$ sudo -H ~/Downloads/searx/utils/filtron.sh inspect service
$ sudo -H ~/Downloads/searx/utils/morty.sh inspect service

恭喜! 您的服务器现在托管了一个完全可操作、无日志且 ssl 加密的 Searx 站点。 访问 https://search.example.com/searx 使用它。

注销后,您可以删除防火墙中的端口 55800 条目以提高安全性。 要在将来访问您的服务器,请登录 Vultr 并重新添加此防火墙条目。

Searx 服务器的想法

将浏览器默认搜索引擎更改为 Searx。 您将使用模板添加它 ?q=%s 对于搜索词:

https://search.example.com/searx/search?q=%s

设置 Searx 的首选项以使用特定搜索引擎或更改主题。 设置的详细说明位于 西尔克斯文档.

访问 Searx 实例 将您的服务器添加到公共 Searx 实例列表中。 考虑 Vultr 提供的额外 DDOS 保护,以帮助保护您的服务器免受滥用。

更多信息

西尔克斯项目
西尔克斯文档
Searx Github 存储库
莫蒂 Github 存储库
Filtron Github 存储库

注:本教程在Vultr VPS上测试通过,如需部署请前往Vultr.com

相关阅读:

Posted in: LinuxTags: , ,