mihomo + metacubexd + docker compose + nginx 反代教程 #638
Replies: 20 comments 26 replies
# version: '3'
services:
clash: # Clash 内核
container_name: clash-meta
image: metacubex/mihomo:v1.18.4 # 最新版用 metacubex/mihomo:Alpha
restart: always
pid: host
ipc: host
network_mode: host
cap_add:
- ALL
security_opt:
- apparmor=unconfined
volumes:
- ~/clash_meta/clash:/root/.config/mihomo
- /dev/net/tun:/dev/net/tun
# 共享host的时间环境
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro
metacubexd: # Clash WebUI
container_name: metacubexd
image: ghcr.io/metacubex/metacubexd
restart: always
network_mode: bridge
ports:
- '127.0.0.1:28002:80'
volumes:
- ~/clash_meta/caddy:/config/caddy
# 共享host的时间环境
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro |
mixed-port: 7890
allow-lan: true
external-controller: 127.0.0.1:28001
secret: 8a09518e-5d92-4a7e-b811-9dfd3b611842
mode: rule
proxies:
- name: "本地xray"
type: socks5
server: 127.0.0.1
port: 1080
udp: true
# - name: "本地singbox"
# type: socks5
# server: 127.0.0.1
# port: 8848
# udp: true
proxy-groups:
- name: "我的跳板"
type: select
proxies:
- "本地xray"
# - "本地singbox"
- name: "第三方跳板1"
type: select
use:
- "第三方订阅(名字要和 proxy-providers 里的一样)"
- name: "第三方跳板2"
type: url-test # 根据 HTTP 测速延迟自动选择
use:
- "第三方订阅2"
# URL 延迟检测 通用配置
my-url-test: &my-url-test
# 延迟检测 URL
health-check:
enable: true
url: https://cp.cloudflare.com
# 节点连通性检测时间,单位为秒
interval: 300
# 节点超时延迟,单位为毫秒
timeout: 1000
# 节点自动切换差值,单位为毫秒
tolerance: 100
proxy-providers:
"第三方订阅(名字要和 proxy-providers 里的一样)":
type: http
url: "https://你的第三方订阅URL,一般情况长这样,但不一定是这个样子/subscribe?token=2426efe5aaaaa492aaa458aaa4afa83d"
path: /root/.config/mihomo/di3fang.yaml
# 自动更新订阅时间,单位为秒
interval: 3600 # 一小时
# URL 延迟检测逻辑
<<: *my-url-test
"第三方订阅2":
type: http
url: "https://你的第三方订阅URL,一般情况长这样,但不一定是这个样子/subscribe?token=2426efe5acbda492aaa458aaa4afa83d"
path: /root/.config/mihomo/di3fang22222222222222222222222222222.yaml
# 自动更新订阅时间,单位为秒
interval: 3600 # 一小时
# URL 延迟检测逻辑
<<: *my-url-test
dns:
enable: true
ipv6: true
nameserver:
- https://[2606:4700:4700::1111]/dns-query
- 223.5.5.5
fake-ip-filter:
- +.stun.*.*
- +.stun.*.*.*
- +.stun.*.*.*.*
- +.stun.*.*.*.*.*
- "*.n.n.srv.nintendo.net"
- +.stun.playstation.net
- xbox.*.*.microsoft.com
- "*.*.xboxlive.com"
- "*.msftncsi.com"
- "*.msftconnecttest.com"
- WORKGROUP
rules:
#- PROCESS-PATH,/usr/bin/xray,DIRECT
- PROCESS-NAME,ddns-go,DIRECT
- PROCESS-NAME,xray,DIRECT
- PROCESS-NAME,qbittorrent-nox,DIRECT
- MATCH,我的跳板
tun:
enable: false
stack: system
auto-route: true
auto-detect-interface: true
更多配置细节,请查阅官方文档 教程作者我是参考自这个大佬的 配置 才弄懂的 |
|
nginx 反代
# clash meta WEBUI metacubexd
server {
listen 0.0.0.0:2082;
listen [::]:2082;
client_max_body_size 32m;
location /assets/ {
access_log /opt/wwwlogs/clash_webui_access.log main;
error_log /opt/wwwlogs/clash_webui_error.log;
include snippets/my_default_http1p1_proxy_setting.conf;
proxy_pass http://127.0.0.1:28002;
}
location ~* ^/.*\.(js|css|htm|html|bmp|png|jpg|jpeg|svg|ico|webmanifest)$ {
access_log /opt/wwwlogs/clash_webui_access.log main;
error_log /opt/wwwlogs/clash_webui_error.log;
include snippets/my_default_http1p1_proxy_setting.conf;
proxy_pass http://127.0.0.1:28002;
}
location / { # clash meta API
if ($request_uri = "/") {
return 301 ./index.html;
}
access_log /opt/wwwlogs/clash_api_access.log main;
error_log /opt/wwwlogs/clash_api_error.log;
include snippets/my_default_http1p1_proxy_setting.conf;
proxy_pass http://127.0.0.1:28001;
}
}
include snippets/my_proxy_headers.conf;
proxy_http_version 1.1;
proxy_read_timeout 360s;
set $diy_connection_upgrade "upgrade";
if ( $http_upgrade = '' ) {
# set $diy_connection_upgrade "keep-alive";
# set $diy_connection_upgrade "close";
set $diy_connection_upgrade $connection;
}
proxy_set_header Connection $diy_connection_upgrade;
proxy_set_header Upgrade $http_upgrade;
# proxy_set_header Host $proxy_host;
proxy_set_header Host $http_host;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Host $http_host;
# proxy_set_header X-Forwarded-Port $remote_port;
proxy_set_header X-Forwarded-Port $server_port;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Protocol $scheme;
proxy_set_header X-Scheme $scheme;
proxy_set_header X-Nginx-Proxy true; |
|
假设DDNS域名是 example.com 这个密钥记得自己改!!!用 UUID 生成器随便生成一个!!! 为安全考虑,建议给 Nginx 装上 SSL证书。 Enjoy yourself! :) |
|
您好!请问 mihomo + metacubexd docker 部署之后,如何使用呢?我在文件服务器上部署了 docker,希望在局域网服务器上通过下面命令使用 请问这个要怎么实现呢? |
|
|
补充一下,用这个老哥的config.yaml配置文件 https://gist.github.com/liuran001/5ca84f7def53c70b554d3f765ff86a33 |
|
mark |
|
我都启动完了,但一直认证失败是咋回事? |
|
UI和内核怎么不整合在一起 |
|
按照你们的配置,我只能打开国内网站,国外网站一个打不开!知道什么情况不? |
|
其实用docker部署ShellCrash就行了,ShellCrash貌似可以用mihomo内核,多内核可选 |
|
失踪人口诈尸复活来更新了。关于第三方订阅的写法已 更新 一开始没有写订阅的写法是因为教程作者我主要利用 clash 的 TUN 能力,流量跑本地的 xray 的 socks5 然后再翻到我自建的小鸡。 |
|
问一下,我现在是nas上部署,我希望的是meta内核部署再bridge网桥,然后nas上的其他docker服务通过端口再走局域网代理。但是我给meta加了bridge,现在的情况是前端页面metacubexd 也打不开。。。 |
|
docker 我是这样写的 因为是bridge部署,所以也不知道要不要映射tun,然后config我是用电脑端的clash里面的config复制了一份过去。 |
|
我尝试访问3300这个metacubexd 的80端口,但是也打不开前端。日记也没提示错误。。。 |
|
@wintsa123 |
|
请问,配置nginx用来做啥,反代mihomo的http代理端口吗? 效果就是: |
|
我使用了 nginx-proxy-manager 配合 楼主的 github 的教程 和 AI 的辅助,成功搞定了 https域名反代 和 添加后端的问题。 让 AI 写了个 文档。其中比较重要的是 同源 跨域 这两个安全概念。在 文档中的 涉及知识点详解 (通俗解读版) 有解释 Case Study: Clash WebUI 反向代理配置排错之旅1. 案例背景、问题与最终解决方案1.1 背景用户希望通过一个安全的
目标是将 UI 和内核的 API 通过同一个域名访问,以获得最佳的兼容性和安全性。 1.2 问题描述 (The "Failed to fetch" Saga)最初,用户尝试通过域名访问 UI,但在 UI 页面中设置后端的 IP 地址 ( 在排错过程中,我们经历了几个阶段:
1.3 最终解决方案我们采纳了社区验证过的分离代理方案,其核心思想是:让浏览器始终与同一个安全源 (
这个方案完美地解决了浏览器的安全限制,实现了最终的成功连接。 2. 涉及知识点详解 (通俗解读版)2.1 为什么不能在 HTTPS 页面直接请求 HTTP 的 IP 地址?这个问题的核心是两个浏览器安全策略:混合内容 (Mixed Content) 和 同源策略 (Same-Origin Policy)。 混合内容 (Mixed Content)
同源策略 (Same-Origin Policy) 与跨域 (Cross-Origin)
2.2 为什么可以跨域加载图片和脚本?这是一个很棒的观察点,也是理解同源策略的关键。同源策略主要限制的是“读取”操作,而不是“嵌入”操作。
2.3 Nginx 反向代理如何解决这一切?我们的 Nginx 配置就像一个值得信赖的“门卫”,它站在
通过这种方式,Nginx 完美地充当了中间人,既满足了浏览器的安全要求,又实现了后端服务的灵活部署。 3. 手把手操作教程 (脱敏版)3.1 Clash
|
在极空间使用如上compose构建了两个容器,在metacubexd容器的后台使用“wget -qO- --header="Authorization: Bearer haha123" http://192.168.1.72:10112/”返回“{"hello":"mihomo"}”,但metacubexd的网页登陆页,后端地址填“http://192.168.1.72:10112/”,密钥填“haha123",然后点添加,显示**”无法连接后端,请检查地址是否正确以及后端是否正在运行。”**这是不是跨域问题? |

Uh oh!
There was an error while loading. Please reload this page.
先吐槽一番信息的闭塞与混乱。
一开始找 clash内核 的代替品,找到 "clash meta"/"singbox" 这两个内核。
clash meta 不知道为什么改名成了 mihomo (避嫌?),我很长一段时间不知道它们竟然是同一个东西!
(就像 USB 3.0 一改 3.1 再改 3.2 造成信息极度混乱的感觉……)
然后找容器化部署方案。mihomo 没有把 docker 部署方案写到 readme 里,网上也找不到教程。
却十分万幸地在这个仓库找到了镜像tag以及 docker compose 的写法。
碎碎念废话结束,开始正篇!All reactions