<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>Caddy on 亂筆</title>
        <link>https://blog.l3zc.com/zh-hant-tw/tags/caddy/</link>
        <description>Recent content in Caddy on 亂筆</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>zh-hant-tw</language>
        <lastBuildDate>Wed, 08 Jul 2026 17:02:34 +0800</lastBuildDate><atom:link href="https://blog.l3zc.com/zh-hant-tw/tags/caddy/index.xml" rel="self" type="application/rss+xml" /><item>
            <title>OBS 多路推流折騰記：那些本不必要的麻煩</title>
            <link>https://blog.l3zc.com/zh-hant-tw/2024/09/my-multi-streaming-setup/</link>
            <pubDate>Wed, 18 Sep 2024 06:16:51 +0000</pubDate>
            <guid>https://blog.l3zc.com/zh-hant-tw/2024/09/my-multi-streaming-setup/</guid>
            <description>&lt;img src=&#34;https://blog.l3zc.com/2024/09/my-multi-streaming-setup/cover_hu_891493d684eb454d.webp&#34; alt=&#34;Featured image of post OBS 多路推流折騰記：那些本不必要的麻煩&#34; /&gt;&lt;p&gt;長話短說，最近我開始直播我的遊戲實況，我並不指望有多少人看，Just, Why not? 再者每個直播平臺都會有直播回放。相當於免費保存我每一次遊戲的錄像，何樂而不為？&lt;/p&gt;&#xA;&lt;p&gt;扯遠了，如你所見，近期我有了多平臺同時直播的需求，然而 OBS 本身顯然不支持同時推流，同時也因為不支持設置代理的特點和眾所周知的原因，無法推流到 twitch.tv，於是我開始尋找解決方案。&lt;/p&gt;&#xA;&lt;h2 id=&#34;明確需求&#34;&gt;明確需求&#xA;&lt;/h2&gt;&lt;ul&gt;&#xA;&lt;li&gt;多路平臺同時直播&lt;/li&gt;&#xA;&lt;li&gt;最好對性能影響小&lt;/li&gt;&#xA;&lt;li&gt;其中一路需要推流需要代理&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;多路推流&#34;&gt;多路推流&#xA;&lt;/h2&gt;&lt;p&gt;多路推流有現成的插件可用：&lt;a class=&#34;link&#34; href=&#34;https://github.com/sorayuki/obs-multi-rtmp&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;Github&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;在 Release 頁面下載&lt;code&gt;.exe&lt;/code&gt;安裝包，安裝完成後記得在「停靠窗口」菜單裡勾選「多路推流」。這時候默認會彈出一個獨立窗口，可以趁這個機會順便調整一下 OBS 的佈局。&lt;/p&gt;&#xA;&lt;p&gt;&#xA;&lt;img src=&#34;https://blog.l3zc.com/2024/09/my-multi-streaming-setup/image_hu_b8b674a93b9f86bc.webp&#34; alt=&#34;啟用多路推流面板&#34; /&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;插件的設置也沒什麼好說的，用在原版 OBS 的填法在這個插件裡如法炮製即可。&lt;/p&gt;&#xA;&lt;h3 id=&#34;bilibili-直播姬&#34;&gt;Bilibili 直播姬&#xA;&lt;/h3&gt;&lt;p&gt;莫名其妙，B 站小於 50 粉絲的 Up 主只能使用直播姬開播，其他國內平臺做出類似規定者大概也不在少數，啟用第三方推流模式之後，直播面板會顯示推流的配置。此時的不需要按照直播姬給出的推流地址進行配置，因為直播姬莫名其妙的給了一個每次都會變的內網 IP，直接以&lt;code&gt;127.0.0.1&lt;/code&gt;或者&lt;code&gt;localhost&lt;/code&gt;替換即可。&lt;/p&gt;&#xA;&lt;p&gt;&#xA;&lt;img src=&#34;https://blog.l3zc.com/2024/09/my-multi-streaming-setup/image-2_hu_71c45766ee560a9.webp&#34; alt=&#34;Bilibili 直播姬的第三方推流模式&#34; /&gt;&#xA; &#xA;&lt;img src=&#34;https://blog.l3zc.com/2024/09/my-multi-streaming-setup/image-1_hu_17dc4c09eb0ae0af.webp&#34; alt=&#34;插件的設置&#34; /&gt;&#xA;&lt;/p&gt;&#xA;&lt;h2 id=&#34;推流到-twitch&#34;&gt;推流到 Twitch&#xA;&lt;/h2&gt;&lt;p&gt;推流到 Twitch 則會因為 GFW 多出很多不必要的麻煩。&lt;/p&gt;&#xA;&lt;p&gt;OBS 本身並不支持設置代理，起初我打算用 Clash 的 TAP 模式強制代理 OBS 的流量，而 Clash 的 TAP 並不監聽 rtmp 流量，宣告失敗。我決定直接架設一個轉發服務器，這個服務器需要既可以與 Twitch 通信，又可以不受 GFW 的干擾。&lt;/p&gt;&#xA;&lt;p&gt;在網上查到一些信息，Caddy 似乎不支持 RTMP 協議，而 &lt;code&gt;nginx-rtmp&lt;/code&gt; 插件則專門為 RTMP 協議設計。這幾乎是唯一的選擇。&lt;/p&gt;&#xA;&lt;p&gt;部署的前提：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;熟悉基本的 Linux 命令行操作。&lt;/li&gt;&#xA;&lt;li&gt;服務器已經安裝好&lt;code&gt;docker&lt;/code&gt;和&lt;code&gt;docker compose&lt;/code&gt;插件。&lt;/li&gt;&#xA;&lt;li&gt;有合適的命令行文本編輯器，比如&lt;code&gt;nvim&lt;/code&gt;或者絕大部分 distro 自帶的&lt;code&gt;nano&lt;/code&gt;。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;新建目錄：&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code class=&#34;language-bash&#34;&gt;mkdir nginx-rtmp &amp;&amp; cd nginx-rtmp&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;創建&lt;code&gt;docker-compose.yml&lt;/code&gt;：&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code class=&#34;language-yaml&#34;&gt;services:&#xA;  nginx-rtmp:&#xA;    image: tiangolo/nginx-rtmp:latest&#xA;    container_name: nginx_rtmp&#xA;    ports:&#xA;      - &#34;1935:1935&#34; # RTMP port&#xA;    volumes:&#xA;      - ./nginx.conf:/etc/nginx/nginx.conf&#xA;    restart: unless-stopped&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;創建&lt;code&gt;nginx.conf&lt;/code&gt;：&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code class=&#34;language-nginx&#34;&gt;worker_processes  auto;&#xA;&#xA;events {&#xA;    worker_connections  1024;&#xA;}&#xA;&#xA;rtmp {&#xA;    server {&#xA;        listen 1935;&#xA;        chunk_size 4096;&#xA;&#xA;        application live {&#xA;            live on;&#xA;            push rtmp://live.twitch.tv/app/{Twitch 主直播密鑰};&#xA;        }&#xA;    }&#xA;}&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;啟動編排：&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code class=&#34;language-bash&#34;&gt;docker compose up -d&#xA;# 老版本 compose 插件則是 docker-compose up&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;當然，別忘了開放防火牆端口。我的防火牆參考了 &lt;a class=&#34;link&#34; href=&#34;https://github.com/chaifeng/ufw-docker#solving-ufw-and-docker-issues&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;To Fix The Docker and UFW Security Flaw Without Disabling Iptables&lt;/a&gt; 一文中提到的配置，相應地，開放端口的命令如下：&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code class=&#34;language-bash&#34;&gt;ufw route allow proto tcp from any to any port 1935&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;配置完成後，OBS 內的推流目標地址填入&lt;code&gt;rtmp://服務器ip/live&lt;/code&gt;，推流碼填寫任意值均可。設置完成後即可開始推流。&lt;/p&gt;&#xA;&lt;h3 id=&#34;netch&#34;&gt;Netch&#xA;&lt;/h3&gt;&lt;p&gt;如果沒有服務器，亦可以使用 Netch 代理 OBS 進程進行推流。&lt;/p&gt;&#xA;&lt;p&gt;首先下載 Netch 1.9.2 版本，注意一定要是 1.9.2 版本。添加一個進程模式，將 OBS 文件夾加入，隨後啟用該進程模式的代理即可。&lt;/p&gt;&#xA;&lt;p&gt;&#xA;&lt;img src=&#34;https://blog.l3zc.com/2024/09/my-multi-streaming-setup/image-3_hu_fab77139607785da.webp&#34; alt=&#34;創建一個進程模式&#34; /&gt;&#xA;&lt;/p&gt;&#xA;&lt;h2 id=&#34;尾聲&#34;&gt;尾聲&#xA;&lt;/h2&gt;&lt;p&gt;這次為了在同時在 Twitch 和 B 站上推流，遇到了很多原本不必要的麻煩。我可以怪 OBS 沒有內置代理功能，也可以怪 Clash Verge 等代理工具不支持 RTMP，轉來轉去，最終要怪的，還得是 GFW。雖然最後的結果還算令人滿意，僅僅為了推流而折騰這些東西的體驗實在是稱不上良好。也許我今後我應該去研究修改 Mihomo 內核，讓其支持 RTMP 協議，亦或是自己寫一套獨立的實現單獨轉發 OBS 的流量，不論如何，在這片土地上，想要暢快的直播，道阻且長。&lt;/p&gt;&#xA;&lt;p&gt;最後，歡迎關注我的 Twitch 頻道: &lt;a class=&#34;link&#34; href=&#34;https://www.twitch.tv/powerfullz233&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;https://www.twitch.tv/powerfullz233&lt;/a&gt;&lt;/p&gt;&#xA;</description>
        </item><item>
            <title>科學上網：用 Caddy 反向代理 VLESS</title>
            <link>https://blog.l3zc.com/zh-hant-tw/2024/08/caddy-vless-proxy/</link>
            <pubDate>Tue, 13 Aug 2024 08:24:26 +0000</pubDate>
            <guid>https://blog.l3zc.com/zh-hant-tw/2024/08/caddy-vless-proxy/</guid>
            <description>&lt;img src=&#34;https://blog.l3zc.com/2024/08/caddy-vless-proxy/cover_hu_1cd20ddda32e23a.webp&#34; alt=&#34;Featured image of post 科學上網：用 Caddy 反向代理 VLESS&#34; /&gt;&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://blog.l3zc.com/2024/08/aria2-downloading-server/&#34; &gt;上一篇文章&lt;/a&gt;提到，我搭建了一個基於 Aria2 的 BT 離線下載服務器。為了用 Caddy 反向代理部署好的容器，我把原來偷懶用一鍵腳本部署的 Trojan 給卸載了，問就是因為這腳本把 80 和 443 端口都佔用了，不卸載掉根本沒法繼續。&lt;/p&gt;&#xA;&lt;p&gt;於是離線下載服務器是搭建好了，可時不時需要的代理卻不得不下線。仔細一想，之前看到過有人 Cloudflare + V2Ray + WS 復活被牆的 VPS，既然是 WebSocket，還能用 Cloudflare 反代，那用 Caddy 反代又有何不可呢？況且 Caddy 還有自動 TLS，比起 Nginx + Certbot 的組合配置起來肯定更簡單。只要配置成功，我就可以在為 Caddy 留住 443 端口的同時跑代理了。&lt;/p&gt;&#xA;&lt;h2 id=&#34;安裝-vless-和-caddy&#34;&gt;安裝 VLESS 和 Caddy&#xA;&lt;/h2&gt;&lt;p&gt;安裝VLESS 可以直接使用 &lt;a class=&#34;link&#34; href=&#34;https://github.com/v2fly/fhs-install-v2ray&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;v2fly/fhs-install-v2ray&lt;/a&gt; 一鍵腳本：&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code class=&#34;language-shell&#34;&gt;# 安裝執行檔和 .dat 資料檔&#xA;bash &lt;(curl -L https://raw.githubusercontent.com/v2fly/fhs-install-v2ray/master/install-release.sh)&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Caddy 的安裝請參考&lt;a class=&#34;link&#34; href=&#34;https://caddyserver.com/docs/install&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;官方教程&lt;/a&gt;，例如，我使用 Debian 12，則使用以下命令：&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code class=&#34;language-shell&#34;&gt;sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https curl&#xA;curl -1sLf &#39;https://dl.cloudsmith.io/public/caddy/stable/gpg.key&#39; | sudo gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg&#xA;curl -1sLf &#39;https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt&#39; | sudo tee /etc/apt/sources.list.d/caddy-stable.list&#xA;sudo apt update&#xA;sudo apt install caddy&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;配置-vless&#34;&gt;配置 VLESS&#xA;&lt;/h2&gt;&lt;p&gt;編輯&lt;code&gt;/usr/local/etc/v2ray/config.json&lt;/code&gt;：&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code class=&#34;language-json&#34;&gt;{&#xA;  &#34;log&#34;: {&#xA;    &#34;access&#34;: &#34;/var/log/v2ray/access.log&#34;,&#xA;    &#34;error&#34;: &#34;/var/log/v2ray/error.log&#34;,&#xA;    &#34;loglevel&#34;: &#34;warning&#34;&#xA;  },&#xA;  &#34;inbounds&#34;: [&#xA;    {&#xA;      &#34;port&#34;: 1234, //任意端口&#xA;      &#34;listen&#34;: &#34;127.0.0.1&#34;,&#xA;      &#34;protocol&#34;: &#34;vless&#34;,&#xA;      &#34;settings&#34;: {&#xA;        &#34;clients&#34;: [&#xA;          {&#xA;            &#34;id&#34;: &#34;super-random-uuid&#34;, //隨機生成一個 UUID 替換即可&#xA;            &#34;level&#34;: 0,&#xA;            &#34;email&#34;: &#34;example@example.com&#34;&#xA;          }&#xA;        ],&#xA;        &#34;decryption&#34;: &#34;none&#34;&#xA;      },&#xA;      &#34;streamSettings&#34;: {&#xA;        &#34;network&#34;: &#34;ws&#34;,&#xA;        &#34;security&#34;: &#34;none&#34;,&#xA;        &#34;wsSettings&#34;: {&#xA;          &#34;path&#34;: &#34;/&#34; // 需要與之後的 Caddy 配置保持相同&#xA;        }&#xA;      }&#xA;    }&#xA;  ],&#xA;  &#34;outbounds&#34;: [&#xA;    {&#xA;      &#34;protocol&#34;: &#34;freedom&#34;&#xA;    }&#xA;  ]&#xA;}&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;編輯完成後保存退出即可。&lt;/p&gt;&#xA;&lt;h2 id=&#34;配置-caddy&#34;&gt;配置 Caddy&#xA;&lt;/h2&gt;&lt;p&gt;在你喜歡的位置創建一個 Caddyfile，或者編輯已有的 Caddyfile，加入如下內容，反向代理剛才在 VLESS 配置文件中設置的端口：&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code class=&#34;language-caddyfile&#34;&gt;yourdomain.com {&#xA;        # 用一個 Matcher 匹配所有指定路徑的 Websocket 請求&#xA;        @websockets {&#xA;                path /      # 與前面 VLESS 的 path 保持一致&#xA;                header Connection Upgrade&#xA;                header Upgrade websocket&#xA;        }&#xA;        reverse_proxy @websockets :1234&#xA;}&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;至此，服務端所有配置文件都編輯完畢。&lt;/p&gt;&#xA;&lt;h2 id=&#34;啟動服務&#34;&gt;啟動服務&#xA;&lt;/h2&gt;&lt;p&gt;啟動 VLESS，並設置開機自啟動：&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code class=&#34;language-shell&#34;&gt;systemtcl enable v2ray &amp;&amp; systemctl start v2ray&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;啟動 Caddy/更新 Caddy 配置：&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code class=&#34;language-shell&#34;&gt;caddy start&#xA;caddy reload  # 更新配置用&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;以上操作全部完成後，Caddy 反向代理 VLESS 就完成了。&lt;/p&gt;&#xA;&lt;h2 id=&#34;客戶端設置&#34;&gt;客戶端設置&#xA;&lt;/h2&gt;&lt;p&gt;客戶端方面需要手動設置：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;地址是綁定給 VLESS 的域名。&lt;/li&gt;&#xA;&lt;li&gt;端口是 443&lt;/li&gt;&#xA;&lt;li&gt;TLS 打開&lt;/li&gt;&#xA;&lt;li&gt;傳輸方式選擇 websocket&lt;/li&gt;&#xA;&lt;li&gt;UUID 是之前填入 VLESS 配置文件的 UUID&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&#xA;&lt;img src=&#34;https://blog.l3zc.com/2024/08/caddy-vless-proxy/IMG_0003_hu_844bce19772c475.webp&#34; alt=&#34;Shadowrocket 設置&#34; /&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;所有的客戶端設置大同小異，至於 Clash 的配置文件，可以參考 &lt;a class=&#34;link&#34; href=&#34;https://wiki.metacubex.one/config/proxies/vless/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;Mihomo 文檔&lt;/a&gt;&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;，以下是我的示例配置文件：&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code class=&#34;language-yaml&#34;&gt;proxies:&#xA;  - name: &#34;A Random Name&#34;&#xA;    type: vless&#xA;    server: yourdomain.com&#xA;    port: 443&#xA;    udp: true&#xA;    uuid: super-random-uuid&#xA;    flow: xtls-rprx-vision&#xA;    packet-encoding: xudp&#xA;&#xA;    tls: true&#xA;    servername: yourdomain.com&#xA;    alpn:&#xA;      - h2&#xA;      - http/1.1&#xA;    skip-cert-verify: false&#xA;&#xA;    network: ws&#xA;&#xA;    smux:&#xA;      enabled: false&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;需要生成 Clash 配置文件可以使用 &lt;a class=&#34;link&#34; href=&#34;https://v2rayse.com/clash-template/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;V2RaySE 提供的工具&lt;/a&gt;。&lt;/p&gt;&#xA;&lt;h2 id=&#34;完成&#34;&gt;完成&#xA;&lt;/h2&gt;&lt;p&gt;好了，現在我們已經擁有了一個 VLESS 服務器，Caddy 會自動為我們申請和維護 TLS 證書，非常好用。&lt;/p&gt;&#xA;&lt;p&gt;只需要這麼小小折騰一下，我彷彿又找到了當年用一鍵腳本搭建 SSR 時的愉悅，好好享受這種能順利打開 google.com 時的興奮吧。&lt;/p&gt;&#xA;&lt;h2 id=&#34;todo-list&#34;&gt;TODO List&#xA;&lt;/h2&gt;&lt;ul&gt;&#xA;&lt;li&gt;&lt;input checked=&#34;&#34; disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; 基本搭建&lt;/li&gt;&#xA;&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; 偽裝&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;div class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;&#xA;&lt;hr&gt;&#xA;&lt;ol&gt;&#xA;&lt;li id=&#34;fn:1&#34;&gt;&#xA;&lt;p&gt;畢竟繼承 Clash Meta 衣缽的 Mihomo 也算是 Clash 正統了。&amp;#160;&lt;a href=&#34;#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/div&gt;&#xA;</description>
        </item></channel>
</rss>
