第一台 VPS 折腾小记
人生的意义在于折腾。
宇宙级安全声明
在使用本项目/教程/脚本之前,请务必仔细阅读以下声明。一旦您开始使用、复制或修改相关内容,即视为您已完全接受并同意本免责声明的所有条款。
- 用途说明
- 本项目涉及的所有脚本、代码、配置文件及教程仅供 资源共享、技术研究和学术交流 使用。
- 本文作者对其中包含的信息的合法性、准确性、完整性和有效性 不作任何保证。用户应根据自身情况自行判断并承担相应风险。
- 免责条款
- 任何用户(包括但不限于个人、组织或自动化程序)间接使用本项目代码(包括但不限于建立 VPS、服务器配置或网络代理服务),或在违反其所在国家/地区法律法规的情况下进行传播和使用,本文作者对于由此引起的任何隐私泄漏、数据丢失、设备损坏或其他任何形式的后果概不负责。
- 作者不对任何脚本在使用过程中可能出现的问题负责,包括但不限于由脚本错误、逻辑漏洞或兼容性问题导致的任何直接或间接损失。
- 禁止行为
- 严禁 将本项目内的任何内容用于 商业用途 或 非法目的。
- 不得利用本项目进行任何形式的网络攻击、非法入侵、绕过监管或其他违反当地法律法规的行为。
- 若用户利用本项目从事任何违法行为,一切法律后果由用户 自行承担,与本文作者无关。
- 知识产权与侵权处理
- 本项目均来自网络收集或个人学习总结。如果任何单位或个人认为该项目的脚本或内容可能涉嫌侵犯其合法权益,请及时通知并提供有效的身份证明、所有权证明及侵权情况说明。
- 作者在收到上述法律文件并核实后,将会在第一时间删除相关内容。
- 条款变更
- 本文作者保留在不预先通知的情况下,随时更改、补充或解释本免责声明的权利。
- 请用户定期查看本声明,以确保了解最新的条款内容。
请谨记:使用技术时请务必遵守您所在国家和地区的法律法规。
0. 参考
1. VPS 选择
这里不做推荐,我用的是 ipv6-only,一年 15 刀乐,折算一下的话一个月 9 块(加上域名也没多贵),在家宽里算很便宜了,而且可以通过 warp 获得 ipv4 地址,所以问题不是很大。这里先贴一张节点质量:

可以看到,非常纯净,一些服务有屏蔽是因为网站不支持纯 v6 访问,问题不大。
2. VPS 搭建
2.1 连接并安装基础工具
ssh user@hostname连接成功后,安装:
sudo apt update && sudo apt-get install -y curl vim ufw安装 Docker:
sudo apt install apt-transport-https ca-certificates curl gnupg lsb-release -y# 创建 keyrings 目录sudo mkdir -p /etc/apt/keyrings# 下载并添加 GPG 密钥curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg# 添加 Docker 仓库echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt updatesudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -y2.2 安全性防护
虽然 vps 厂商本身就提供了一定的安全保障措施,不过防人(爆破)之心的不可无。
2.2.1 创建用户组和用户
将以下命令中的 username 和 passwd 自行替换即可:
getent group 1001 || groupadd -g 1001 vps \ && getent passwd username || useradd -ms /bin/bash -u 1001 -g 1001 -G sudo username \ && echo "username:passwd" | chpasswd创建用户组,创建用户并拉入附加组 sudo,并设置密码。
2.2.2 修改 ssh 端口
sudo nano /etc/ssh/sshd_config找到被注释掉的 Port 22 并修改为:
Port 11451记住这里你修改的端口号,如果你启动了防火墙需要进行对应的放行:
sudo ufw allowssh sudo ufw enablesudo ufw allow 11451请务必在确认端口放行后再重启 ssh 服务:
sudo systemctl restart sshsudo ufw deny 222.2.3 禁用 root 用户远程登录
sudo nano /etc/ssh/sshd_config找到 PermitRootLogin 并修改为 no。
2.2.4 RSA 密钥登录验证
略。
2.2.5 Fail2ban 工具
Fail2ban 工具用于对于密码连续输错三次封 IP:
sudo apt install -y fail2bansudo nano /etc/fail2ban/jail.local输入以下内容:
[DEFAULT]bantime = 1hfindtime = 10mmaxretry = 3
[sshd]enabled = trueport = 11451filter = sshdlogpath = /var/log/auth.logbackend = systemd保存并重启 fail2ban:
sudo systemctl restart fail2bansudo systemctl enable fail2ban2.3 通过 Warp 获取 ipv4 地址
如果你和我一样是 v6-only 的 vps,那么可以通过套一层的 warp 来获得 ipv4 地址,这样后续在使用代理服务时,也能正常访问 github.com 等不支持 v6 的网站(虽然速度比较慢)。
wget -N https://gitlab.com/fscarmen/warp/-/raw/main/menu.sh && bash menu.sh如果分配不到 ipv4 地址,可以修改 DNS 为:
sudo nano /etc/resolv.conf
nameserver 2606:4700:4700::1111nameserver 2001:4860:4860::8888nameserver 2001:4860:4860::8844nameserver 1.1.1.1nameserver 8.8.8.8nameserver 8.8.4.4你可以通过 Cloudflare 的测试端点再次查看给你分配的地址:
curl -4 https://www.cloudflare.com/cdn-cgi/trace3. 域名配置
3.1 域名购买
略。
3.2 域名托管
将域名从你的购买处托管到 Cloudflare,具体步骤略,在 Cloudflare 控制面板添加你的域名时已经提供了相当详细的步骤。
3.3 申请 TLS 证书
这里使用 acme.sh 开源工具,用来自动获取和管理 SSL/TLS 证书,自动续签,非常方便。
3.3.1 创建令牌
该工具使用 Cloudflare DNS 验证的模式申请泛域名证书,因此需要:
- Zone ID
- Account ID
- API Token
前两个分别在“域->Overview”右下角即可找到,令牌进入 API令牌 获取,选择 编辑区域 DNS 模版:

选择对应域名,以及选择自己 VPS 的 IP 地址作为白名单(有 v4 和 v6 的话都写上):

继续,注意保存生成的 Token。
3.3.2 安装脚本
su# 脚本需要的定时服务sudo apt updatesudo apt install -y cronsudo systemctl enable cronsudo systemctl start cronsudo apt install socat -y
# 安装脚本并设置邮箱curl https://get.acme.sh | sh -s email=your@email.com# 将 CA 服务器改成 Let’s Encrypt~/.acme.sh/acme.sh --set-default-ca --server letsencryptsource ~/.bashrc# 开启自动更新acme.sh --upgrade --auto-upgrad其中,email=xxxx 用来设置向证书颁发机构注册时使用的邮箱,请填写为你实际使用的邮箱,用来接受 Let’s Encrypt 的邮件通知。
3.3.3 配置环境变量
vim ~/.bashrc
export CF_Token="<Your API Token>"export CF_Account_ID="<Your Account ID>"export CF_Zone_ID="<Your Zone ID>"
source ~/.bashrc3.3.4 签发证书
acme.sh --issue --dns dns_cf -d yourdomain.com -d *.yourdomain.com-d 之后接上你需要签发的域名。如果成功,会在最后输出证书的位置。具体包括:
yourdomain.com.cer:只有域名的叶子证书。ca.cer:中间证书,用来构建完整的信任链。fullchain.cer:由域名证书与中间证书组合而成的完整证书链文件,配置服务器时常用此文件以确保客户端能正确验证证书链。
通过以下命令,可以验证自动签发是否正确工作:
$ crontab -l2 13 * * * "/root/.acme.sh"/acme.sh --cron --home "/root/.acme.sh" > /dev/null例如,2 13 * * * 表示每天的 13<02>02> 执行一次。或者通过以下命令手动签发:
acme.sh --cron --home /root/.acme.sh3.3.5 使用证书
通常,采用 fullchain.cer 作为网站证书的配置。密钥只有一个,例如 yourdomain.com.key,对应域名证书的私钥,直接输入就行。
如需让 root 外用户能访问证书,还需要:
mkdir -p /home/username/certcp /root/.acme.sh/yourdomain.com_ecc/yourdomain.com.key /home/username/cert/yourdomain.com.keycp /root/.acme.sh/yourdomain.com_ecc/fullchain.cer /home/username/cert/fullchain.cersudo chmod 644 /home/username/cert/yourdomain.com.keysudo chmod 644 /home/username/cert/fullchain.cer注意:如果你在后面搭建节点或其他服务时,采用了 Docker 部署,容器是看不到宿主机的文件系统的,还需要移动到正确的映射路径。
4. 节点搭建
4.1 Hysteria
参考:https://v2.hysteria.network/zh/docs/getting-started/Installation
Hysteria2 基于 UDP,在网络环境较差时表现优异。
4.1.1 安装并运行官方脚本
subash <(curl -fsSL https://get.hy2.sh/)观察到输出 Congratulation! Hysteria 2 has been successfully installed on your server. 则证明安装成功。
如果提示 useradd: command not found,说明环境变量缺失。请先执行 export PATH=$PATH:/usr/sbin 后再次运行安装命令。
4.1.2 创建配置文件
我们需要手动创建配置文件。这里,我已经将证书文件移动到 /home/username/cert/fullchain.cer 和 /home/username/cert/private.key。
vi /etc/hysteria/config.yaml粘贴并修改以下内容:
listen: :8443 # 监听端口,需防火墙放行
# 使用之前申请的 CA 证书tls: cert: /home/username/cert/fullchain.cer key: /home/username/cert/yourdomain.com.key
auth: type: userpass userpass: # 修改这里:自定义用户名和密码 myuser1: password123 myuser2: password456
masquerade: type: proxy proxy: url: https://bing.com # 伪装网址 rewriteHost: true listenHTTP: :80 listenHTTPS: :8443
trafficStats: # 流量统计接口 listen: :22222 secret: trafficStats_passwd
bandwidth: # 修改这里:根据你VPS的实际带宽调整,不要填满,留有余地 up: 100 mbps down: 200 mbps保存并退出,同时在 Cloudflare 控制面板添加对应的 A/AAAA 记录,指向你的服务器 IP,不要开启代理(云朵)。
systemctl enable hysteria-server.service --nowsystemctl status hysteria-server.service启动并验证状态,如果观察到 active (running) 则证明配置并运行成功,否则请自行参照 Hysteria 官网检查。
注意如果有 ufw 还需要放行对应端口:
sudo ufw allow 8443如有问题,可通过以下命令观察调试信息:
# 启动 Hysteria2systemctl start hysteria-server.service# 重启 Hysteria2systemctl restart hysteria-server.service# 查看 Hysteria2状态systemctl status hysteria-server.service# 停止 Hysteria2systemctl stop hysteria-server.service# 设置开机自启systemctl enable hysteria-server.service# 查看日志journalctl -u hysteria-server.service4.1.3 配置端口跳跃
Hysteria 是基于 UDP 的,为了防止运营商针对单一 UDP 端口的阻断,我们需要利用 iptables 做端口转发。这意味着客户端连接 50000-50100 端口时,VPS 会自动转给 8443 处理。
- 确认网卡名称:输入
ip addr查看,通常是eth0,但也可能是ens3等。将下令中的eth0替换为你的真实网卡名。 - 执行转发规则:
# 放行对应端口sudo ufw allow 50220:50959/udpsudo ufw allow 60133:60968/udp
# 允许 UDP 端口段iptables -t nat -A PREROUTING -i eth0 -p udp --dport 50220:50959 -j REDIRECT --to-ports 8443iptables -t nat -A PREROUTING -i eth0 -p udp --dport 60133:60968 -j REDIRECT --to-ports 8443
# 对应的 IPv6 规则 (如果不需要 IPv6 可跳过)ip6tables -t nat -A PREROUTING -i eth0 -p udp --dport 50220:50959 -j REDIRECT --to-ports 84434.1.4 代理软件使用配置
这里以 V2RayN 为例,其他软件类似,只要核心支持 Hysteria2 协议即可。点击”Configuration”->“Add[Hysteria2]“,配置如下,请修改为你自己的实际值:

如果能连通,说明上述配置成功。
4.1.5 配置流量统计服务
这里我偷懒了,建议在配置完 Nginx 之后在进行这一步骤。
安装一些所需依赖:
sudo apt update apt install jq bc -y创建查询脚本:
vim /root/check_traffic.sh写入并修改以下内容,域名和 API 地址也可以根据需要自行修改:
#!/bin/bashgreen='\033[0;32m'cyan='\033[0;36m'NC='\033[0m' # No Color
# 请修改这里:你的域名DOMAIN="sub.yourdomain.com"# 请修改这里:你的 config.yaml 里设置的 secretSECRET="passwd"
# API 地址 (走 HTTPS)TRAFFIC_URL="https://${DOMAIN}/hy-stats/traffic"ONLINE_URL="https://${DOMAIN}/hy-stats/online"AUTH_HEADER="Authorization: ${SECRET}"
# 函数:将字节转换为可读格式bytes_to_readable() { local bytes=$1 if (( bytes < 1024 )); then printf "%d B" "$bytes" elif (( bytes < 1024**2 )); then printf "%.2f KB" "$(echo "scale=2; $bytes / 1024" | bc)" elif (( bytes < 1024**3 )); then printf "%.2f MB" "$(echo "scale=2; $bytes / (1024^2)" | bc)" else printf "%.2f GB" "$(echo "scale=2; $bytes / (1024^3)" | bc)" fi}
echo -e "${green}=== Hysteria2 流量与在线用户统计 ===${NC}"echo
# 1. 获取在线用户数echo -n "正在获取在线用户..."online_resp=$(curl -s -H "$AUTH_HEADER" "$ONLINE_URL")# 简单的整数判断,如果返回不是数字可能是认证失败if [[ "$online_resp" =~ ^[0-9]+$ ]]; then echo -e "\r当前在线用户数: ${cyan}${online_resp}${NC}"else echo -e "\r${cyan}获取在线用户失败 (可能是密钥错误或 Nginx 配置问题)${NC}" # echo "Debug: $online_resp" # 调试用fi
echo "-----------------------------------"
# 2. 获取流量统计response=$(curl -s -w "HTTPSTATUS:%{http_code}" -H "$AUTH_HEADER" "$TRAFFIC_URL")body=$(echo "$response" | sed -e 's/HTTPSTATUS\:.*//g')status_code=$(echo "$response" | tr -d '\n' | sed -e 's/.*HTTPSTATUS://')
if [ "$status_code" -eq 200 ]; then # 使用 jq 解析 JSON # 格式: 用户名 上传 下载 echo "$body" | jq -r 'to_entries[] | "\(.key) \(.value.tx) \(.value.rx)"' | while read -r key tx rx; do readable_tx=$(bytes_to_readable "$tx") readable_rx=$(bytes_to_readable "$rx") echo -e "用户 ${green}$key${NC}: 上传 ${cyan}${readable_tx}${NC} | 下载 ${cyan}${readable_rx}${NC}" doneelse echo "流量请求失败,状态码:$status_code" echo "请检查密钥或 HTTPS 连接。"fiecho4.2 Xray
4.2.1 安装面板
可以选择 x-ui 或者一个大佬魔改的 x-panel,没区别,x-panel 加了一些付费的一键配置等功能,对新手可能更友好吧。
如果安装 x-panel:
vim docker-compose.yml将以下内容添加进去:
services: x-panel: image: xeefei/x-panel:latest container_name: x-panel restart: unless-stopped network_mode: host volumes: - ./db/:/etc/x-ui/ - ./cert:/root/cert/ environment: XRAY_VMESS_AEAD_FORCED: "false" XUI_ENABLE_FAIL2BAN: "true"启动容器:
sudo docker compose up -d本地建立连接:
ssh -L 13688:127.0.0.1:13688 user@host然后在本机访问 127.0.0.1<13688>13688> 进行配置即可,默认用户名和密码均为 admin,登录后记得修改并重启面板。
如果你不想用 x-panel 或者不想用 docker 部署,可以参考大佬的这篇文章中的步骤 年轻人的第一台 VPS 代理服务器,思路都是大差不差的。
4.2.2 面板设置
点击面板设置中,找到 面板证书公钥文件路径 和 面板证书密钥文件路径,分别填入 /root/cert/fullchain.cer 和 /root/cert/yourdomain.com.key,注意这里跟前面的容器设置有关,如果按照我的设置,宿主机目录 ./cert,即 home/username/cert 被映射到容器目录 root/cert,可通过以下命令验证:
sudo docker exec -it x-panel ls /root/cert
设置完成后,你就可以通过 ip:port (如果是 ipv6 地址请用 [] 括起来)的方式访问面板了,不过浏览器会提示不安全,如下图:

这是因为证书中认证的域名并不符合 ip,请在 Cloudflare 控制面板再次添加对应的 A/AAAA 记录,指向你的服务器 IP,不要开启代理(云朵),若名为 xui,则在之后 Nginx 也配置完成后,你可以通过 xui.yourdomain.com 访问面板。
4.2.3 搭建节点
这里提供目前 Xray-core 中比较顶尖和主流的抗干扰配置,VLESS + Vision + TLS 和 VLESS + Reality + xhttp,简单来说:
对于前者,Vision 专门用于解决“TLS in TLS”特征和流量指纹问题。它能极其逼真地模拟正常的 HTTPS 网页浏览流量,让防火墙认为你正在访问一个正常的加密网站,不过由于基于 TLS,因此必须拥有一个真实的域名和 SSL 证书。
对于后者,Reality 协议会通过中间人攻击的方式,偷取别的网站(如 Apple, Microsoft, Amazon 等)的 TLS 握手特征。因此不需要域名和证书。同时,xhttp 在 packet 层面做了更精细的 Padding 和头部处理,使得流量特征更像现代浏览器访问网站的行为,配合 Reality 使用效果极佳。
这里给出 Gemini 总结的两者的区别(我也不是特别懂):
| 特性 | VLESS + Vision + TLS | VLESS + Reality + xhttp |
|---|---|---|
| 域名 (Domain) | 必须拥有 (每年需付费或申请免费) | 不需要 (直接使用 IP) |
| 证书 (Cert) | 需要管理 (需申请并续期,如 acme.sh) | 不需要 (模拟目标网站 SNI) |
| CDN 支持 | 支持 (但在 Vision 下不建议开启 CDN) | 不支持 (绝对无法套 CDN) |
| 抗封锁能力 | 极高 (只要域名干净,IP 正常) | 极高 (专门针对主动探测优化) |
| 配置难度 | 中等 (需解析域名、配置 Nginx/回落) | 简单 (填入 IP 和目标 SNI 即可) |
| 端口要求 | 通常占用 443 端口 | 任意端口 (但推荐 443 以模拟真实) |
| 适用场景 | 长期稳定使用,不怕麻烦,有建站需求 | 快速部署,不想买域名,IP 经常变动 |
这里因为我有域名,所以选择更稳定的“VLESS + Vision + TLS”,入站规则的创建我就省略了,基本都按照默认,记得在 SNI (域名) 处填写你的自己的三级域名,同时在证书设置部分填写之前准备好的证书路径,flow 记得选择 xtls-rprx-vision。
然后放行对应的端口。同理,在 Cloudflare 控制面板添加对应的 A/AAAA 记录,指向你的服务器 IP,不要开启代理(云朵),名字和你入站规则中的域名一致。
搞完之后可以在 V2rayN 中先测一下,没问题的话再继续。
5. 订阅服务搭建
这里暂时先不折腾了。
由于 VPS 大部分是小内存机器(例如 512MB 或 1GB),且此时已经运行了 Hysteria、Nginx 等服务,在进行 Sub-Store 的安装和配置时极有可能导致内存溢出,进程被强行杀死,如果遇到这种情况,可以尝试从硬盘上划分一部分空间当作“虚拟内存”来使用,防止内存不足导致程序崩溃:
# 创建一个 1GB 的文件用于 swapdd if=/dev/zero of=/swapfile bs=1M count=1024# 设置权限,确保安全chmod 600 /swapfile# 将其标记为 swap 空间mkswap /swapfile# 启用 swapswapon /swapfile# (可选) 写入系统配置,确保重启后依然有效echo '/swapfile none swap sw 0 0' | tee -a /etc/fstab# 查看是否生效free -h如果配置正确,应该能看到 Swap: 这一行有了 1.0Gi 左右的空间。
5.1 安装基础组件与 FNM
# 更新并安装 unzip 等工具sudo apt update -y && sudo apt install unzip curl wget git -y
# 安装 FNMcurl -fsSL https://fnm.vercel.app/install | bash
# 让 FNM 生效source /root/.bashrc5.2 安装 Node.js v20.18.0
fnm install v20.18.05.3 安装 PNPM
curl -fsSL https://get.pnpm.io/install.sh | sh -# 同样让它生效source /root/.bashrc5.4 安装 Sub-Store
mkdir -p /root/sub-storecd /root/sub-store
# 下载后端curl -fsSL https://github.com/sub-store-org/Sub-Store/releases/latest/download/sub-store.bundle.js -o sub-store.bundle.js
# 下载前端并解压curl -fsSL https://github.com/sub-store-org/Sub-Store-Front-End/releases/latest/download/dist.zip -o dist.zipunzip dist.zip && mv dist frontend && rm dist.zip5.5 配置 Sub-Store 系统服务
5.5.1 配置密钥
随便生成一个密钥并记下:
openssl rand -hex 165.5.2 创建服务文件
vim /etc/systemd/system/sub-store.service写入并修改以下内容:
[Unit]Description=Sub-StoreAfter=network-online.targetWants=network-online.target systemd-networkd-wait-online.service
[Service]LimitNOFILE=32767Type=simple
# 修改这里:这一串随机字符就是你以后访问 Sub-Store 的路径Environment="SUB_STORE_FRONTEND_BACKEND_PATH=/你的随机密钥"
Environment="SUB_STORE_BACKEND_SYNC_CRON=0 0 * * *"Environment="SUB_STORE_FRONTEND_PATH=/root/sub-store/frontend"Environment="SUB_STORE_FRONTEND_HOST=0.0.0.0"# 前端运行在 3001 端口Environment="SUB_STORE_FRONTEND_PORT=3001"Environment="SUB_STORE_DATA_BASE_PATH=/root/sub-store"Environment="SUB_STORE_BACKEND_API_HOST=127.0.0.1"Environment="SUB_STORE_BACKEND_API_PORT=3000"
# 启动命令 (确保路径正确)ExecStart=/root/.local/share/fnm/fnm exec --using v20.18.0 node /root/sub-store/sub-store.bundle.js
User=rootGroup=rootRestart=on-failureRestartSec=5sExecStartPre=/bin/sh -c ulimit -n 51200StandardOutput=journalStandardError=journal
[Install]WantedBy=multi-user.target5.5.3 启动服务
systemctl daemon-reloadsystemctl enable sub-store.service --now如出现错误请使用以下命令打印调试信息自行调试:
systemctl start sub-store.service # 启动服务systemctl enable sub-store.service # 设置为开机自启systemctl status sub-store.service # 查看服务状态systemctl stop sub-store.service # 停止服务systemctl restart sub-store.service # 重启服务6. Nginx 配置
由于上述服务暴露在公网,因此暴露端口有一定的安全隐患,采用 Nginx 进行反代,将 443 加密流量在 Nginx 内部分流到不同的本地端口,本地端口不需要暴露。
6.1 安装
sudo apt updatesudo apt install nginx libnginx-mod-stream -y6.2 配置 Stream 分流
vim /etc/nginx/nginx.conf在 http 块外部添加我们即将要引入的分流规则:
include /etc/nginx/vps.conf;配置 Stream 分流 (vps.conf):
vim /etc/nginx/vps.conf填入以下内容(注意修改域名和端口为你实际需要使用的):
stream { # 1. 域名识别区 (SNI Map) map $ssl_preread_server_name $backend { hostnames; # 修改这里:你的 Sub-Store 域名 -> 转发给 sub 后端 sub.yourdomain.com sub; # 修改这里:你的 X-UI 面板域名 -> 转发给 xui 后端 xui.yourdomain.com xui; # 默认情况(比如直接访问 IP 或 hy2 域名) -> 转发给 hysteria default hysteria; }
# 2. 后端定义区 (Upstreams)
# Sub-Store 后端:转发给 Nginx 自己的 8444 端口 (处理 SSL 后再给 Sub-Store) upstream sub { server 127.0.0.1:8444; }
# X-UI 面板后端:直接转发给 X-UI 面板端口 upstream xui { server 127.0.0.1:13688; }
# Hysteria 后端:转发给 Hysteria 的 HTTP 伪装端口 upstream hysteria { server 127.0.0.1:8443; }
# 3. 监听服务区 server { listen 443 reuseport; listen [::]:443 reuseport; proxy_pass $backend; ssl_preread on; # 开启 SNI 预读,否则无法识别域名 }}6.3 配置 Sub-Store 反代
Stream 模块只是把流量扔过来了,对于 Sub-Store,我们还需要 Nginx 帮忙处理 HTTPS 加密(卸载证书),然后以 HTTP 协议传给 Sub-Store 程序(默认运行在 3001 端口)。
vim /etc/nginx/sites-enabled/vps.conf写入并修改以下内容:
server { # 监听 8444,接收来自 Stream 模块分流过来的 sub 流量 listen 8444 ssl http2; listen [::]:8444 ssl http2;
# 修改这里:你的 Sub-Store 域名 server_name sub.yourdomain.com;
# 修改这里:你的证书绝对路径 ssl_certificate /home/username/fullchain.cer; ssl_certificate_key /home/username/private.key;
location / { # 转发给 Sub-Store 默认端口 3001 proxy_pass http://127.0.0.1:3001; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; }
# Hysteria 流量统计反代,访问 https://sub.yokumi.cn/hy-stats/traffic 就会被转到 http://127.0.0.1:22222/traffic location /hy-stats/ { proxy_pass http://127.0.0.1:22222/; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; }}6.4 启动服务
先删除默认配置(防止占用端口或冲突):
rm /etc/nginx/sites-enabled/default在启动前测试一下配置是否有误:
$ nginx -tnginx: the configuration file /etc/nginx/nginx.conf syntax is oknginx: configuration file /etc/nginx/nginx.conf test is successful启动服务:
sudo systemctl restart nginxsudo nginx -s reloadsudo systemctl status nginxTODO
目前的所有配置之后基本已经能正常使用了,至于问题等后续慢慢发现吧,前前后后加起来花了差不多一天,还是比较折腾的。
- PT/BT 配置;
- 整台🇭🇰双栈中转机搞链式代理(等有米了);
- 后续迁移考虑整成一键脚本;
文章分享
如果这篇文章对你有帮助,欢迎分享给更多人!



