Ubuntu 服务器部署 Mihomo 代理完整记录

1977 字
10 分钟
Ubuntu 服务器部署 Mihomo 代理完整记录

前言#

我有一台部署在阿里云上的 Ubuntu 服务器。平时在服务器上下载 GitHub、Google、一些海外源站资源时,经常会遇到访问慢、连接失败、SSL 握手异常等问题。

在本地 Windows 上,这类问题通常很好解决:安装 Clash Verge Rev,导入订阅,打开系统代理即可。

但远程 Ubuntu 服务器通常没有图形化界面,不能像 Windows 一样直接使用 Clash Verge 的桌面 UI。服务器真正需要的是 Clash Verge 背后的代理内核,也就是 Mihomo

这篇文章记录我在 Ubuntu 服务器上部署 Mihomo 的完整过程:安装内核、复用 Windows Clash Verge 的订阅配置、注册 systemd 后台服务,并让 curlwgetgitnpm 等命令走代理。

部署完成后的目标效果是:

Terminal window
curl https://www.google.com -I -L

可以正常返回:

HTTP/2 200

安装 Mihomo#

先在服务器上创建一个临时安装目录:

Terminal window
mkdir -p ~/mihomo
cd ~/mihomo

下载 Mihomo 的 Linux amd64 版本:

Terminal window
wget https://github.com/MetaCubeX/mihomo/releases/download/v1.19.30/mihomo-linux-amd64-compatible-v1.19.30.gz

解压、赋予执行权限,并移动到系统命令目录:

Terminal window
gzip -d mihomo-linux-amd64-compatible-v1.19.30.gz
chmod +x mihomo-linux-amd64-compatible-v1.19.30
sudo mv mihomo-linux-amd64-compatible-v1.19.30 /usr/local/bin/mihomo

检查是否安装成功:

Terminal window
mihomo -v

如果能看到 Mihomo 的版本信息,就说明二进制程序已经安装成功。

准备配置文件#

Mihomo 本身只是代理内核,还需要一份 Clash/Mihomo 格式的配置文件,里面包含节点、代理组和规则。

先创建配置目录:

Terminal window
mkdir -p ~/.config/mihomo

如果订阅链接可以在服务器上直接访问,可以这样下载:

Terminal window
wget -O ~/.config/mihomo/config.yaml "你的订阅链接"

但我这里遇到的问题是:订阅站在服务器上访问不稳定,wgetcurl 会卡住,甚至出现 SSL 连接失败。

因此更稳的方式是:直接复用 Windows 上 Clash Verge Rev 已经生成好的配置文件。

首先在 Clash Verge Rev 的订阅页面里,找到正在使用的订阅配置。

配置文件通常位于 Windows 的这个目录:

C:\Users\你的用户名\AppData\Roaming\io.github.clash-verge-rev.clash-verge-rev\profiles

在这个目录中找到对应的 .yaml 文件。判断标准是文件里应该有类似字段:

proxies:
proxy-groups:
rules:

然后在 Windows PowerShell 里使用 scp 上传到服务器:

Terminal window
scp "C:\Users\你的用户名\AppData\Roaming\io.github.clash-verge-rev.clash-verge-rev\profiles\你的配置文件名称.yaml" 用户名@你的服务器IP:/home/work/.config/mihomo/config.yaml

这里的 scp 是 secure copy,基于 SSH 协议进行远程文件复制,和 ssh 使用同一套账号密码或密钥。

上传完成后,在服务器上检查文件:

Terminal window
ls -lh ~/.config/mihomo/config.yaml
head -n 20 ~/.config/mihomo/config.yaml

如果能看到 proxiesproxy-groupsrules 等字段,说明配置文件可用。

手动启动测试#

先以前台方式启动 Mihomo:

Terminal window
mihomo -d ~/.config/mihomo

启动后,如果看到类似下面的日志,说明本地代理端口已经起来了:

RESTful API listening at: 127.0.0.1:9090
Mixed(http+socks) proxy listening at: [::]:7890

有些节点可能会出现测速失败,例如:

failed to get the second response from http://www.gstatic.com/generate_204

这不一定代表 Mihomo 启动失败。只要 7890 端口已经监听,就可以继续测试代理。

保持当前 SSH 窗口不关闭,另开一个 SSH 窗口执行:

Terminal window
curl -x http://127.0.0.1:7890 https://www.google.com -I -L

如果返回:

HTTP/2 200

说明服务器已经可以通过 Mihomo 访问海外网站。

注册为 systemd 后台服务#

手动启动适合测试,但不能长期使用。测试通过后,可以把 Mihomo 注册成 systemd 服务,让它后台运行并开机自启。

先按 Ctrl + C 停掉前台运行的 Mihomo,然后创建服务文件:

Terminal window
sudo nano /etc/systemd/system/mihomo.service

写入以下内容:

[Unit]
Description=Mihomo Proxy Service
After=network.target
[Service]
Type=simple
User=work
ExecStart=/usr/local/bin/mihomo -d /home/work/.config/mihomo
Restart=on-failure
RestartSec=5
[Install]
WantedBy=multi-user.target

这里要注意两处:

  • User=work 要换成你的服务器用户名。
  • /home/work/.config/mihomo 也要和你的实际用户目录一致。

nano 保存退出方式:

Ctrl + O 保存
Enter 确认文件名
Ctrl + X 退出

然后重新加载 systemd 配置并启动服务:

Terminal window
sudo systemctl daemon-reload
sudo systemctl enable mihomo
sudo systemctl start mihomo
sudo systemctl status mihomo

如果状态里看到:

Active: active (running)

说明 Mihomo 已经作为后台服务运行。

让命令行下载走代理#

Mihomo 启动后,只是本地开了代理端口。要让命令行工具真正使用这个代理,还需要设置环境变量。

当前 SSH 窗口临时生效:

Terminal window
export http_proxy=http://127.0.0.1:7890
export https_proxy=http://127.0.0.1:7890
export all_proxy=socks5://127.0.0.1:7890

设置后,curlwgetgit clone 等命令会优先走代理。此时测试不需要再手动加 -x

Terminal window
curl https://www.google.com -I -L

返回 HTTP/2 200 就说明当前 shell 已经成功走代理。

需要注意:上面的 export 只对当前 SSH 窗口有效。关闭窗口或重新登录后,环境变量会消失,但 Mihomo 后台服务仍然在运行。

也就是说,重新登录后:

Terminal window
curl -x http://127.0.0.1:7890 https://www.google.com -I -L

仍然可以访问,因为手动指定了代理。

但:

Terminal window
curl https://www.google.com -I -L

可能无法访问,因为新 shell 没有设置代理环境变量。

如果希望每次登录后自动生效,需要把环境变量写入 shell 配置文件。

我使用的是 zsh,所以写入 ~/.zshrc

Terminal window
echo 'export http_proxy=http://127.0.0.1:7890' >> ~/.zshrc
echo 'export https_proxy=http://127.0.0.1:7890' >> ~/.zshrc
echo 'export all_proxy=socks5://127.0.0.1:7890' >> ~/.zshrc
source ~/.zshrc

如果你使用的是 Ubuntu 默认 bash,则应该写入 ~/.bashrc

Terminal window
echo 'export http_proxy=http://127.0.0.1:7890' >> ~/.bashrc
echo 'export https_proxy=http://127.0.0.1:7890' >> ~/.bashrc
echo 'export all_proxy=socks5://127.0.0.1:7890' >> ~/.bashrc
source ~/.bashrc

常用工具的单独配置#

通常情况下,只要设置了 http_proxyhttps_proxyall_proxy,大多数命令行工具都会自动使用代理。

但有些工具也可以写入自己的全局配置。这样即使没有设置 shell 环境变量,它们也会走代理。

Git:

Terminal window
git config --global http.proxy http://127.0.0.1:7890
git config --global https.proxy http://127.0.0.1:7890

npm:

Terminal window
npm config set proxy http://127.0.0.1:7890
npm config set https-proxy http://127.0.0.1:7890

pip 单次使用:

Terminal window
pip install 包名 --proxy http://127.0.0.1:7890

这里要区分临时和永久:

export http_proxy=... 临时,除非写入 ~/.zshrc 或 ~/.bashrc
git config --global ... 永久,写入 ~/.gitconfig
npm config set ... 永久,写入 npm 用户配置
pip install --proxy ... 单次临时,只对这一条命令有效

我的建议是:先把环境变量写进 ~/.zshrc~/.bashrc。如果之后发现某个工具不读取环境变量,再给这个工具单独配置代理。

常见问题#

1. 订阅链接在服务器上下载失败#

如果使用:

Terminal window
wget -O ~/.config/mihomo/config.yaml "你的订阅链接"

出现 SSL 连接失败、卡住、无响应等情况,可以优先从 Windows Clash Verge Rev 的配置目录中复制已经生成好的 YAML 文件,再用 scp 上传。

这样可以绕过服务器无法访问订阅站的问题。

2. HTTP/1.1 200 Connection established 是不是成功?#

这表示 curl 已经连上本地代理,并成功建立 HTTPS 隧道。但最好继续观察后续是否有:

HTTP/2 200

或者用:

Terminal window
curl -x http://127.0.0.1:7890 https://api.github.com

如果能返回 GitHub API 的 JSON 内容,就说明代理可用。

3. Mihomo 日志里节点测速失败怎么办?#

单个节点测速失败不一定影响整体使用。可以先测试代理访问是否成功。

如果经常看到关于 http://www.gstatic.com/generate_204 的警告,可以把配置文件里的测速地址从 HTTP 改成 HTTPS:

url: https://www.gstatic.com/generate_204

安全注意事项#

最重要的一点:不要把 7890 端口暴露到公网。

建议保持配置中的:

allow-lan: false

并且不要在阿里云安全组里开放 7890 端口。这个代理只应该给服务器自己使用。

另外,Clash 订阅链接本质上等同于账号凭证。如果不小心把完整订阅链接发到公开场合,建议立刻去服务商后台重置订阅 token。

总结#

远程 Ubuntu 服务器不需要安装 Clash Verge Rev 这样的图形客户端。更适合的做法是:

Windows 本地:Clash Verge Rev 管理订阅和节点
Ubuntu 服务器:Mihomo 作为后台代理内核运行
命令行工具:通过 http_proxy / https_proxy / all_proxy 使用本地 7890 端口

这样配置完成后,服务器上的 curlwgetgit clonenpm install 等命令就可以稳定通过代理访问海外资源。

支持与分享

如果这篇文章对你有帮助,欢迎分享给更多人或赞助支持!

赞助
Ubuntu 服务器部署 Mihomo 代理完整记录
https://hp-patience.github.io/posts/ubuntu-mihomo-proxy/
作者
Celyn
发布于
2026-08-24
许可协议
CC BY-NC-SA 4.0

评论区

Profile Image of the Author
Profile Image of the Author
Celyn
记录 AI、前后端与自动化学习,用费曼学习法把知识讲清楚。
公告
欢迎来到 Celyn 的博客!专注于AI大模型、深度学习与编程技术分享。
音乐
封面

音乐

暂未播放

0:00 0:00
暂无歌词
分类
标签
站点统计
文章
19
分类
12
标签
47
总字数
45,991
运行时长
0
最后活动
0 天前

文章目录