目录

返回首页

macOS 本地反向代理持久化教程

引言

如果你希望跳过繁琐的手动配置,可以先下载一键配置工具直接完成部署。下文仍会介绍其背后的实现原理和手动配置方法。

Steamcommunity302 是一款非常优秀的本地反代工具,其核心反向代理能力正是基于 Caddy 实现的。不过这款工具基于 AvaloniaUI 开发,本身会产生一定的内存开销;在 macOS 平台上使用时,不仅每次都需要通过 run.command 脚本手动启动,所有核心配置也必须打开 GUI 界面才能操作。对于仅需稳定运行反代服务的场景来说,整套流程显得冗余笨重。此外它无法正常配置开机自启,每次启动还需要输入密码,日常使用颇为不便。既然工具的反代核心就是 Caddy,我们完全可以绕开图形界面,直接将 Caddy 配置为系统服务实现开机自启。基于这个思路,便诞生了这篇教程。

准备工具

操作步骤

提示:本教程中测试用户名为 sylker,实际操作时请根据具体情况修改。

在羽翼城大佬的个人博客下载 Steamcommunity302 Mac – Apple Silicon (详见准备工具),下载后执行 ./run.command 启动程序

01

根据终端的提示进行简单操作后便可看到弹出的 GUI 界面,在该界面中勾选自己需要的代理服务并点击启动服务按钮

02

需要注意的是,在默认配置下,关闭 Steamcommunity302 后 hosts 文件会被它自动还原,因此需要在运行时手动备份一份,待关闭后再将备份文件复制回去。参考命令如下(路径可根据实际情况调整):

运行 Steamcommunity302 时,本地备份 hosts 文件

sudo cp /etc/hosts /Applications/Caddy/hosts

关闭 Steamcommunity302 后,永久保存 hosts 文件

sudo cp /Applications/Caddy/hosts /etc/hosts

在终端执行 cat /etc/hosts 以确认是否成功获取最新 hosts 信息。

接下来复制 Steamcommunity302 的核心文件,执行以下命令:sudo cp -r '/var/root/Library/Application Support/com.Dogfight360.SteamCommunity302/' '/Applications/Caddy/'

复制完成后可以看到核心文件已就位

03

批量修正所复制文件的权限(当前系统用户名)

sudo chown -R sylker:staff /Applications/Caddy

打开复制的 steamcommunity_302.caddy.json,将其中的端口号(随机端口,需具体修改)修改为 443,例如将 :11170 替换为 :443,批量替换即可。

将下载好的 Caddy 二进制文件放到复制目标路径的同级目录下

为了让 Caddy 作为系统服务开机自启,有以下两种方式:

方式一:用户级 LaunchAgents

在 ~/Library/LaunchAgents 目录下新建一个 plist 文件(例如 com.sylker.caddy.plist),无需额外权限设置,内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Label</key>
    <string>com.sylker.caddy</string>
    <key>ProgramArguments</key>
    <array>
        <string>/Applications/Caddy/caddy</string>
        <string>run</string>
        <string>--config</string>
        <string>/Applications/Caddy/steamcommunity_302.caddy.json</string>
        <string>--adapter</string>
        <string>caddyfile</string>
    </array>
    <key>WorkingDirectory</key>
    <string>/Applications/Caddy</string>
    <key>StandardOutPath</key>
    <string>/Applications/Caddy/caddy.log</string>
    <key>StandardErrorPath</key>
    <string>/Applications/Caddy/caddy.error.log</string>
    <key>RunAtLoad</key>
    <true/>
    <key>KeepAlive</key>
    <true/>
</dict>
</plist>

最后执行以下命令立即加载 plist,以后 Caddy 就会随用户登录而自启了:

launchctl load ~/Library/LaunchAgents/com.sylker.caddy.plist
launchctl list | grep caddy

卸载使用:launchctl unload ~/Library/LaunchAgents/com.sylker.caddy.plist

方式二:系统级 LaunchDaemons(推荐)

如果需要将 plist 存放到 /Library/LaunchDaemons,则必须执行以下命令修正文件权限与属主:

sudo chown root:wheel /Library/LaunchDaemons/com.sylker.caddy.plist
sudo chmod 644 /Library/LaunchDaemons/com.sylker.caddy.plist

立即加载则推荐使用 bootstrap 指令:

sudo launchctl bootstrap system /Library/LaunchDaemons/com.sylker.caddy.plist
sudo launchctl list | grep caddy

卸载使用:sudo launchctl bootout system /Library/LaunchDaemons/com.sylker.caddy.plist

效果展示

Caddy 作为轻量级反向代理服务器,以系统服务方式运行时所占用内存非常小,不会对系统造成额外负担!

04