惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

B
Blog RSS Feed
J
Java Code Geeks
H
Help Net Security
Google DeepMind News
Google DeepMind News
博客园 - 司徒正美
Microsoft Security Blog
Microsoft Security Blog
宝玉的分享
宝玉的分享
Stack Overflow Blog
Stack Overflow Blog
D
DataBreaches.Net
The GitHub Blog
The GitHub Blog
S
SegmentFault 最新的问题
U
Unit 42
博客园 - 三生石上(FineUI控件)
Last Week in AI
Last Week in AI
M
MIT News - Artificial intelligence
WordPress大学
WordPress大学
小众软件
小众软件
博客园 - 叶小钗
D
Docker
量子位
P
Proofpoint News Feed
博客园_首页
T
Tailwind CSS Blog
F
Fortinet All Blogs

竹林里有冰的博客

Nuxt SSG 博客的尾斜杠到底怎么加? | 竹林里有冰的博客 小米 Xiaomi Book Pro 14 (Ultra X7) Linux 兼容性实测 | 竹林里有冰的博客 国内(大陆)版小米 FCM 熄屏断连:Rootless 环境下的尝试与可能的解决方案 | 竹林里有冰的博客 我没法访问 dl.google.com —— 记一次 TUN 下的网络 debug | 竹林里有冰的博客 Vercel 的缓存控制,你注意过吗? | 竹林里有冰的博客 小记 —— Caddy 在 Layer 4 上的流量代理实践 | 竹林里有冰的博客 你的域名后缀拖慢你的网站速度了嘛?——再谈 DNS 冷启动 | 竹林里有冰的博客 DNS 冷启动:小型站点的“西西弗斯之石” | 竹林里有冰的博客 HTTP/2 Server Push 已事实性“死亡”,我很怀念它 | 竹林里有冰的博客 Nuxt Content v3 中数组字段的筛选困境与性能优化 | 竹林里有冰的博客 后 OCSP 时代,浏览器如何应对证书吊销新挑战 | 竹林里有冰的博客 初试 Github Action Self-hosted Runner,想说爱你不容易 | 竹林里有冰的博客 DNS 解析延迟毁了我的图床优化 | 竹林里有冰的博客 Vue Markdown 渲染优化实战(下):告别 DOM 操作,拥抱 AST 与函数式渲染 | 竹林里有冰的博客 Vue Markdown 渲染优化实战(上):从暴力刷新、分块更新到 Morphdom 的华丽变身 | 竹林里有冰的博客 node-sass 迁移至 dart-sass 踩坑实录 | 竹林里有冰的博客 前端中的量子力学——一打开 F12 就消失的 Bug | 竹林里有冰的博客 2025 年,如何为 web 页面上展示的视频选择合适的压缩算法? | 竹林里有冰的博客 el-image 和 el-table 怎么就打架了?Stacking Context 是什么? | 竹林里有冰的博客 2025年,前端如何使用 JS 将文本复制到剪切板? | 竹林里有冰的博客 ssh 拯救世界——通过 ssh 隧道在内网服务器执行 APT 更新 | 竹林里有冰的博客 Cudy TR3000 吃鹅(daed)记 | 竹林里有冰的博客 使用 Cloudflare Workers 监控 Fedora Copr 构建状态 | 竹林里有冰的博客 基于 Cloudflare Workers 实现的在线服务状态检测告警系统 | 竹林里有冰的博客 构建部署在 Cloudflare Workers 上的 TG Bot | 竹林里有冰的博客 2024年,Firefox 是唯一还在坚持执行在线的 SSL 证书吊销状态检查的主流浏览器 | 竹林里有冰的博客 小爱课程表适配不完全指北——以 ZJUT 本科正方教务系统为例 | 竹林里有冰的博客 将博客从 waline v2 更新到 waline v3 | 竹林里有冰的博客 给家里云装上 Fedora 41 KDE 后,我是如何配置的 | 竹林里有冰的博客 为 Hexo 添加 follow 认证 | 竹林里有冰的博客
在 vps 上配合 caddy 部署 siteproxy | 竹林里有冰的博客
竹林里有冰 · 2023-02-01 · via 竹林里有冰的博客

之前趁着春节活动的时候在某 vps 服务商买了 1 年的 vps,线路不算太好,但勉强够用,于是打算在上面部署一些反代程序。在群友的推荐下,发现了这款名为 siteproxy 的开源项目。

siteproxy 相较于我在 r.zhullyb.top 部署的那个反代,其特点是可以运行在 vps 上,且将会替换被反代页面上的所有 url,因此遇到使用相对路径的网页也可以从容应对。

在项目的 README 中介绍了一种部署方案,但我仍有以下几点不太满意

  • README 中的方案仅支持 nginx 部署,但我希望使用 caddy
  • README 中的方案使用 npm 安装了 forever 来达到保活的目的,甚至为此安装了 nvm,但我一不希望使用 npm 在系统上安装软件、二不希望安装 nvm 与 forever
  • 原项目把根目录页做成了一个导航,指向了一些比较敏感的站点,而我希望换掉这个网页。

因此这篇博客也就应运而生。

反代 8011 端口#

根据项目 README 的描述,我们应当使用 nginx 去反代 127.0.0.1:8011 端口,但我是 caddy 用户,此前也有过使用 caddy 反代的经验,所以很容易写出一段使得程序可以正确运行的 Caddyfile

example.com {
        reverse_proxy   127.0.0.1:8011 {
                header_up Host {upstream_hostport}
                header_up X-Real-IP {http.request.remote.host}
                header_up X-Forwarded-For {http.request.remote.host}
                header_up X-Forwarded-Port {http.request.port}
                header_up X-Forwarded-Proto {http.request.scheme}
                header_up Accept-Encoding identity
        }
}

example.com 的 A 记录解析到 vps 主机的 ip,并使用 systemctl 重新启动 caddy,这一步就算完成了。

安装 nodejs#

我在 vps 上安装的发行版是 Archlinux,所以直接 pacman -S nodejs 安装完就是了,别的发行版应该也可以直接调用系统默认的包管理器安装 node 或者 nodejs 完成这一步。

下载程序#

首先,我们需要一个地方来存放我们下载的程序,我使用的是 /opt 路径。

我们可以直接根据 README 所说的,直接 clone 整个项目,但我本人并不想这么做,项目里似乎有太多对于 vps 用户没有用的东西了。此外,整个项目首页我也不想要,首页的导航指向了一些比较敏感的网站,而我的反代就想安安心心的一个人用。

综合以上需求,我所需要的文件一共就五个:

├── config.js
├── index.js
├── logger.js
├── package.json
└── Proxy.js
mkdir -p /opt/siteproxy
cd /opt/siteproxy
wget https://raw.githubusercontent.com/netptop/siteproxy/master/{config.js,index.js,logger.js,package.json,Proxy.js}

然后补上一个 index.html

我这边选择直接使用 JavaScript 将对于 / 的访问直接重定向到我的博客。

<html><head><meta http-equiv="refresh" content="0; url=https://zhul.in/" /></head><body>Redirect to <a href="">https://zhul.in/</a></body></html>

安装依赖#

/opt/siteproxy 目录下执行

npm install

npm 将会根据 package.json 的内容自动安装所需的依赖。

修改配置文件#

$EDITOR /opt/siteproxy/config.js

按照 README 所说,修改 serverName 字段

需要修改的 serverName 字段需要修改的 serverName 字段

设置开机自启动#

这里我选择使用 systemd 帮助我实现 siteproxy 程序的开机自启动,service 文件是我直接根据 frp 程序提供的 service 改的。

cat /usr/lib/systemd/system/siteproxy.service 
-----
[Unit]
Description=SiteProxy
After=network-online.target
Wants=network-online.target

[Service]
Type=simple
User=nobody
Restart=on-failure
RestartSec=5s
Environment="NODE_PATH=/opt/siteproxy/"
ExecStart=node --tls-min-v1.0 /opt/siteproxy/index.js 

[Install]
WantedBy=multi-user.target

随后使用 systemctl enable siteproxy --now 启动即可访问。

为反代站点添加访问密码(可选)#

参考我的另一篇博客

使用防火墙程序禁止 8011 的公网访问(可选)#