国内部署Nitter无法加载图片解决方案

源码安装 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 (  ̄ー ̄)φ__