海欧的博客

  • Navidrome
  1. 首页
  2. 服务器
  3. 正文

cloudcone云服务器部署magic

2026年2月7日 58点热度 0人点赞 0条评论

cloudcone云服务器部署magic

1. 前言

如果你每月或每季度或每年还为magic交费用的话,那我劝你把那线省下来去购买配置好一点的云服务器更好。相对于购买magic,购买云服务器简直划算多了,云服务器一般轻轻松松一个月就有4T的流量,办公学习的电脑或手机可以全程开着,一点都不心疼。好现在我们的目标是使用云服务器搭建magic,自己动手丰衣足食。
image-20260206000927766

2. 背景知识

2.1 VLESS与 TCP与WebSocket

VLESS 协议:是轻量、无额外加密、高性能的代理协议,本身不做加密,完全依赖外层 TLS 加密,性能比VMess好,搭配 TLS,否则明文裸奔。

TCP协议 :TCP 是底层原生传输,没有任何多余封装。

WebSocket协议:WebSocket是应用层协议,与HTTP类似,是对TCP的封装。

2.2 VLESS+TCP+TLS 与 VLESS+WebSocket+TLS

VLESS+TCP+TLS :延迟低;TLS 直接 TCP,cloudflare不代理,直连、不中转;不能隐藏源站IP,伪装为普通 TLS,网络行为特征明显。

VLESS+WebSocket+TLS :延迟略高,TLS 到 WebSocket到TCP;伪装成网页 WebSocket,能cloudflare代理,防 DDoS、中转,隐藏源站IP,网络行为像正常web流量;

哪一个好:WebSocket可以伪装网页流量,在严格网络环境下,推荐使用,几乎不会被拦截,但是消耗性能;如果机器性能差推荐直连TCP;

注意事项:cloudflare不能代理TCP,记住哦,只支持 HTTP/HTTPS/WebSocket。VLESS 任何时候都必须开 TLS(传输层安全加密,申请证书),否则完全不安全

VLESS + TCP + TLS(直连型):

应用层     VLESS
───────────────
加密层     TLS
───────────────
传输层     TCP
───────────────
网络层     IP

特点:非 HTTP 行为(不是请求/响应模型)。长时间保持的 TLS 连接,一个IP+固定端口,要专用通道

VLESS + WebSocket + TLS(Web 伪装型):

应用层     VLESS
───────────────
封装层     WebSocket
───────────────
应用层     HTTP/1.1
───────────────
加密层     TLS
───────────────
传输层     TCP
───────────────
网络层     IP

特点:HTTPS行为,长连接 WebSocket,与实时网站完全一致。像网站,能cdn,能域名挡IP。

3. 最后选定的协议

最后选定的协议是VLESS+WebSocket+TLS。本质是用一个“正常 HTTPS 网站”包住 VLESS 流量,进行伪装。

如何做到最安全风险最小:要求无直连代理,无明显代理协议,与真实 HTTPS 行为高度一致,采用标准 HTTPS + WebSocket + TLS,采用行为是正常网站访问的方案,不暴露特殊端口号,只能个人使用不对外提供服务不售卖。

4. 客户端的选择

image-20260207000204915

5. 最后确定的服务框架

后端服务 + 网关的分层

Docker + NPM

协议固定:VLESS + WebSocket + TLS

客户端:客户端的选择 已确定

NPM 是唯一对外暴露的入口

X r a y 永远不直接碰 TLS、不直接暴露公网,交给npm负责

5.1 服务架构图:

graph LR
   A[(VLESS + WS + TLS)] --> B((443 / HTTPS))
   B --> C[NPM(TLS 终止 + WS 转发)]
   C --> D((内网 HTTP / WS))
   D --> E[X r a y(VLESS 入站)]
   E --> F[Internet]

5.2 为什么不使用 x - u i / 3 x - u i 脚本部署UI面板,而选择内核程序

我既然已经使用NPM来做入口的管理(SSL+证书+反代)了,就不使用 x u i 来捣乱目前我配置好的入口配置了。况且我很不喜欢一键脚本部署,快速但过于简单,管理麻烦。

目前我倾向原生态 x r a y +容器化的部署方案。没有面板UI,没有账号管理页面,都必须手写 config.json配置文件,纯粹是一个网络内核程序,下载使用量超多。

镜像选择:
image-20260205211600527

6. 配置部署

6.1 NPM 配置什么

启用443 端口,使能证书(Let’s Encrypt),使能WebSocket Support

配置Path /vless → 转发到容器端口 x r a y :10000

为什么要配置past:避免被误扫描,避免所有请求都进入 x r a y,避免浏览器访问发现行为异常,WebSocket 不是网页访问所以需要固定路径。

6.2 X r a y 配置什么

不使用可多实例化,仅使用多ID配置多用户多入口,放弃多端口多路径的方法

只监听 WebSocket,不监听443,不配置 TLS,不暴露公网端口

编写config.json配置文件

6.3 docker-compose

image-20260207002943297

6.4 配置文件config.json

image-20260207004304393
image-20260207004349245
image-20260207004433955
配置文件config.json:

{
  "log": {
    "loglevel": "warning" //部分开启日志
  },

  "inbounds": [
    {
      "port": 10000,       //端口
      "protocol": "vless", //协议类型:VLESS
      "settings": {
        "clients": [
          {
            "id": "1d683893-916e-424e-8cc7-5d6f4ca2bcxx", //uuidgen命令
            "email": "user-phone"
          },
          {
            "id": "bff1b35c-0326-4244-9619-c44a45fc1fxx", //
            "email": "user-laptop"
          }
        ],
        "decryption": "none" //解密:VLESS 必须为 none
      },
      "streamSettings": {
        "network": "ws",
        "wsSettings": {
          "path": "/vless" //客户端必须完全一致
        }
      }
    }
  ],

  "outbounds": [
    {
      "protocol": "freedom"
    }
  ]
}

6.5 config.json配置讲解

log:不全开

api / stats / policy:不用api

inbounds.settings配置为"decryption": "none",是VLESS 强制

streamSettings字段无tlsSettings字段:TLS 已经被 NPM 解包,X r a y 不监听443,只有接收内网WS的包。

inbounds字段settings字段的fallbacks字段:为空;回落配置字段;fallbacks 只在 X r a y 自己监听 TLS 端口443时才有意义,目前NPM 用 Path 分流,X r a y 只接 /vless流量

streamSettings.security为"none";TLS 已在 NPM完成,X r a y 只接 WS 明文

streamSettings.tlsSettings为空

streamSettings.realitySettings为空

不使用:"transport": null;"observatory": null ;"burstObservatory": null

dns:使用公共dns,不做 fake-ip

routing:为空数组,任何规则

outbounds:freedom:正常出网;blackhole:为将来 routing 预留

不用 alterId

6.6 多用户方案

基础多用户管理:UUID + email;确定选择

多 Path:每个用户一个 Path,NPM 分 Location 不选择

多 inbound(强隔离):port: 10001;port: 10002;可限速、可统计 不选择

7. 开始部署

7.1 运行部署+部署检查

docker-compose up- d:

image-20260205223236764

执行 docker logs x r a y #查看日志:(docker ps):配置文件成功加载:

警告信息:WebSocket 和不带 Flow 的 VLESS 已经开始不推荐使用,建议将来迁移到 VLESS with Flow 和 XHTTP(H2/H3)

image-20260205212637039

docker exec -it x r a y netstat -tulpn #查看tcp/udp监听的端口:

image-20260205212129225

docker exec -it x r a y ps #查看容器进程:

image-20260206000616683

docker exec -it x r a y ping nginx-proxy-manager #查看容器网络连通性:

image-20260206000411895

PS:进入容器执行shell : docker exec -it x r a y bash

在手机连接后,在服务器执行查看日志记录:

image-20260205235108206

PS:显示手机用户已经连接上了

成功现象的日志显示:

我们手机访问谷歌时候,在服务器端查看日志,显示是手机用户user-phone通过443端口访问了google.com

X r a y 接受了一个通过 TCP 协议(WebSocket )的连接,并将该流量转发到目标网站 的 443端口

image-20260206000158754

7.2 NPM 里怎么填

在 Proxy Host / Custom Location:

  • Scheme:http
  • Forward Hostname:x r a y
  • Forward Port:10000
  • WebSocket Support:开启
  • Path: /vless
image-20260205215822922
image-20260205215745098

7.3 客户端里怎么填:

image-20260205214549352
image-20260205214409495

8. 部署成功

8.1 在手机客户端配置后测试IP:

image-20260205215504702

8.2 在电脑客户端配置后测试IP:

image-20260205225318872
image-20260205225515365

9. 更好的伪装

目的:给域名一个假页面一个好的伪装页面,他人访问就会发现,哦,这是个普通 HTTPS 网站,哈哈被骗了

行动:那我们搞一个静态站点

方案选择:nginx:alpine轻量化nginx容器,无数据库,无证书,适合静态页面,可serve html文件

docker-compose:

version: "3.8"
services:
  nginx:
    image: nginx:alpine
    container_name: web_static
    restart: unless-stopped
    volumes:
      - /root/data/docker_data/web_static/html:/usr/share/nginx/html:ro
      - /root/data/docker_data/web_static/conf/nginx.conf:/etc/nginx/nginx.conf:ro
    networks:
      - my_npm_prj_npm_network
    expose:
      - "80" #容器网络的内部端口声明,不同于ports
networks:
  my_npm_prj_npm_network:
    external: true

nginx.conf: 配置conf文件,完成多域名+多path+多html

events {}
http {
    ## vless.eehaiou.com
    server {
        listen 80;
        server_name vless.eehaiou.com;
        root /usr/share/nginx/html/vless;
        index index.html;
        location / {
            try_files $uri $uri/ =404;
        }
    }
    ## blog.eehaiou.com 也给blog挂一个静态页面
    server {
        listen 80;
        server_name blog.eehaiou.com;
        location /love {
            root /usr/share/nginx/html;
            try_files /blog/love.html =404;
        }
        location /mylove {
            root /usr/share/nginx/html;
            try_files /blog/mylove.html =404;
        }
    }
}

index.html静态页面:

<!DOCTYPE html>
<html>
<head>
  <title>Welcome index</title>
</head>
<body>
  <h1>Welcome index page</h1>
  <p>This site is under construction.</p>
</body>
</html>

9.1 增加伪装页(根路径下)

image-20260206202827707
image-20260206202606881

9.2 增加blog挂载静态页面( /love 与 /mylove 路径)

image-20260206202226315
image-20260206203146831

10. 最后

最后我们完成了在服务器部署magic,要正当使用不做有风险的事,自己搭建其实是可以学到整个链路过程,还省下不菲的费用,把钱花在刀刃上。

在现今的网络环境下,想要学习新技术或者体验高质量音视频娱乐,在干净自由的网络环境下,我们可以获得更多的知识与资讯。
image-20260207021337622

标签: magic 云服务器 反代 容器
最后更新:2026年2月7日

haiou

理工男极客工程师

点赞
< 上一篇
下一篇 >

文章评论

razz evil exclaim smile redface biggrin eek confused idea lol mad twisted rolleyes wink cool arrow neutral cry mrgreen drooling persevering
取消回复

归档

  • 2026 年 3 月
  • 2026 年 2 月

分类

  • 嵌入式
  • 服务器

00:00
目录
  • cloudcone云服务器部署magic
    • 1. 前言
    • 2. 背景知识
      • 2.1 VLESS与 TCP与WebSocket
      • 2.2 VLESS+TCP+TLS 与 VLESS+WebSocket+TLS
    • 3. 最后选定的协议
    • 4. 客户端的选择
    • 5. 最后确定的服务框架
      • 5.1 服务架构图:
      • 5.2 为什么不使用 x - u i / 3 x - u i 脚本部署UI面板,而选择内核程序
    • 6. 配置部署
      • 6.1 NPM 配置什么
      • 6.2 X r a y 配置什么
      • 6.3 docker-compose
      • 6.4 配置文件config.json
      • 6.5 config.json配置讲解
      • 6.6 多用户方案
    • 7. 开始部署
      • 7.1 运行部署+部署检查
      • 7.2 NPM 里怎么填
      • 7.3 客户端里怎么填:
    • 8. 部署成功
      • 8.1 在手机客户端配置后测试IP:
      • 8.2 在电脑客户端配置后测试IP:
    • 9. 更好的伪装
      • 9.1 增加伪装页(根路径下)
      • 9.2 增加blog挂载静态页面( /love 与 /mylove 路径)
    • 10. 最后

COPYRIGHT © 2026 海欧的博客. ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang