源码安装 Nitter 无法加载图片 Nitter 是一个开源的 Twitter/X 替代前端,通过搭建 Nitter 可以实现无广告浏览推特,可以用别人公开的服务器,也可以自建 今天使用源码自建 Nitter 服务器时,发现在软件内设置代理后,可以正常获取文字信息但是无法获取图片,找了各种方法,最终解决,故在此记录
问题描述 在使用命令启动 Nitter 后,访问网页,查看日志会报如下错误
1 [media] Proxying exception, error: Network is unreachable, url: https://pbs.twimg.com/profile_images/...
Network is unreachable 意思是说完全无法建立到与 pbs.twimg.com 的连接 刚开始认为是代理的路由出现问题,将如下推特的图片地址添加到代理的路由中,发现 Nitter 依旧无法获取图片
1 2 3 4 5 6 7 8 twitter.com x.com twimg.com pbs.twimg.com video.twimg.com abs.twimg.com t.co api.twitter.com
使用 curl 命令处理其中的 URL 链接,发现是可以正常返回图片的
1 2 # 正常访问 curl -v --proxy http://代理IP地址:port https://pbs.twimg.com/profile_images/xxx.jpg -o /dev/null
在 Nitter 的配置文件 nitter.conf 中填写代理配置
1 proxy = "http://代理IP地址:port"
配置后重启,错误从又变成了
1 [media] Proxying exception, error: Connection was closed before full request has been made
这说明 Nitter 确实成功设置了代理,但 Nitter 对代理请求存在问题,连接握手失败,nitter.conf 中的 proxy 配置不能代理图片请求,需要使用其他方法来代理图片请求
解决方案 使用 proxychains4 在系统层面强制所有出站流量走代理 首先安装 proxychains4,可以直接用包管理器安装
1 sudo apt install proxychains4
编辑 /etc/proxychains4.conf,配置如下
1 2 3 4 5 6 7 8 9 10 11 12 # 允许直连本地地址 dynamic_chain # 排除本地地址,否则 Redis 也会被代理拦截 localnet 127.0.0.0/255.0.0.0 localnet ::1/128 # 注释掉strict_chain #strict_chain # 代理列表 [ProxyList] http 127.0.0.1 本地代理端口
配置成功后,重启 Nitter 成功获取到了推文的图片
1 proxychains4 ./nitter -c nitter.conf
修改 systemd 服务配置 在 nitter.service 文件中加入 proxychains4,使 Nitter 作为后台服务时也能正确走代理
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 [Unit] Description=Nitter (An alternative Twitter front-end) After=syslog.target After=network.target [Service] Type=simple # set user and group User=用户ID Group=群组ID # configure location WorkingDirectory=/path/to/NitterDir ExecStart=/usr/bin/proxychains4 /path/to/Nitter -c /path/to/Nitter.conf Restart=always RestartSec=15 [Install] WantedBy=multi-user.target
重载并重启服务
1 2 3 sudo systemctl daemon-reload sudo systemctl restart nitter sudo systemctl status nitter
本以为搭建一个 Nitter 非常简单的,没想到碰到了代理的问题,设置来设置去还是没能找到解决的方案,最后还是靠 AI 帮助,使用 proxychains4 成功地代理了 Nitter (  ̄ー ̄)φ__