<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet type="text/xsl" href="/assets/rss-20b3285f.xsl"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>标签: uptime-kuma - ouuan's blog</title>
        <link>https://ouuan.moe/tag/uptime-kuma</link>
        <description>标签为 uptime-kuma 的文章 - ouuan 的博客</description>
        <lastBuildDate>Sat, 30 Jul 2022 07:17:46 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <language>zh-CN</language>
        <copyright>Copyright © 2022 - 2026 ouuan
Licensed under CC BY-SA 4.0</copyright>
        <atom:link href="https://ouuan.moe/tag/uptime-kuma/feed.xml" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[使用 Caddy Security 时的 Uptime 监控]]></title>
            <link>https://ouuan.moe/post/2022/07/uptime-monitoring-under-caddy-security</link>
            <guid>https://ouuan.moe/post/2022/07/uptime-monitoring-under-caddy-security</guid>
            <pubDate>Sat, 30 Jul 2022 07:17:46 GMT</pubDate>
            <description><![CDATA[<p><a href="https://authp.github.io/">Caddy Security</a> 不仅会将未经认证的访问者拒之门外<span class="mojikumi-line-end">，</span>也会拦住 <a href="https://uptime.kuma.pet/"><s>可爱的 kuma 酱</s> Uptime Kuma</a><span class="mojikumi-line-end">。</span>这里会分享一下我的一个放过 kuma 的小技巧<span class="mojikumi-line-end">。</span></p>
]]></description>
            <content:encoded><![CDATA[<p><a href="https://authp.github.io/">Caddy Security</a> 不仅会将未经认证的访问者拒之门外<span class="mojikumi-line-end">，</span>也会拦住 <a href="https://uptime.kuma.pet/"><s>可爱的 kuma 酱</s> Uptime Kuma</a><span class="mojikumi-line-end">。</span>这里会分享一下我的一个放过 kuma 的小技巧<span class="mojikumi-line-end">。</span></p>

<p><s><span class="mojikumi-line-start">（</span>P.S. 这是不是应该算<span class="mojikumi-line-start">“</span>经验分享<span class="mojikumi-line-end">”</span>而不是<span class="mojikumi-line-start">“</span>问题解决记录<span class="mojikumi">”</span><span class="mojikumi-line-end">，</span>这两个 tag 的分界线到底在哪呢<span class="mojikumi-line-end">）</span></s></p>
<h2 id="问题描述" class="heading"><a href="#问题描述" class="heading-anchor" aria-label="章节： 问题描述" tabindex="-1"></a><span>问题描述</span></h2>
<p><a href="https://authp.github.io/">Caddy Security</a> 可以为 <a href="https://caddyserver.com/">Caddy</a> 上的路由提供身份认证<span class="mojikumi-line-end">，</span>而这一认证发生在连接到服务之前<span class="mojikumi-line-end">，</span>所以如果不通过认证就无法通过网络访问来获知服务是否正常运行<span class="mojikumi-line-end">，</span>进而影响到 <a href="https://uptime.kuma.pet/">Uptime Kuma</a> 的运作<span class="mojikumi-line-end">。</span></p>
<h2 id="初步解决方案，以及存在的问题" class="heading"><a href="#初步解决方案，以及存在的问题" class="heading-anchor" aria-label="章节： 初步解决方案，以及存在的问题" tabindex="-1"></a><span>初步解决方案<span class="mojikumi-line-end">，</span>以及存在的问题</span></h2>
<p>一个自然的想法是<span class="mojikumi-line-end">，</span>可以关闭一些非敏感路由的身份认证<span class="mojikumi-line-end">，</span>用于 uptime 监控<span class="mojikumi-line-end">。</span>比如说<span class="mojikumi-line-end">，</span>一个服务的首页可能是非敏感可以公开的<span class="mojikumi-line-end">，</span>敏感信息都位于其它路由<span class="mojikumi-line-end">，</span>则可以<span class="mojikumi-line-end">：</span></p>
<section class="code-block relative my-6 shadow" itemprop="hasPart" itemscope itemtype="https://schema.org/SoftwareSourceCode" data-v-c675dba6><div class="h-6 items-center rd-t-1 bg-area px-4 dark:bg-#2A313A media-screen:important-flex" style="display:none;" data-v-c675dba6><h3 class="text-3 text-footer" itemprop="programmingLanguage" aria-label="Caddyfile 代码块" data-v-c675dba6>Caddyfile</h3><ile-root id="ile-1"><button title="复制到剪贴板" class="copy-button b-footer text-footer" data-v-63dfb2af><span class="i-mdi-content-copy" data-v-63dfb2af></span><span class="sr-only" role="status" data-v-63dfb2af></span></button></ile-root><!--ISLAND_HYDRATION_PLACEHOLDER_ile-1--></div><div class="dark:hidden" itemprop="text" data-v-c675dba6><pre class="shiki light" style="background-color: #FBFBFB" tabindex="0"><code><span><span style="color: #994CC3">example.com</span><span style="color: #403F53"> {</span></span>
<span><span style="color: #4876D6">    handle</span><span style="color: #403F53"> / {</span></span>
<span><span style="color: #4876D6">        reverse_proxy</span><span style="color: #403F53"> </span><span style="color: #994CC3">localhost:2333</span></span>
<span><span style="color: #403F53">    }</span></span>
<span><span style="color: #4876D6">    authenticate</span><span style="color: #403F53"> with some-auth-policy</span></span>
<span><span style="color: #4876D6">    reverse_proxy</span><span style="color: #403F53"> </span><span style="color: #994CC3">localhost:2333</span></span>
<span><span style="color: #403F53">}</span></span></code></pre></div><div class="dark:important-block" style="display:none;" data-v-c675dba6><pre class="shiki dark" style="background-color: #011627" tabindex="0"><code><span><span style="color: #C792EA">example.com</span><span style="color: #D6DEEB"> {</span></span>
<span><span style="color: #82AAFF">    handle</span><span style="color: #D6DEEB"> / {</span></span>
<span><span style="color: #82AAFF">        reverse_proxy</span><span style="color: #D6DEEB"> </span><span style="color: #C792EA">localhost:2333</span></span>
<span><span style="color: #D6DEEB">    }</span></span>
<span><span style="color: #82AAFF">    authenticate</span><span style="color: #D6DEEB"> with some-auth-policy</span></span>
<span><span style="color: #82AAFF">    reverse_proxy</span><span style="color: #D6DEEB"> </span><span style="color: #C792EA">localhost:2333</span></span>
<span><span style="color: #D6DEEB">}</span></span></code></pre></div></section>
<p>这看起来很好<span class="mojikumi-line-end">，</span>但问题在于<span class="mojikumi-line-end">，</span>一个网页往往不只是这个路径本身<span class="mojikumi-line-end">，</span>还有 js<span class="mojikumi-line-end">、</span>css 等资源需要使用<span class="mojikumi-line-end">。</span>Caddy Security 只会在访问需要认证的网页时进行认证<span class="mojikumi-line-end">，</span>而不会在加载需要认证的资源时进行认证<span class="mojikumi-line-end">。</span>如果访问一个无需认证的网页<span class="mojikumi-line-end">，</span>但其使用的资源需要认证<span class="mojikumi-line-end">，</span>这些资源就可能加载不出来<span class="mojikumi-line-end">。</span></p>
<p>将这些资源全部列出来会很麻烦<span class="mojikumi-line-end">，</span>如果处理不当也有泄露敏感信息的风险<span class="mojikumi-line-end">。</span></p>
<h2 id="解决方案-给-kuma-一个单独的路由" class="heading"><a href="#解决方案-给-kuma-一个单独的路由" class="heading-anchor" aria-label="章节： 解决方案: 给 kuma 一个单独的路由" tabindex="-1"></a><span>解决方案: 给 kuma 一个单独的路由</span></h2>
<p>上面的方案的问题只对人类访问者有影响<span class="mojikumi-line-end">，</span>而解决了 kuma 的问题<span class="mojikumi-line-end">。</span>所以可以使用同样的思路<span class="mojikumi-line-end">，</span>但只影响 kuma 而不影响访问者<span class="mojikumi-line-end">：</span></p>
<section class="code-block relative my-6 shadow" itemprop="hasPart" itemscope itemtype="https://schema.org/SoftwareSourceCode" data-v-c675dba6><div class="h-6 items-center rd-t-1 bg-area px-4 dark:bg-#2A313A media-screen:important-flex" style="display:none;" data-v-c675dba6><h3 class="text-3 text-footer" itemprop="programmingLanguage" aria-label="Caddyfile 代码块" data-v-c675dba6>Caddyfile</h3><ile-root id="ile-2"><button title="复制到剪贴板" class="copy-button b-footer text-footer" data-v-63dfb2af><span class="i-mdi-content-copy" data-v-63dfb2af></span><span class="sr-only" role="status" data-v-63dfb2af></span></button></ile-root><!--ISLAND_HYDRATION_PLACEHOLDER_ile-2--></div><div class="dark:hidden" itemprop="text" data-v-c675dba6><pre class="shiki light" style="background-color: #FBFBFB" tabindex="0"><code><span><span style="color: #994CC3">example.com</span><span style="color: #403F53"> {</span></span>
<span><span style="color: #4876D6">    handle</span><span style="color: #403F53"> </span><span style="color: #994CC3">/for_uptime_kuma</span><span style="color: #403F53"> {</span></span>
<span><span style="color: #4876D6">        uri</span><span style="color: #403F53"> replace </span><span style="color: #994CC3">/for_uptime_kuma</span><span style="color: #403F53"> /</span></span>
<span><span style="color: #4876D6">        reverse_proxy</span><span style="color: #403F53"> </span><span style="color: #994CC3">localhost:2333</span></span>
<span><span style="color: #403F53">    }</span></span>
<span><span style="color: #4876D6">    authenticate</span><span style="color: #403F53"> with some-auth-policy</span></span>
<span><span style="color: #4876D6">    reverse_proxy</span><span style="color: #403F53"> </span><span style="color: #994CC3">localhost:2333</span></span>
<span><span style="color: #403F53">}</span></span></code></pre></div><div class="dark:important-block" style="display:none;" data-v-c675dba6><pre class="shiki dark" style="background-color: #011627" tabindex="0"><code><span><span style="color: #C792EA">example.com</span><span style="color: #D6DEEB"> {</span></span>
<span><span style="color: #82AAFF">    handle</span><span style="color: #D6DEEB"> </span><span style="color: #C792EA">/for_uptime_kuma</span><span style="color: #D6DEEB"> {</span></span>
<span><span style="color: #82AAFF">        uri</span><span style="color: #D6DEEB"> replace </span><span style="color: #C792EA">/for_uptime_kuma</span><span style="color: #D6DEEB"> /</span></span>
<span><span style="color: #82AAFF">        reverse_proxy</span><span style="color: #D6DEEB"> </span><span style="color: #C792EA">localhost:2333</span></span>
<span><span style="color: #D6DEEB">    }</span></span>
<span><span style="color: #82AAFF">    authenticate</span><span style="color: #D6DEEB"> with some-auth-policy</span></span>
<span><span style="color: #82AAFF">    reverse_proxy</span><span style="color: #D6DEEB"> </span><span style="color: #C792EA">localhost:2333</span></span>
<span><span style="color: #D6DEEB">}</span></span></code></pre></div></section>
<p>然后在 Uptime Kuma 中把监控网址设成 <code>https<wbr>://<wbr>example<wbr>.<wbr>com<wbr>/<wbr>for_<wbr>uptime_<wbr>kuma</code> 即可<span class="mojikumi-line-end">。</span></p>
<p>如果在多个路由都用到这个操作<span class="mojikumi-line-end">，</span>每次重复会比较繁琐<span class="mojikumi-line-end">，</span>可以使用 <a href="https://caddyserver.com/docs/caddyfile/concepts#snippets">Caddy 的 snippet 功能</a><span class="mojikumi-line-end">：</span></p>
<section class="code-block relative my-6 shadow" itemprop="hasPart" itemscope itemtype="https://schema.org/SoftwareSourceCode" data-v-c675dba6><div class="h-6 items-center rd-t-1 bg-area px-4 dark:bg-#2A313A media-screen:important-flex" style="display:none;" data-v-c675dba6><h3 class="text-3 text-footer" itemprop="programmingLanguage" aria-label="Caddyfile 代码块" data-v-c675dba6>Caddyfile</h3><ile-root id="ile-3"><button title="复制到剪贴板" class="copy-button b-footer text-footer" data-v-63dfb2af><span class="i-mdi-content-copy" data-v-63dfb2af></span><span class="sr-only" role="status" data-v-63dfb2af></span></button></ile-root><!--ISLAND_HYDRATION_PLACEHOLDER_ile-3--></div><div class="dark:hidden" itemprop="text" data-v-c675dba6><pre class="shiki light" style="background-color: #FBFBFB" tabindex="0"><code><span><span style="color: #403F53">(kuma) {</span></span>
<span><span style="color: #4876D6">    handle</span><span style="color: #403F53"> </span><span style="color: #994CC3">/for_uptime_kuma</span><span style="color: #403F53"> {</span></span>
<span><span style="color: #4876D6">        uri</span><span style="color: #403F53"> replace </span><span style="color: #994CC3">/for_uptime_kuma</span><span style="color: #403F53"> </span><span style="color: #994CC3">{args.1}</span></span>
<span><span style="color: #4876D6">        reverse_proxy</span><span style="color: #403F53"> </span><span style="color: #994CC3">localhost</span><span style="color: #403F53">:</span><span style="color: #994CC3">{args.0}</span></span>
<span><span style="color: #403F53">    }</span></span>
<span><span style="color: #403F53">}</span></span>
<span></span>
<span><span style="color: #994CC3">homepage-public.example.com</span><span style="color: #403F53"> {</span></span>
<span><span style="color: #4876D6">    import</span><span style="color: #403F53"> kuma</span><span style="color: #AA0982"> 233</span><span style="color: #403F53">3 /</span></span>
<span><span style="color: #4876D6">    authenticate</span><span style="color: #403F53"> with some-auth-policy</span></span>
<span><span style="color: #4876D6">    reverse_proxy</span><span style="color: #403F53"> </span><span style="color: #994CC3">localhost:2333</span></span>
<span><span style="color: #403F53">}</span></span>
<span></span>
<span><span style="color: #994CC3">public-public.example.com</span><span style="color: #403F53"> {</span></span>
<span><span style="color: #4876D6">    import</span><span style="color: #403F53"> kuma</span><span style="color: #AA0982"> 666</span><span style="color: #403F53">6 </span><span style="color: #994CC3">/public</span></span>
<span><span style="color: #4876D6">    authenticate</span><span style="color: #403F53"> with some-auth-policy</span></span>
<span><span style="color: #4876D6">    reverse_proxy</span><span style="color: #403F53"> </span><span style="color: #994CC3">localhost:6666</span></span>
<span><span style="color: #403F53">}</span></span></code></pre></div><div class="dark:important-block" style="display:none;" data-v-c675dba6><pre class="shiki dark" style="background-color: #011627" tabindex="0"><code><span><span style="color: #D6DEEB">(kuma) {</span></span>
<span><span style="color: #82AAFF">    handle</span><span style="color: #D6DEEB"> </span><span style="color: #C792EA">/for_uptime_kuma</span><span style="color: #D6DEEB"> {</span></span>
<span><span style="color: #82AAFF">        uri</span><span style="color: #D6DEEB"> replace </span><span style="color: #C792EA">/for_uptime_kuma</span><span style="color: #D6DEEB"> </span><span style="color: #C792EA">{args.1}</span></span>
<span><span style="color: #82AAFF">        reverse_proxy</span><span style="color: #D6DEEB"> </span><span style="color: #C792EA">localhost</span><span style="color: #D6DEEB">:</span><span style="color: #C792EA">{args.0}</span></span>
<span><span style="color: #D6DEEB">    }</span></span>
<span><span style="color: #D6DEEB">}</span></span>
<span></span>
<span><span style="color: #C792EA">homepage-public.example.com</span><span style="color: #D6DEEB"> {</span></span>
<span><span style="color: #82AAFF">    import</span><span style="color: #D6DEEB"> kuma</span><span style="color: #F78C6C"> 233</span><span style="color: #D6DEEB">3 /</span></span>
<span><span style="color: #82AAFF">    authenticate</span><span style="color: #D6DEEB"> with some-auth-policy</span></span>
<span><span style="color: #82AAFF">    reverse_proxy</span><span style="color: #D6DEEB"> </span><span style="color: #C792EA">localhost:2333</span></span>
<span><span style="color: #D6DEEB">}</span></span>
<span></span>
<span><span style="color: #C792EA">public-public.example.com</span><span style="color: #D6DEEB"> {</span></span>
<span><span style="color: #82AAFF">    import</span><span style="color: #D6DEEB"> kuma</span><span style="color: #F78C6C"> 666</span><span style="color: #D6DEEB">6 </span><span style="color: #C792EA">/public</span></span>
<span><span style="color: #82AAFF">    authenticate</span><span style="color: #D6DEEB"> with some-auth-policy</span></span>
<span><span style="color: #82AAFF">    reverse_proxy</span><span style="color: #D6DEEB"> </span><span style="color: #C792EA">localhost:6666</span></span>
<span><span style="color: #D6DEEB">}</span></span></code></pre></div></section>
<h2 id="另一种解决方案-使用非网页资源进行监控" class="heading"><a href="#另一种解决方案-使用非网页资源进行监控" class="heading-anchor" aria-label="章节： 另一种解决方案: 使用非网页资源进行监控" tabindex="-1"></a><span>另一种解决方案: 使用非网页资源进行监控</span></h2>
<p>既然遇到的问题是网页会需要资源<span class="mojikumi-line-end">，</span>只放开网页的认证会加载不出资源<span class="mojikumi-line-end">，</span>另一个思路就是监控资源而非网页<span class="mojikumi-line-start">（</span>不一定是 js<span class="mojikumi-line-end">、</span>css 这些<span class="mojikumi-line-end">，</span>也可以是可以公开的 API<span class="mojikumi-line-end">，</span>或者几乎不会被访问或访问时一定已经认证了的网页之类的<span class="mojikumi">）</span><span class="mojikumi-line-end">。</span>这比较简单<span class="mojikumi-line-end">，</span>就不多讲了<span class="mojikumi-line-end">。</span></p>]]></content:encoded>
            <category domain="https://ouuan.moe/tag/caddy-security">caddy-security</category>
            <category domain="https://ouuan.moe/tag/uptime-kuma">uptime-kuma</category>
            <category domain="https://ouuan.moe/tag/caddy">caddy</category>
            <category domain="https://ouuan.moe/tag/server">server</category>
            <category domain="https://ouuan.moe/tag/%E9%97%AE%E9%A2%98%E8%A7%A3%E5%86%B3%E8%AE%B0%E5%BD%95">问题解决记录</category>
        </item>
    </channel>
</rss>