<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="../assets/xml/rss.xsl" media="all"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>影子屋 (文章分类：备忘)</title><link>https://blog.bgme.me/</link><description></description><atom:link href="https://blog.bgme.me/categories/cat_bei-wang.xml" rel="self" type="application/rss+xml"></atom:link><language>zh_cn</language><copyright>Contents © 2024 &lt;a href="mailto:i@bgme.me"&gt;无影人&lt;/a&gt; 
&lt;a rel="license noopener nofollow" target="_blank" href="http://creativecommons.org/licenses/by-sa/4.0/" class="ui image" title="如无特别说明，本站文章均遵循 CC BY-SA 4.0 协议，转载请注明作者及出处。"&gt;
&lt;img alt="Creative Commons Attribution-ShareAlike 4.0 International License" src="/license.png"&gt;
&lt;/a&gt;
</copyright><lastBuildDate>Wed, 24 Apr 2024 12:02:14 GMT</lastBuildDate><generator>Nikola (getnikola.com)</generator><docs>http://blogs.law.harvard.edu/tech/rss</docs><item><title>Mastodon 前端预编译失败该怎么办？</title><link>https://blog.bgme.me/posts/2023/how-to-fix-mastodon-assets-precompile-failed/</link><dc:creator>无影人</dc:creator><description>&lt;p&gt;Mastodon 在较新 Linux 发行版本下会遇到前端预编译出错的问题。&lt;/p&gt;
&lt;p&gt;本文大概记录一下，如何修复 Mastodon 前端预编译错误？&lt;/p&gt;
&lt;!-- TEASER_END --&gt;
&lt;p&gt;本文测试环境：&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code console"&gt;&lt;a id="rest_code_856744d48efd4d2e94b68ecb811576c6-1" name="rest_code_856744d48efd4d2e94b68ecb811576c6-1" href="https://blog.bgme.me/posts/2023/how-to-fix-mastodon-assets-precompile-failed/#rest_code_856744d48efd4d2e94b68ecb811576c6-1"&gt;&lt;/a&gt;&lt;span class="gp"&gt;$ &lt;/span&gt;git&lt;span class="w"&gt; &lt;/span&gt;describe&lt;span class="w"&gt; &lt;/span&gt;--tags
&lt;a id="rest_code_856744d48efd4d2e94b68ecb811576c6-2" name="rest_code_856744d48efd4d2e94b68ecb811576c6-2" href="https://blog.bgme.me/posts/2023/how-to-fix-mastodon-assets-precompile-failed/#rest_code_856744d48efd4d2e94b68ecb811576c6-2"&gt;&lt;/a&gt;&lt;span class="go"&gt;v4.2.0-beta2&lt;/span&gt;
&lt;a id="rest_code_856744d48efd4d2e94b68ecb811576c6-3" name="rest_code_856744d48efd4d2e94b68ecb811576c6-3" href="https://blog.bgme.me/posts/2023/how-to-fix-mastodon-assets-precompile-failed/#rest_code_856744d48efd4d2e94b68ecb811576c6-3"&gt;&lt;/a&gt;
&lt;a id="rest_code_856744d48efd4d2e94b68ecb811576c6-4" name="rest_code_856744d48efd4d2e94b68ecb811576c6-4" href="https://blog.bgme.me/posts/2023/how-to-fix-mastodon-assets-precompile-failed/#rest_code_856744d48efd4d2e94b68ecb811576c6-4"&gt;&lt;/a&gt;&lt;span class="gp"&gt;$ &lt;/span&gt;git&lt;span class="w"&gt; &lt;/span&gt;rev-parse&lt;span class="w"&gt; &lt;/span&gt;HEAD
&lt;a id="rest_code_856744d48efd4d2e94b68ecb811576c6-5" name="rest_code_856744d48efd4d2e94b68ecb811576c6-5" href="https://blog.bgme.me/posts/2023/how-to-fix-mastodon-assets-precompile-failed/#rest_code_856744d48efd4d2e94b68ecb811576c6-5"&gt;&lt;/a&gt;&lt;span class="go"&gt;facfec1ba36cee27f232ebff90b990933719235a&lt;/span&gt;
&lt;a id="rest_code_856744d48efd4d2e94b68ecb811576c6-6" name="rest_code_856744d48efd4d2e94b68ecb811576c6-6" href="https://blog.bgme.me/posts/2023/how-to-fix-mastodon-assets-precompile-failed/#rest_code_856744d48efd4d2e94b68ecb811576c6-6"&gt;&lt;/a&gt;
&lt;a id="rest_code_856744d48efd4d2e94b68ecb811576c6-7" name="rest_code_856744d48efd4d2e94b68ecb811576c6-7" href="https://blog.bgme.me/posts/2023/how-to-fix-mastodon-assets-precompile-failed/#rest_code_856744d48efd4d2e94b68ecb811576c6-7"&gt;&lt;/a&gt;&lt;span class="gp"&gt;$ &lt;/span&gt;rbenv&lt;span class="w"&gt; &lt;/span&gt;--version
&lt;a id="rest_code_856744d48efd4d2e94b68ecb811576c6-8" name="rest_code_856744d48efd4d2e94b68ecb811576c6-8" href="https://blog.bgme.me/posts/2023/how-to-fix-mastodon-assets-precompile-failed/#rest_code_856744d48efd4d2e94b68ecb811576c6-8"&gt;&lt;/a&gt;&lt;span class="go"&gt;rbenv 1.2.0&lt;/span&gt;
&lt;a id="rest_code_856744d48efd4d2e94b68ecb811576c6-9" name="rest_code_856744d48efd4d2e94b68ecb811576c6-9" href="https://blog.bgme.me/posts/2023/how-to-fix-mastodon-assets-precompile-failed/#rest_code_856744d48efd4d2e94b68ecb811576c6-9"&gt;&lt;/a&gt;
&lt;a id="rest_code_856744d48efd4d2e94b68ecb811576c6-10" name="rest_code_856744d48efd4d2e94b68ecb811576c6-10" href="https://blog.bgme.me/posts/2023/how-to-fix-mastodon-assets-precompile-failed/#rest_code_856744d48efd4d2e94b68ecb811576c6-10"&gt;&lt;/a&gt;&lt;span class="gp"&gt;$ &lt;/span&gt;ruby&lt;span class="w"&gt; &lt;/span&gt;--version
&lt;a id="rest_code_856744d48efd4d2e94b68ecb811576c6-11" name="rest_code_856744d48efd4d2e94b68ecb811576c6-11" href="https://blog.bgme.me/posts/2023/how-to-fix-mastodon-assets-precompile-failed/#rest_code_856744d48efd4d2e94b68ecb811576c6-11"&gt;&lt;/a&gt;&lt;span class="go"&gt;ruby 3.2.2 (2023-03-30 revision e51014f9c0) [x86_64-linux]&lt;/span&gt;
&lt;a id="rest_code_856744d48efd4d2e94b68ecb811576c6-12" name="rest_code_856744d48efd4d2e94b68ecb811576c6-12" href="https://blog.bgme.me/posts/2023/how-to-fix-mastodon-assets-precompile-failed/#rest_code_856744d48efd4d2e94b68ecb811576c6-12"&gt;&lt;/a&gt;
&lt;a id="rest_code_856744d48efd4d2e94b68ecb811576c6-13" name="rest_code_856744d48efd4d2e94b68ecb811576c6-13" href="https://blog.bgme.me/posts/2023/how-to-fix-mastodon-assets-precompile-failed/#rest_code_856744d48efd4d2e94b68ecb811576c6-13"&gt;&lt;/a&gt;&lt;span class="gp"&gt;$ &lt;/span&gt;bundle&lt;span class="w"&gt; &lt;/span&gt;--version
&lt;a id="rest_code_856744d48efd4d2e94b68ecb811576c6-14" name="rest_code_856744d48efd4d2e94b68ecb811576c6-14" href="https://blog.bgme.me/posts/2023/how-to-fix-mastodon-assets-precompile-failed/#rest_code_856744d48efd4d2e94b68ecb811576c6-14"&gt;&lt;/a&gt;&lt;span class="go"&gt;Bundler version 2.4.13&lt;/span&gt;
&lt;a id="rest_code_856744d48efd4d2e94b68ecb811576c6-15" name="rest_code_856744d48efd4d2e94b68ecb811576c6-15" href="https://blog.bgme.me/posts/2023/how-to-fix-mastodon-assets-precompile-failed/#rest_code_856744d48efd4d2e94b68ecb811576c6-15"&gt;&lt;/a&gt;
&lt;a id="rest_code_856744d48efd4d2e94b68ecb811576c6-16" name="rest_code_856744d48efd4d2e94b68ecb811576c6-16" href="https://blog.bgme.me/posts/2023/how-to-fix-mastodon-assets-precompile-failed/#rest_code_856744d48efd4d2e94b68ecb811576c6-16"&gt;&lt;/a&gt;&lt;span class="gp"&gt;$ &lt;/span&gt;node&lt;span class="w"&gt; &lt;/span&gt;--version
&lt;a id="rest_code_856744d48efd4d2e94b68ecb811576c6-17" name="rest_code_856744d48efd4d2e94b68ecb811576c6-17" href="https://blog.bgme.me/posts/2023/how-to-fix-mastodon-assets-precompile-failed/#rest_code_856744d48efd4d2e94b68ecb811576c6-17"&gt;&lt;/a&gt;&lt;span class="go"&gt;v20.5.1&lt;/span&gt;
&lt;a id="rest_code_856744d48efd4d2e94b68ecb811576c6-18" name="rest_code_856744d48efd4d2e94b68ecb811576c6-18" href="https://blog.bgme.me/posts/2023/how-to-fix-mastodon-assets-precompile-failed/#rest_code_856744d48efd4d2e94b68ecb811576c6-18"&gt;&lt;/a&gt;
&lt;a id="rest_code_856744d48efd4d2e94b68ecb811576c6-19" name="rest_code_856744d48efd4d2e94b68ecb811576c6-19" href="https://blog.bgme.me/posts/2023/how-to-fix-mastodon-assets-precompile-failed/#rest_code_856744d48efd4d2e94b68ecb811576c6-19"&gt;&lt;/a&gt;&lt;span class="gp"&gt;$ &lt;/span&gt;yarn&lt;span class="w"&gt; &lt;/span&gt;--version
&lt;a id="rest_code_856744d48efd4d2e94b68ecb811576c6-20" name="rest_code_856744d48efd4d2e94b68ecb811576c6-20" href="https://blog.bgme.me/posts/2023/how-to-fix-mastodon-assets-precompile-failed/#rest_code_856744d48efd4d2e94b68ecb811576c6-20"&gt;&lt;/a&gt;&lt;span class="go"&gt;1.22.19&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;hr class="docutils"&gt;
&lt;section id="err-ossl-evp-unsupported"&gt;
&lt;h2&gt;ERR_OSSL_EVP_UNSUPPORTED&lt;/h2&gt;
&lt;p&gt;如果 Node.js 版本大于 17，编译时便会遇到 &lt;code class="docutils literal"&gt;ERR_OSSL_EVP_UNSUPPORTED&lt;/code&gt; 错误。&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code console"&gt;&lt;a id="rest_code_4612020ce2194235925698fe5defe31c-1" name="rest_code_4612020ce2194235925698fe5defe31c-1" href="https://blog.bgme.me/posts/2023/how-to-fix-mastodon-assets-precompile-failed/#rest_code_4612020ce2194235925698fe5defe31c-1"&gt;&lt;/a&gt;&lt;span class="gp"&gt;$ &lt;/span&gt;&lt;span class="nv"&gt;RAILS_ENV&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;production&lt;span class="w"&gt; &lt;/span&gt;bundle&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;exec&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;rails&lt;span class="w"&gt; &lt;/span&gt;yarn:install&lt;span class="w"&gt; &lt;/span&gt;assets:precompile
&lt;a id="rest_code_4612020ce2194235925698fe5defe31c-2" name="rest_code_4612020ce2194235925698fe5defe31c-2" href="https://blog.bgme.me/posts/2023/how-to-fix-mastodon-assets-precompile-failed/#rest_code_4612020ce2194235925698fe5defe31c-2"&gt;&lt;/a&gt;&lt;span class="go"&gt;yarn install v1.22.19&lt;/span&gt;
&lt;a id="rest_code_4612020ce2194235925698fe5defe31c-3" name="rest_code_4612020ce2194235925698fe5defe31c-3" href="https://blog.bgme.me/posts/2023/how-to-fix-mastodon-assets-precompile-failed/#rest_code_4612020ce2194235925698fe5defe31c-3"&gt;&lt;/a&gt;&lt;span class="go"&gt;[1/5] Resolving packages...&lt;/span&gt;
&lt;a id="rest_code_4612020ce2194235925698fe5defe31c-4" name="rest_code_4612020ce2194235925698fe5defe31c-4" href="https://blog.bgme.me/posts/2023/how-to-fix-mastodon-assets-precompile-failed/#rest_code_4612020ce2194235925698fe5defe31c-4"&gt;&lt;/a&gt;&lt;span class="go"&gt;success Already up-to-date.&lt;/span&gt;
&lt;a id="rest_code_4612020ce2194235925698fe5defe31c-5" name="rest_code_4612020ce2194235925698fe5defe31c-5" href="https://blog.bgme.me/posts/2023/how-to-fix-mastodon-assets-precompile-failed/#rest_code_4612020ce2194235925698fe5defe31c-5"&gt;&lt;/a&gt;&lt;span class="go"&gt;Done in 0.47s.&lt;/span&gt;
&lt;a id="rest_code_4612020ce2194235925698fe5defe31c-6" name="rest_code_4612020ce2194235925698fe5defe31c-6" href="https://blog.bgme.me/posts/2023/how-to-fix-mastodon-assets-precompile-failed/#rest_code_4612020ce2194235925698fe5defe31c-6"&gt;&lt;/a&gt;&lt;span class="go"&gt;Compiling...&lt;/span&gt;
&lt;a id="rest_code_4612020ce2194235925698fe5defe31c-7" name="rest_code_4612020ce2194235925698fe5defe31c-7" href="https://blog.bgme.me/posts/2023/how-to-fix-mastodon-assets-precompile-failed/#rest_code_4612020ce2194235925698fe5defe31c-7"&gt;&lt;/a&gt;&lt;span class="go"&gt;Compilation failed:&lt;/span&gt;
&lt;a id="rest_code_4612020ce2194235925698fe5defe31c-8" name="rest_code_4612020ce2194235925698fe5defe31c-8" href="https://blog.bgme.me/posts/2023/how-to-fix-mastodon-assets-precompile-failed/#rest_code_4612020ce2194235925698fe5defe31c-8"&gt;&lt;/a&gt;&lt;span class="go"&gt;node:internal/crypto/hash:69&lt;/span&gt;
&lt;a id="rest_code_4612020ce2194235925698fe5defe31c-9" name="rest_code_4612020ce2194235925698fe5defe31c-9" href="https://blog.bgme.me/posts/2023/how-to-fix-mastodon-assets-precompile-failed/#rest_code_4612020ce2194235925698fe5defe31c-9"&gt;&lt;/a&gt;&lt;span class="go"&gt;this[kHandle] = new _Hash(algorithm, xofLen);&lt;/span&gt;
&lt;a id="rest_code_4612020ce2194235925698fe5defe31c-10" name="rest_code_4612020ce2194235925698fe5defe31c-10" href="https://blog.bgme.me/posts/2023/how-to-fix-mastodon-assets-precompile-failed/#rest_code_4612020ce2194235925698fe5defe31c-10"&gt;&lt;/a&gt;&lt;span class="go"&gt;                ^&lt;/span&gt;
&lt;a id="rest_code_4612020ce2194235925698fe5defe31c-11" name="rest_code_4612020ce2194235925698fe5defe31c-11" href="https://blog.bgme.me/posts/2023/how-to-fix-mastodon-assets-precompile-failed/#rest_code_4612020ce2194235925698fe5defe31c-11"&gt;&lt;/a&gt;
&lt;a id="rest_code_4612020ce2194235925698fe5defe31c-12" name="rest_code_4612020ce2194235925698fe5defe31c-12" href="https://blog.bgme.me/posts/2023/how-to-fix-mastodon-assets-precompile-failed/#rest_code_4612020ce2194235925698fe5defe31c-12"&gt;&lt;/a&gt;&lt;span class="go"&gt;Error: error:0308010C:digital envelope routines::unsupported&lt;/span&gt;
&lt;a id="rest_code_4612020ce2194235925698fe5defe31c-13" name="rest_code_4612020ce2194235925698fe5defe31c-13" href="https://blog.bgme.me/posts/2023/how-to-fix-mastodon-assets-precompile-failed/#rest_code_4612020ce2194235925698fe5defe31c-13"&gt;&lt;/a&gt;&lt;span class="go"&gt;    at new Hash (node:internal/crypto/hash:69:19)&lt;/span&gt;
&lt;a id="rest_code_4612020ce2194235925698fe5defe31c-14" name="rest_code_4612020ce2194235925698fe5defe31c-14" href="https://blog.bgme.me/posts/2023/how-to-fix-mastodon-assets-precompile-failed/#rest_code_4612020ce2194235925698fe5defe31c-14"&gt;&lt;/a&gt;&lt;span class="go"&gt;    at Object.createHash (node:crypto:138:10)&lt;/span&gt;
&lt;a id="rest_code_4612020ce2194235925698fe5defe31c-15" name="rest_code_4612020ce2194235925698fe5defe31c-15" href="https://blog.bgme.me/posts/2023/how-to-fix-mastodon-assets-precompile-failed/#rest_code_4612020ce2194235925698fe5defe31c-15"&gt;&lt;/a&gt;&lt;span class="go"&gt;    at module.exports (/srv/app/mastodon/mastodon/node_modules/webpack/lib/util/createHash.js:135:53)&lt;/span&gt;
&lt;a id="rest_code_4612020ce2194235925698fe5defe31c-16" name="rest_code_4612020ce2194235925698fe5defe31c-16" href="https://blog.bgme.me/posts/2023/how-to-fix-mastodon-assets-precompile-failed/#rest_code_4612020ce2194235925698fe5defe31c-16"&gt;&lt;/a&gt;&lt;span class="go"&gt;    at ConcatenatedModule._createIdentifier (/srv/app/mastodon/mastodon/node_modules/webpack/lib/optimize/ConcatenatedModule.js:563:16)&lt;/span&gt;
&lt;a id="rest_code_4612020ce2194235925698fe5defe31c-17" name="rest_code_4612020ce2194235925698fe5defe31c-17" href="https://blog.bgme.me/posts/2023/how-to-fix-mastodon-assets-precompile-failed/#rest_code_4612020ce2194235925698fe5defe31c-17"&gt;&lt;/a&gt;&lt;span class="go"&gt;    at new ConcatenatedModule (/srv/app/mastodon/mastodon/node_modules/webpack/lib/optimize/ConcatenatedModule.js:445:27)&lt;/span&gt;
&lt;a id="rest_code_4612020ce2194235925698fe5defe31c-18" name="rest_code_4612020ce2194235925698fe5defe31c-18" href="https://blog.bgme.me/posts/2023/how-to-fix-mastodon-assets-precompile-failed/#rest_code_4612020ce2194235925698fe5defe31c-18"&gt;&lt;/a&gt;&lt;span class="go"&gt;    at /srv/app/mastodon/mastodon/node_modules/webpack/lib/optimize/ModuleConcatenationPlugin.js:250:26&lt;/span&gt;
&lt;a id="rest_code_4612020ce2194235925698fe5defe31c-19" name="rest_code_4612020ce2194235925698fe5defe31c-19" href="https://blog.bgme.me/posts/2023/how-to-fix-mastodon-assets-precompile-failed/#rest_code_4612020ce2194235925698fe5defe31c-19"&gt;&lt;/a&gt;&lt;span class="go"&gt;    at SyncBailHook.eval [as call] (eval at create (/srv/app/mastodon/mastodon/node_modules/tapable/lib/HookCodeFactory.js:19:10), &amp;lt;anonymous&amp;gt;:7:16)&lt;/span&gt;
&lt;a id="rest_code_4612020ce2194235925698fe5defe31c-20" name="rest_code_4612020ce2194235925698fe5defe31c-20" href="https://blog.bgme.me/posts/2023/how-to-fix-mastodon-assets-precompile-failed/#rest_code_4612020ce2194235925698fe5defe31c-20"&gt;&lt;/a&gt;&lt;span class="go"&gt;    at SyncBailHook.lazyCompileHook (/srv/app/mastodon/mastodon/node_modules/tapable/lib/Hook.js:154:20)&lt;/span&gt;
&lt;a id="rest_code_4612020ce2194235925698fe5defe31c-21" name="rest_code_4612020ce2194235925698fe5defe31c-21" href="https://blog.bgme.me/posts/2023/how-to-fix-mastodon-assets-precompile-failed/#rest_code_4612020ce2194235925698fe5defe31c-21"&gt;&lt;/a&gt;&lt;span class="go"&gt;    at /srv/app/mastodon/mastodon/node_modules/webpack/lib/Compilation.js:1351:37&lt;/span&gt;
&lt;a id="rest_code_4612020ce2194235925698fe5defe31c-22" name="rest_code_4612020ce2194235925698fe5defe31c-22" href="https://blog.bgme.me/posts/2023/how-to-fix-mastodon-assets-precompile-failed/#rest_code_4612020ce2194235925698fe5defe31c-22"&gt;&lt;/a&gt;&lt;span class="go"&gt;    at AsyncSeriesHook.eval [as callAsync] (eval at create (/srv/app/mastodon/mastodon/node_modules/tapable/lib/HookCodeFactory.js:33:10), &amp;lt;anonymous&amp;gt;:6:1)&lt;/span&gt;
&lt;a id="rest_code_4612020ce2194235925698fe5defe31c-23" name="rest_code_4612020ce2194235925698fe5defe31c-23" href="https://blog.bgme.me/posts/2023/how-to-fix-mastodon-assets-precompile-failed/#rest_code_4612020ce2194235925698fe5defe31c-23"&gt;&lt;/a&gt;&lt;span class="go"&gt;    at AsyncSeriesHook.lazyCompileHook (/srv/app/mastodon/mastodon/node_modules/tapable/lib/Hook.js:154:20)&lt;/span&gt;
&lt;a id="rest_code_4612020ce2194235925698fe5defe31c-24" name="rest_code_4612020ce2194235925698fe5defe31c-24" href="https://blog.bgme.me/posts/2023/how-to-fix-mastodon-assets-precompile-failed/#rest_code_4612020ce2194235925698fe5defe31c-24"&gt;&lt;/a&gt;&lt;span class="go"&gt;    at Compilation.seal (/srv/app/mastodon/mastodon/node_modules/webpack/lib/Compilation.js:1342:27)&lt;/span&gt;
&lt;a id="rest_code_4612020ce2194235925698fe5defe31c-25" name="rest_code_4612020ce2194235925698fe5defe31c-25" href="https://blog.bgme.me/posts/2023/how-to-fix-mastodon-assets-precompile-failed/#rest_code_4612020ce2194235925698fe5defe31c-25"&gt;&lt;/a&gt;&lt;span class="go"&gt;    at /srv/app/mastodon/mastodon/node_modules/webpack/lib/Compiler.js:675:18&lt;/span&gt;
&lt;a id="rest_code_4612020ce2194235925698fe5defe31c-26" name="rest_code_4612020ce2194235925698fe5defe31c-26" href="https://blog.bgme.me/posts/2023/how-to-fix-mastodon-assets-precompile-failed/#rest_code_4612020ce2194235925698fe5defe31c-26"&gt;&lt;/a&gt;&lt;span class="go"&gt;    at /srv/app/mastodon/mastodon/node_modules/webpack/lib/Compilation.js:1261:4&lt;/span&gt;
&lt;a id="rest_code_4612020ce2194235925698fe5defe31c-27" name="rest_code_4612020ce2194235925698fe5defe31c-27" href="https://blog.bgme.me/posts/2023/how-to-fix-mastodon-assets-precompile-failed/#rest_code_4612020ce2194235925698fe5defe31c-27"&gt;&lt;/a&gt;&lt;span class="go"&gt;    at AsyncSeriesHook.eval [as callAsync] (eval at create (/srv/app/mastodon/mastodon/node_modules/tapable/lib/HookCodeFactory.js:33:10), &amp;lt;anonymous&amp;gt;:24:1)&lt;/span&gt;
&lt;a id="rest_code_4612020ce2194235925698fe5defe31c-28" name="rest_code_4612020ce2194235925698fe5defe31c-28" href="https://blog.bgme.me/posts/2023/how-to-fix-mastodon-assets-precompile-failed/#rest_code_4612020ce2194235925698fe5defe31c-28"&gt;&lt;/a&gt;&lt;span class="go"&gt;    at AsyncSeriesHook.lazyCompileHook (/srv/app/mastodon/mastodon/node_modules/tapable/lib/Hook.js:154:20)&lt;/span&gt;
&lt;a id="rest_code_4612020ce2194235925698fe5defe31c-29" name="rest_code_4612020ce2194235925698fe5defe31c-29" href="https://blog.bgme.me/posts/2023/how-to-fix-mastodon-assets-precompile-failed/#rest_code_4612020ce2194235925698fe5defe31c-29"&gt;&lt;/a&gt;&lt;span class="go"&gt;    at Compilation.finish (/srv/app/mastodon/mastodon/node_modules/webpack/lib/Compilation.js:1253:28)&lt;/span&gt;
&lt;a id="rest_code_4612020ce2194235925698fe5defe31c-30" name="rest_code_4612020ce2194235925698fe5defe31c-30" href="https://blog.bgme.me/posts/2023/how-to-fix-mastodon-assets-precompile-failed/#rest_code_4612020ce2194235925698fe5defe31c-30"&gt;&lt;/a&gt;&lt;span class="go"&gt;    at /srv/app/mastodon/mastodon/node_modules/webpack/lib/Compiler.js:672:17&lt;/span&gt;
&lt;a id="rest_code_4612020ce2194235925698fe5defe31c-31" name="rest_code_4612020ce2194235925698fe5defe31c-31" href="https://blog.bgme.me/posts/2023/how-to-fix-mastodon-assets-precompile-failed/#rest_code_4612020ce2194235925698fe5defe31c-31"&gt;&lt;/a&gt;&lt;span class="go"&gt;    at eval (eval at create (/srv/app/mastodon/mastodon/node_modules/tapable/lib/HookCodeFactory.js:33:10), &amp;lt;anonymous&amp;gt;:11:1)&lt;/span&gt;
&lt;a id="rest_code_4612020ce2194235925698fe5defe31c-32" name="rest_code_4612020ce2194235925698fe5defe31c-32" href="https://blog.bgme.me/posts/2023/how-to-fix-mastodon-assets-precompile-failed/#rest_code_4612020ce2194235925698fe5defe31c-32"&gt;&lt;/a&gt;&lt;span class="go"&gt;    at /srv/app/mastodon/mastodon/node_modules/webpack/lib/Compilation.js:1185:12&lt;/span&gt;
&lt;a id="rest_code_4612020ce2194235925698fe5defe31c-33" name="rest_code_4612020ce2194235925698fe5defe31c-33" href="https://blog.bgme.me/posts/2023/how-to-fix-mastodon-assets-precompile-failed/#rest_code_4612020ce2194235925698fe5defe31c-33"&gt;&lt;/a&gt;&lt;span class="go"&gt;    at /srv/app/mastodon/mastodon/node_modules/webpack/lib/Compilation.js:1097:9&lt;/span&gt;
&lt;a id="rest_code_4612020ce2194235925698fe5defe31c-34" name="rest_code_4612020ce2194235925698fe5defe31c-34" href="https://blog.bgme.me/posts/2023/how-to-fix-mastodon-assets-precompile-failed/#rest_code_4612020ce2194235925698fe5defe31c-34"&gt;&lt;/a&gt;&lt;span class="go"&gt;    at process.processTicksAndRejections (node:internal/process/task_queues:77:11) {&lt;/span&gt;
&lt;a id="rest_code_4612020ce2194235925698fe5defe31c-35" name="rest_code_4612020ce2194235925698fe5defe31c-35" href="https://blog.bgme.me/posts/2023/how-to-fix-mastodon-assets-precompile-failed/#rest_code_4612020ce2194235925698fe5defe31c-35"&gt;&lt;/a&gt;&lt;span class="go"&gt;opensslErrorStack: [ 'error:03000086:digital envelope routines::initialization error' ],&lt;/span&gt;
&lt;a id="rest_code_4612020ce2194235925698fe5defe31c-36" name="rest_code_4612020ce2194235925698fe5defe31c-36" href="https://blog.bgme.me/posts/2023/how-to-fix-mastodon-assets-precompile-failed/#rest_code_4612020ce2194235925698fe5defe31c-36"&gt;&lt;/a&gt;&lt;span class="go"&gt;library: 'digital envelope routines',&lt;/span&gt;
&lt;a id="rest_code_4612020ce2194235925698fe5defe31c-37" name="rest_code_4612020ce2194235925698fe5defe31c-37" href="https://blog.bgme.me/posts/2023/how-to-fix-mastodon-assets-precompile-failed/#rest_code_4612020ce2194235925698fe5defe31c-37"&gt;&lt;/a&gt;&lt;span class="go"&gt;reason: 'unsupported',&lt;/span&gt;
&lt;a id="rest_code_4612020ce2194235925698fe5defe31c-38" name="rest_code_4612020ce2194235925698fe5defe31c-38" href="https://blog.bgme.me/posts/2023/how-to-fix-mastodon-assets-precompile-failed/#rest_code_4612020ce2194235925698fe5defe31c-38"&gt;&lt;/a&gt;&lt;span class="go"&gt;code: 'ERR_OSSL_EVP_UNSUPPORTED'&lt;/span&gt;
&lt;a id="rest_code_4612020ce2194235925698fe5defe31c-39" name="rest_code_4612020ce2194235925698fe5defe31c-39" href="https://blog.bgme.me/posts/2023/how-to-fix-mastodon-assets-precompile-failed/#rest_code_4612020ce2194235925698fe5defe31c-39"&gt;&lt;/a&gt;&lt;span class="go"&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;解决办法参考&lt;a class="reference external" href="https://stackoverflow.com/a/74726292"&gt;这个 stackoverflow 回答&lt;/a&gt;。&lt;/p&gt;
&lt;p&gt;在运行 &lt;code class="docutils literal"&gt;RAILS_ENV=production bundle exec rails yarn:install assets:precompile&lt;/code&gt; 命令前，先设置 &lt;code class="docutils literal"&gt;&lt;span class="pre"&gt;NODE_OPTIONS=--openssl-legacy-provider&lt;/span&gt;&lt;/code&gt; 环境变量即可。&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code bash"&gt;&lt;a id="rest_code_3c945badd53a4e6ead7549f43af7eae3-1" name="rest_code_3c945badd53a4e6ead7549f43af7eae3-1" href="https://blog.bgme.me/posts/2023/how-to-fix-mastodon-assets-precompile-failed/#rest_code_3c945badd53a4e6ead7549f43af7eae3-1"&gt;&lt;/a&gt;&lt;span class="nb"&gt;export&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;NODE_OPTIONS&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;--openssl-legacy-provider
&lt;/pre&gt;&lt;/div&gt;
&lt;/section&gt;
&lt;section id="ismoduledeclaration-has-been-deprecated-please-migrate-to-isimportorexportdeclaration"&gt;
&lt;h2&gt;&lt;code class="docutils literal"&gt;isModuleDeclaration&lt;/code&gt; has been deprecated, please migrate to &lt;code class="docutils literal"&gt;isImportOrExportDeclaration&lt;/code&gt;&lt;/h2&gt;
&lt;p&gt;编译时，你可能会遇到类似如下面的 &lt;code class="docutils literal"&gt;isModuleDeclaration has been deprecated, please migrate to isImportOrExportDeclaration&lt;/code&gt; 提示。&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code console"&gt;&lt;a id="rest_code_6a0ac96ef2284e6db287460f8ba1b0bb-1" name="rest_code_6a0ac96ef2284e6db287460f8ba1b0bb-1" href="https://blog.bgme.me/posts/2023/how-to-fix-mastodon-assets-precompile-failed/#rest_code_6a0ac96ef2284e6db287460f8ba1b0bb-1"&gt;&lt;/a&gt;&lt;span class="gp"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;export&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;NODE_OPTIONS&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;--openssl-legacy-provider
&lt;a id="rest_code_6a0ac96ef2284e6db287460f8ba1b0bb-2" name="rest_code_6a0ac96ef2284e6db287460f8ba1b0bb-2" href="https://blog.bgme.me/posts/2023/how-to-fix-mastodon-assets-precompile-failed/#rest_code_6a0ac96ef2284e6db287460f8ba1b0bb-2"&gt;&lt;/a&gt;&lt;span class="gp"&gt;$ &lt;/span&gt;&lt;span class="nv"&gt;RAILS_ENV&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;production&lt;span class="w"&gt; &lt;/span&gt;bundle&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;exec&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;rails&lt;span class="w"&gt; &lt;/span&gt;yarn:install&lt;span class="w"&gt; &lt;/span&gt;assets:precompile
&lt;a id="rest_code_6a0ac96ef2284e6db287460f8ba1b0bb-3" name="rest_code_6a0ac96ef2284e6db287460f8ba1b0bb-3" href="https://blog.bgme.me/posts/2023/how-to-fix-mastodon-assets-precompile-failed/#rest_code_6a0ac96ef2284e6db287460f8ba1b0bb-3"&gt;&lt;/a&gt;&lt;span class="go"&gt;yarn install v1.22.19&lt;/span&gt;
&lt;a id="rest_code_6a0ac96ef2284e6db287460f8ba1b0bb-4" name="rest_code_6a0ac96ef2284e6db287460f8ba1b0bb-4" href="https://blog.bgme.me/posts/2023/how-to-fix-mastodon-assets-precompile-failed/#rest_code_6a0ac96ef2284e6db287460f8ba1b0bb-4"&gt;&lt;/a&gt;&lt;span class="go"&gt;[1/5] Resolving packages...&lt;/span&gt;
&lt;a id="rest_code_6a0ac96ef2284e6db287460f8ba1b0bb-5" name="rest_code_6a0ac96ef2284e6db287460f8ba1b0bb-5" href="https://blog.bgme.me/posts/2023/how-to-fix-mastodon-assets-precompile-failed/#rest_code_6a0ac96ef2284e6db287460f8ba1b0bb-5"&gt;&lt;/a&gt;&lt;span class="go"&gt;success Already up-to-date.&lt;/span&gt;
&lt;a id="rest_code_6a0ac96ef2284e6db287460f8ba1b0bb-6" name="rest_code_6a0ac96ef2284e6db287460f8ba1b0bb-6" href="https://blog.bgme.me/posts/2023/how-to-fix-mastodon-assets-precompile-failed/#rest_code_6a0ac96ef2284e6db287460f8ba1b0bb-6"&gt;&lt;/a&gt;&lt;span class="go"&gt;Done in 0.50s.&lt;/span&gt;
&lt;a id="rest_code_6a0ac96ef2284e6db287460f8ba1b0bb-7" name="rest_code_6a0ac96ef2284e6db287460f8ba1b0bb-7" href="https://blog.bgme.me/posts/2023/how-to-fix-mastodon-assets-precompile-failed/#rest_code_6a0ac96ef2284e6db287460f8ba1b0bb-7"&gt;&lt;/a&gt;&lt;span class="go"&gt;I, [2023-08-31T17:34:06.971888 #40650]  INFO -- : Writing /srv/app/mastodon/mastodon/public/assets/doorkeeper/admin/application-a644908e7bab54fb749be0f59fb64a7480bbf9c4c2b79d4a65791cb7ab4d8730.css&lt;/span&gt;
&lt;a id="rest_code_6a0ac96ef2284e6db287460f8ba1b0bb-8" name="rest_code_6a0ac96ef2284e6db287460f8ba1b0bb-8" href="https://blog.bgme.me/posts/2023/how-to-fix-mastodon-assets-precompile-failed/#rest_code_6a0ac96ef2284e6db287460f8ba1b0bb-8"&gt;&lt;/a&gt;&lt;span class="go"&gt;I, [2023-08-31T17:34:06.972252 #40650]  INFO -- : Writing /srv/app/mastodon/mastodon/public/assets/doorkeeper/admin/application-a644908e7bab54fb749be0f59fb64a7480bbf9c4c2b79d4a65791cb7ab4d8730.css.gz&lt;/span&gt;
&lt;a id="rest_code_6a0ac96ef2284e6db287460f8ba1b0bb-9" name="rest_code_6a0ac96ef2284e6db287460f8ba1b0bb-9" href="https://blog.bgme.me/posts/2023/how-to-fix-mastodon-assets-precompile-failed/#rest_code_6a0ac96ef2284e6db287460f8ba1b0bb-9"&gt;&lt;/a&gt;&lt;span class="go"&gt;I, [2023-08-31T17:34:06.973952 #40650]  INFO -- : Writing /srv/app/mastodon/mastodon/public/assets/doorkeeper/application-c93dac2ad9d65e3393e0e2c958481e86ef7a5e5b0f6ce406842a7b99b25a4850.css&lt;/span&gt;
&lt;a id="rest_code_6a0ac96ef2284e6db287460f8ba1b0bb-10" name="rest_code_6a0ac96ef2284e6db287460f8ba1b0bb-10" href="https://blog.bgme.me/posts/2023/how-to-fix-mastodon-assets-precompile-failed/#rest_code_6a0ac96ef2284e6db287460f8ba1b0bb-10"&gt;&lt;/a&gt;&lt;span class="go"&gt;I, [2023-08-31T17:34:06.974013 #40650]  INFO -- : Writing /srv/app/mastodon/mastodon/public/assets/doorkeeper/application-c93dac2ad9d65e3393e0e2c958481e86ef7a5e5b0f6ce406842a7b99b25a4850.css.gz&lt;/span&gt;
&lt;a id="rest_code_6a0ac96ef2284e6db287460f8ba1b0bb-11" name="rest_code_6a0ac96ef2284e6db287460f8ba1b0bb-11" href="https://blog.bgme.me/posts/2023/how-to-fix-mastodon-assets-precompile-failed/#rest_code_6a0ac96ef2284e6db287460f8ba1b0bb-11"&gt;&lt;/a&gt;&lt;span class="go"&gt;I, [2023-08-31T17:34:06.975223 #40650]  INFO -- : Writing /srv/app/mastodon/mastodon/public/assets/pghero/favicon-db10337a56c45eb43c22ff5019546b520fa22c7281d4d385f235cbca67ed26bb.png&lt;/span&gt;
&lt;a id="rest_code_6a0ac96ef2284e6db287460f8ba1b0bb-12" name="rest_code_6a0ac96ef2284e6db287460f8ba1b0bb-12" href="https://blog.bgme.me/posts/2023/how-to-fix-mastodon-assets-precompile-failed/#rest_code_6a0ac96ef2284e6db287460f8ba1b0bb-12"&gt;&lt;/a&gt;&lt;span class="go"&gt;I, [2023-08-31T17:34:06.982815 #40650]  INFO -- : Writing /srv/app/mastodon/mastodon/public/assets/pghero/application-fc5c893e805df52338bef3bda5a5431f74f1401da68e4f0381ac9ecb7a801e1a.js&lt;/span&gt;
&lt;a id="rest_code_6a0ac96ef2284e6db287460f8ba1b0bb-13" name="rest_code_6a0ac96ef2284e6db287460f8ba1b0bb-13" href="https://blog.bgme.me/posts/2023/how-to-fix-mastodon-assets-precompile-failed/#rest_code_6a0ac96ef2284e6db287460f8ba1b0bb-13"&gt;&lt;/a&gt;&lt;span class="go"&gt;I, [2023-08-31T17:34:06.982956 #40650]  INFO -- : Writing /srv/app/mastodon/mastodon/public/assets/pghero/application-fc5c893e805df52338bef3bda5a5431f74f1401da68e4f0381ac9ecb7a801e1a.js.gz&lt;/span&gt;
&lt;a id="rest_code_6a0ac96ef2284e6db287460f8ba1b0bb-14" name="rest_code_6a0ac96ef2284e6db287460f8ba1b0bb-14" href="https://blog.bgme.me/posts/2023/how-to-fix-mastodon-assets-precompile-failed/#rest_code_6a0ac96ef2284e6db287460f8ba1b0bb-14"&gt;&lt;/a&gt;&lt;span class="go"&gt;I, [2023-08-31T17:34:06.984171 #40650]  INFO -- : Writing /srv/app/mastodon/mastodon/public/assets/pghero/application-29fa393e673685cdbf2fb2b637098a15b988605f46bfa962f6e0cb94d15bc567.css&lt;/span&gt;
&lt;a id="rest_code_6a0ac96ef2284e6db287460f8ba1b0bb-15" name="rest_code_6a0ac96ef2284e6db287460f8ba1b0bb-15" href="https://blog.bgme.me/posts/2023/how-to-fix-mastodon-assets-precompile-failed/#rest_code_6a0ac96ef2284e6db287460f8ba1b0bb-15"&gt;&lt;/a&gt;&lt;span class="go"&gt;I, [2023-08-31T17:34:06.984319 #40650]  INFO -- : Writing /srv/app/mastodon/mastodon/public/assets/pghero/application-29fa393e673685cdbf2fb2b637098a15b988605f46bfa962f6e0cb94d15bc567.css.gz&lt;/span&gt;
&lt;a id="rest_code_6a0ac96ef2284e6db287460f8ba1b0bb-16" name="rest_code_6a0ac96ef2284e6db287460f8ba1b0bb-16" href="https://blog.bgme.me/posts/2023/how-to-fix-mastodon-assets-precompile-failed/#rest_code_6a0ac96ef2284e6db287460f8ba1b0bb-16"&gt;&lt;/a&gt;&lt;span class="go"&gt;Compiling...&lt;/span&gt;
&lt;a id="rest_code_6a0ac96ef2284e6db287460f8ba1b0bb-17" name="rest_code_6a0ac96ef2284e6db287460f8ba1b0bb-17" href="https://blog.bgme.me/posts/2023/how-to-fix-mastodon-assets-precompile-failed/#rest_code_6a0ac96ef2284e6db287460f8ba1b0bb-17"&gt;&lt;/a&gt;&lt;span class="go"&gt;Compiled all packs in /srv/app/mastodon/mastodon/public/packs&lt;/span&gt;
&lt;a id="rest_code_6a0ac96ef2284e6db287460f8ba1b0bb-18" name="rest_code_6a0ac96ef2284e6db287460f8ba1b0bb-18" href="https://blog.bgme.me/posts/2023/how-to-fix-mastodon-assets-precompile-failed/#rest_code_6a0ac96ef2284e6db287460f8ba1b0bb-18"&gt;&lt;/a&gt;&lt;span class="go"&gt;`isModuleDeclaration` has been deprecated, please migrate to `isImportOrExportDeclaration`&lt;/span&gt;
&lt;a id="rest_code_6a0ac96ef2284e6db287460f8ba1b0bb-19" name="rest_code_6a0ac96ef2284e6db287460f8ba1b0bb-19" href="https://blog.bgme.me/posts/2023/how-to-fix-mastodon-assets-precompile-failed/#rest_code_6a0ac96ef2284e6db287460f8ba1b0bb-19"&gt;&lt;/a&gt;&lt;span class="go"&gt;    at isModuleDeclaration (/srv/app/mastodon/mastodon/node_modules/babel-plugin-lodash/node_modules/@babel/types/lib/validators/generated/index.js:2740:35)&lt;/span&gt;
&lt;a id="rest_code_6a0ac96ef2284e6db287460f8ba1b0bb-20" name="rest_code_6a0ac96ef2284e6db287460f8ba1b0bb-20" href="https://blog.bgme.me/posts/2023/how-to-fix-mastodon-assets-precompile-failed/#rest_code_6a0ac96ef2284e6db287460f8ba1b0bb-20"&gt;&lt;/a&gt;&lt;span class="go"&gt;    at PluginPass.Program (/srv/app/mastodon/mastodon/node_modules/babel-plugin-lodash/lib/index.js:102:44)&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;这只是编译警告，可以怱略不管。&lt;/p&gt;
&lt;p&gt;如果一定要消除的话，可以参考： &lt;a class="reference external" href="https://github.com/lodash/babel-plugin-lodash/issues/259#issuecomment-1438592335"&gt;https://github.com/lodash/babel-plugin-lodash/issues/259#issuecomment-1438592335&lt;/a&gt;&lt;/p&gt;
&lt;/section&gt;
&lt;section id="section-1"&gt;
&lt;h2&gt;清理编译失败产物&lt;/h2&gt;
&lt;p&gt;对于新版 Node.js 编译时会遇上 &lt;code class="docutils literal"&gt;ERR_OSSL_EVP_UNSUPPORTED&lt;/code&gt; 错误，进而编译失败。&lt;/p&gt;
&lt;p&gt;当你添加上环境变量，再次编译时，有可能会遇上 &lt;code class="docutils literal"&gt;Everything's &lt;span class="pre"&gt;up-to-date.&lt;/span&gt; Nothing to do&lt;/code&gt; 。&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code console"&gt;&lt;a id="rest_code_300397ee11994b428557bb8abee532c0-1" name="rest_code_300397ee11994b428557bb8abee532c0-1" href="https://blog.bgme.me/posts/2023/how-to-fix-mastodon-assets-precompile-failed/#rest_code_300397ee11994b428557bb8abee532c0-1"&gt;&lt;/a&gt;&lt;span class="gp"&gt;$ &lt;/span&gt;&lt;span class="nv"&gt;RAILS_ENV&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;production&lt;span class="w"&gt; &lt;/span&gt;bundle&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;exec&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;rails&lt;span class="w"&gt; &lt;/span&gt;yarn:install&lt;span class="w"&gt; &lt;/span&gt;assets:precompile
&lt;a id="rest_code_300397ee11994b428557bb8abee532c0-2" name="rest_code_300397ee11994b428557bb8abee532c0-2" href="https://blog.bgme.me/posts/2023/how-to-fix-mastodon-assets-precompile-failed/#rest_code_300397ee11994b428557bb8abee532c0-2"&gt;&lt;/a&gt;&lt;span class="go"&gt;yarn install v1.22.19&lt;/span&gt;
&lt;a id="rest_code_300397ee11994b428557bb8abee532c0-3" name="rest_code_300397ee11994b428557bb8abee532c0-3" href="https://blog.bgme.me/posts/2023/how-to-fix-mastodon-assets-precompile-failed/#rest_code_300397ee11994b428557bb8abee532c0-3"&gt;&lt;/a&gt;&lt;span class="go"&gt;[1/5] Resolving packages...&lt;/span&gt;
&lt;a id="rest_code_300397ee11994b428557bb8abee532c0-4" name="rest_code_300397ee11994b428557bb8abee532c0-4" href="https://blog.bgme.me/posts/2023/how-to-fix-mastodon-assets-precompile-failed/#rest_code_300397ee11994b428557bb8abee532c0-4"&gt;&lt;/a&gt;&lt;span class="go"&gt;success Already up-to-date.&lt;/span&gt;
&lt;a id="rest_code_300397ee11994b428557bb8abee532c0-5" name="rest_code_300397ee11994b428557bb8abee532c0-5" href="https://blog.bgme.me/posts/2023/how-to-fix-mastodon-assets-precompile-failed/#rest_code_300397ee11994b428557bb8abee532c0-5"&gt;&lt;/a&gt;&lt;span class="go"&gt;Done in 0.48s.&lt;/span&gt;
&lt;a id="rest_code_300397ee11994b428557bb8abee532c0-6" name="rest_code_300397ee11994b428557bb8abee532c0-6" href="https://blog.bgme.me/posts/2023/how-to-fix-mastodon-assets-precompile-failed/#rest_code_300397ee11994b428557bb8abee532c0-6"&gt;&lt;/a&gt;&lt;span class="go"&gt;Everything's up-to-date. Nothing to do&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;这时可以运行如下命令，删去之前编译产物强制重新编译。&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code bash"&gt;&lt;a id="rest_code_b94f89112bb24e82a92feeaf04bb51b5-1" name="rest_code_b94f89112bb24e82a92feeaf04bb51b5-1" href="https://blog.bgme.me/posts/2023/how-to-fix-mastodon-assets-precompile-failed/#rest_code_b94f89112bb24e82a92feeaf04bb51b5-1"&gt;&lt;/a&gt;rm&lt;span class="w"&gt; &lt;/span&gt;-r&lt;span class="w"&gt; &lt;/span&gt;build&lt;span class="w"&gt; &lt;/span&gt;public/system&lt;span class="w"&gt; &lt;/span&gt;public/assets&lt;span class="w"&gt; &lt;/span&gt;public/packs&lt;span class="w"&gt; &lt;/span&gt;public/packs-test
&lt;/pre&gt;&lt;/div&gt;
&lt;/section&gt;</description><category>Mastodon</category><guid>e653137f-bf48-476b-b2b3-5db7d84acdf9</guid><pubDate>Thu, 31 Aug 2023 08:56:18 GMT</pubDate></item><item><title>How to clean up the synapse database</title><link>https://blog.bgme.me/posts/2023/how-to-clean-up-the-synapse-database/</link><dc:creator>无影人</dc:creator><description>&lt;section id="step-1-delete-unused-large-rooms"&gt;
&lt;h2&gt;Step 1: delete unused large rooms&lt;/h2&gt;
&lt;section id="step-1-1-find-large-rooms"&gt;
&lt;h3&gt;Step 1.1: Find large rooms&lt;/h3&gt;
&lt;div class="code"&gt;&lt;pre class="code sql"&gt;&lt;a id="rest_code_d2e579f01f5e4f3a988cc2464c019055-1" name="rest_code_d2e579f01f5e4f3a988cc2464c019055-1" href="https://blog.bgme.me/posts/2023/how-to-clean-up-the-synapse-database/#rest_code_d2e579f01f5e4f3a988cc2464c019055-1"&gt;&lt;/a&gt;&lt;span class="k"&gt;SELECT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;room_id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;current_state_events&lt;/span&gt;
&lt;a id="rest_code_d2e579f01f5e4f3a988cc2464c019055-2" name="rest_code_d2e579f01f5e4f3a988cc2464c019055-2" href="https://blog.bgme.me/posts/2023/how-to-clean-up-the-synapse-database/#rest_code_d2e579f01f5e4f3a988cc2464c019055-2"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;FROM&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;room_stats_current&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt;
&lt;a id="rest_code_d2e579f01f5e4f3a988cc2464c019055-3" name="rest_code_d2e579f01f5e4f3a988cc2464c019055-3" href="https://blog.bgme.me/posts/2023/how-to-clean-up-the-synapse-database/#rest_code_d2e579f01f5e4f3a988cc2464c019055-3"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;LEFT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;JOIN&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;room_stats_state&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;USING&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;room_id&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;a id="rest_code_d2e579f01f5e4f3a988cc2464c019055-4" name="rest_code_d2e579f01f5e4f3a988cc2464c019055-4" href="https://blog.bgme.me/posts/2023/how-to-clean-up-the-synapse-database/#rest_code_d2e579f01f5e4f3a988cc2464c019055-4"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;ORDER&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;BY&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;current_state_events&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;DESC&lt;/span&gt;
&lt;a id="rest_code_d2e579f01f5e4f3a988cc2464c019055-5" name="rest_code_d2e579f01f5e4f3a988cc2464c019055-5" href="https://blog.bgme.me/posts/2023/how-to-clean-up-the-synapse-database/#rest_code_d2e579f01f5e4f3a988cc2464c019055-5"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;LIMIT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;div class="code"&gt;&lt;pre class="code sql"&gt;&lt;a id="rest_code_97f4a26c2f654ae99bfc3e4c80d19d54-1" name="rest_code_97f4a26c2f654ae99bfc3e4c80d19d54-1" href="https://blog.bgme.me/posts/2023/how-to-clean-up-the-synapse-database/#rest_code_97f4a26c2f654ae99bfc3e4c80d19d54-1"&gt;&lt;/a&gt;&lt;span class="k"&gt;SELECT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rss&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;room_id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;COUNT&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;room_id&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;a id="rest_code_97f4a26c2f654ae99bfc3e4c80d19d54-2" name="rest_code_97f4a26c2f654ae99bfc3e4c80d19d54-2" href="https://blog.bgme.me/posts/2023/how-to-clean-up-the-synapse-database/#rest_code_97f4a26c2f654ae99bfc3e4c80d19d54-2"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;FROM&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;state_groups_state&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt;
&lt;a id="rest_code_97f4a26c2f654ae99bfc3e4c80d19d54-3" name="rest_code_97f4a26c2f654ae99bfc3e4c80d19d54-3" href="https://blog.bgme.me/posts/2023/how-to-clean-up-the-synapse-database/#rest_code_97f4a26c2f654ae99bfc3e4c80d19d54-3"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;LEFT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;JOIN&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;room_stats_state&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rss&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;USING&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;room_id&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;a id="rest_code_97f4a26c2f654ae99bfc3e4c80d19d54-4" name="rest_code_97f4a26c2f654ae99bfc3e4c80d19d54-4" href="https://blog.bgme.me/posts/2023/how-to-clean-up-the-synapse-database/#rest_code_97f4a26c2f654ae99bfc3e4c80d19d54-4"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;GROUP&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;BY&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;room_id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rss&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;
&lt;a id="rest_code_97f4a26c2f654ae99bfc3e4c80d19d54-5" name="rest_code_97f4a26c2f654ae99bfc3e4c80d19d54-5" href="https://blog.bgme.me/posts/2023/how-to-clean-up-the-synapse-database/#rest_code_97f4a26c2f654ae99bfc3e4c80d19d54-5"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;ORDER&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;BY&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;COUNT&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;room_id&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;DESC&lt;/span&gt;
&lt;a id="rest_code_97f4a26c2f654ae99bfc3e4c80d19d54-6" name="rest_code_97f4a26c2f654ae99bfc3e4c80d19d54-6" href="https://blog.bgme.me/posts/2023/how-to-clean-up-the-synapse-database/#rest_code_97f4a26c2f654ae99bfc3e4c80d19d54-6"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;LIMIT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;a class="reference external" href="https://matrix-org.github.io/synapse/latest/usage/administration/useful_sql_for_admins.html#show-top-20-larger-rooms-by-state-events-count"&gt;https://matrix-org.github.io/synapse/latest/usage/administration/useful_sql_for_admins.html#show-top-20-larger-rooms-by-state-events-count&lt;/a&gt;&lt;/p&gt;
&lt;/section&gt;
&lt;section id="step-1-2-use-admin-api-purge-the-unused-large-rooms"&gt;
&lt;h3&gt;Step 1.2: Use Admin API Purge the unused large rooms&lt;/h3&gt;
&lt;p&gt;&lt;a class="reference external" href="https://matrix-org.github.io/synapse/latest/admin_api/rooms.html#version-2-new-version"&gt;https://matrix-org.github.io/synapse/latest/admin_api/rooms.html#version-2-new-version&lt;/a&gt;&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code bash"&gt;&lt;a id="rest_code_6ab21fb3308143bcabf2c8b9b2d9e1f6-1" name="rest_code_6ab21fb3308143bcabf2c8b9b2d9e1f6-1" href="https://blog.bgme.me/posts/2023/how-to-clean-up-the-synapse-database/#rest_code_6ab21fb3308143bcabf2c8b9b2d9e1f6-1"&gt;&lt;/a&gt;curl&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"http://localhost:8008/_synapse/admin/v1/rooms/&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;ROOMID&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;-X&lt;span class="w"&gt; &lt;/span&gt;DELETE&lt;span class="w"&gt; &lt;/span&gt;-H&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;'Accept: application/json'&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;-H&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;'Referer: http://localhost:8080/'&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;-H&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"authorization: Bearer &lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;TOKEN&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;--data&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;'{ "purge": true, "message": "Sorry - kicking you out to clean up the database" }'&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/section&gt;
&lt;section id="step-1-3-delete-orphan-state-groups-state-and-state-groups"&gt;
&lt;h3&gt;Step 1.3: Delete orphan &lt;code class="docutils literal"&gt;state_groups_state&lt;/code&gt; and &lt;code class="docutils literal"&gt;state_groups&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;After using the Admin API to purge the rooms, but only removes the data in the &lt;code class="docutils literal"&gt;events&lt;/code&gt; table, and there are still a lot of related room data in the &lt;code class="docutils literal"&gt;state_groups_state&lt;/code&gt; and &lt;code class="docutils literal"&gt;state_groups&lt;/code&gt; tables (the main space occupation).
This may be a synapse bug.&lt;/p&gt;
&lt;p&gt;So you need to remove them manually.&lt;/p&gt;
&lt;p&gt;&lt;a class="reference external" href="https://github.com/matrix-org/synapse/issues/12821#issuecomment-1295773504"&gt;https://github.com/matrix-org/synapse/issues/12821#issuecomment-1295773504&lt;/a&gt;&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code sql"&gt;&lt;a id="rest_code_012a584b729e451395b99366c4b9f09b-1" name="rest_code_012a584b729e451395b99366c4b9f09b-1" href="https://blog.bgme.me/posts/2023/how-to-clean-up-the-synapse-database/#rest_code_012a584b729e451395b99366c4b9f09b-1"&gt;&lt;/a&gt;&lt;span class="k"&gt;DELETE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;FROM&lt;/span&gt;
&lt;a id="rest_code_012a584b729e451395b99366c4b9f09b-2" name="rest_code_012a584b729e451395b99366c4b9f09b-2" href="https://blog.bgme.me/posts/2023/how-to-clean-up-the-synapse-database/#rest_code_012a584b729e451395b99366c4b9f09b-2"&gt;&lt;/a&gt;&lt;span class="n"&gt;state_groups_state&lt;/span&gt;
&lt;a id="rest_code_012a584b729e451395b99366c4b9f09b-3" name="rest_code_012a584b729e451395b99366c4b9f09b-3" href="https://blog.bgme.me/posts/2023/how-to-clean-up-the-synapse-database/#rest_code_012a584b729e451395b99366c4b9f09b-3"&gt;&lt;/a&gt;&lt;span class="k"&gt;WHERE&lt;/span&gt;
&lt;a id="rest_code_012a584b729e451395b99366c4b9f09b-4" name="rest_code_012a584b729e451395b99366c4b9f09b-4" href="https://blog.bgme.me/posts/2023/how-to-clean-up-the-synapse-database/#rest_code_012a584b729e451395b99366c4b9f09b-4"&gt;&lt;/a&gt;&lt;span class="n"&gt;room_id&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;IN&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;a id="rest_code_012a584b729e451395b99366c4b9f09b-5" name="rest_code_012a584b729e451395b99366c4b9f09b-5" href="https://blog.bgme.me/posts/2023/how-to-clean-up-the-synapse-database/#rest_code_012a584b729e451395b99366c4b9f09b-5"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;SELECT&lt;/span&gt;
&lt;a id="rest_code_012a584b729e451395b99366c4b9f09b-6" name="rest_code_012a584b729e451395b99366c4b9f09b-6" href="https://blog.bgme.me/posts/2023/how-to-clean-up-the-synapse-database/#rest_code_012a584b729e451395b99366c4b9f09b-6"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;DISTINCT&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;state_groups&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;room_id&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;AS&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;room_id_gone&lt;/span&gt;
&lt;a id="rest_code_012a584b729e451395b99366c4b9f09b-7" name="rest_code_012a584b729e451395b99366c4b9f09b-7" href="https://blog.bgme.me/posts/2023/how-to-clean-up-the-synapse-database/#rest_code_012a584b729e451395b99366c4b9f09b-7"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;FROM&lt;/span&gt;
&lt;a id="rest_code_012a584b729e451395b99366c4b9f09b-8" name="rest_code_012a584b729e451395b99366c4b9f09b-8" href="https://blog.bgme.me/posts/2023/how-to-clean-up-the-synapse-database/#rest_code_012a584b729e451395b99366c4b9f09b-8"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;state_groups&lt;/span&gt;
&lt;a id="rest_code_012a584b729e451395b99366c4b9f09b-9" name="rest_code_012a584b729e451395b99366c4b9f09b-9" href="https://blog.bgme.me/posts/2023/how-to-clean-up-the-synapse-database/#rest_code_012a584b729e451395b99366c4b9f09b-9"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;LEFT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;JOIN&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;events&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;USING&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;room_id&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;a id="rest_code_012a584b729e451395b99366c4b9f09b-10" name="rest_code_012a584b729e451395b99366c4b9f09b-10" href="https://blog.bgme.me/posts/2023/how-to-clean-up-the-synapse-database/#rest_code_012a584b729e451395b99366c4b9f09b-10"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;WHERE&lt;/span&gt;
&lt;a id="rest_code_012a584b729e451395b99366c4b9f09b-11" name="rest_code_012a584b729e451395b99366c4b9f09b-11" href="https://blog.bgme.me/posts/2023/how-to-clean-up-the-synapse-database/#rest_code_012a584b729e451395b99366c4b9f09b-11"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;events&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;room_id&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;IS&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;NULL&lt;/span&gt;
&lt;a id="rest_code_012a584b729e451395b99366c4b9f09b-12" name="rest_code_012a584b729e451395b99366c4b9f09b-12" href="https://blog.bgme.me/posts/2023/how-to-clean-up-the-synapse-database/#rest_code_012a584b729e451395b99366c4b9f09b-12"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;GROUP&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;BY&lt;/span&gt;
&lt;a id="rest_code_012a584b729e451395b99366c4b9f09b-13" name="rest_code_012a584b729e451395b99366c4b9f09b-13" href="https://blog.bgme.me/posts/2023/how-to-clean-up-the-synapse-database/#rest_code_012a584b729e451395b99366c4b9f09b-13"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;room_id_gone&lt;/span&gt;
&lt;a id="rest_code_012a584b729e451395b99366c4b9f09b-14" name="rest_code_012a584b729e451395b99366c4b9f09b-14" href="https://blog.bgme.me/posts/2023/how-to-clean-up-the-synapse-database/#rest_code_012a584b729e451395b99366c4b9f09b-14"&gt;&lt;/a&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;div class="code"&gt;&lt;pre class="code sql"&gt;&lt;a id="rest_code_ff3db68906c24d7597e1ee21e8b87eab-1" name="rest_code_ff3db68906c24d7597e1ee21e8b87eab-1" href="https://blog.bgme.me/posts/2023/how-to-clean-up-the-synapse-database/#rest_code_ff3db68906c24d7597e1ee21e8b87eab-1"&gt;&lt;/a&gt;&lt;span class="k"&gt;DELETE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;FROM&lt;/span&gt;
&lt;a id="rest_code_ff3db68906c24d7597e1ee21e8b87eab-2" name="rest_code_ff3db68906c24d7597e1ee21e8b87eab-2" href="https://blog.bgme.me/posts/2023/how-to-clean-up-the-synapse-database/#rest_code_ff3db68906c24d7597e1ee21e8b87eab-2"&gt;&lt;/a&gt;&lt;span class="n"&gt;state_groups&lt;/span&gt;
&lt;a id="rest_code_ff3db68906c24d7597e1ee21e8b87eab-3" name="rest_code_ff3db68906c24d7597e1ee21e8b87eab-3" href="https://blog.bgme.me/posts/2023/how-to-clean-up-the-synapse-database/#rest_code_ff3db68906c24d7597e1ee21e8b87eab-3"&gt;&lt;/a&gt;&lt;span class="k"&gt;WHERE&lt;/span&gt;
&lt;a id="rest_code_ff3db68906c24d7597e1ee21e8b87eab-4" name="rest_code_ff3db68906c24d7597e1ee21e8b87eab-4" href="https://blog.bgme.me/posts/2023/how-to-clean-up-the-synapse-database/#rest_code_ff3db68906c24d7597e1ee21e8b87eab-4"&gt;&lt;/a&gt;&lt;span class="n"&gt;room_id&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;IN&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;a id="rest_code_ff3db68906c24d7597e1ee21e8b87eab-5" name="rest_code_ff3db68906c24d7597e1ee21e8b87eab-5" href="https://blog.bgme.me/posts/2023/how-to-clean-up-the-synapse-database/#rest_code_ff3db68906c24d7597e1ee21e8b87eab-5"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;SELECT&lt;/span&gt;
&lt;a id="rest_code_ff3db68906c24d7597e1ee21e8b87eab-6" name="rest_code_ff3db68906c24d7597e1ee21e8b87eab-6" href="https://blog.bgme.me/posts/2023/how-to-clean-up-the-synapse-database/#rest_code_ff3db68906c24d7597e1ee21e8b87eab-6"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;DISTINCT&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;state_groups&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;room_id&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;AS&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;room_id_gone&lt;/span&gt;
&lt;a id="rest_code_ff3db68906c24d7597e1ee21e8b87eab-7" name="rest_code_ff3db68906c24d7597e1ee21e8b87eab-7" href="https://blog.bgme.me/posts/2023/how-to-clean-up-the-synapse-database/#rest_code_ff3db68906c24d7597e1ee21e8b87eab-7"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;FROM&lt;/span&gt;
&lt;a id="rest_code_ff3db68906c24d7597e1ee21e8b87eab-8" name="rest_code_ff3db68906c24d7597e1ee21e8b87eab-8" href="https://blog.bgme.me/posts/2023/how-to-clean-up-the-synapse-database/#rest_code_ff3db68906c24d7597e1ee21e8b87eab-8"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;state_groups&lt;/span&gt;
&lt;a id="rest_code_ff3db68906c24d7597e1ee21e8b87eab-9" name="rest_code_ff3db68906c24d7597e1ee21e8b87eab-9" href="https://blog.bgme.me/posts/2023/how-to-clean-up-the-synapse-database/#rest_code_ff3db68906c24d7597e1ee21e8b87eab-9"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;LEFT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;JOIN&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;events&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;USING&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;room_id&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;a id="rest_code_ff3db68906c24d7597e1ee21e8b87eab-10" name="rest_code_ff3db68906c24d7597e1ee21e8b87eab-10" href="https://blog.bgme.me/posts/2023/how-to-clean-up-the-synapse-database/#rest_code_ff3db68906c24d7597e1ee21e8b87eab-10"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;WHERE&lt;/span&gt;
&lt;a id="rest_code_ff3db68906c24d7597e1ee21e8b87eab-11" name="rest_code_ff3db68906c24d7597e1ee21e8b87eab-11" href="https://blog.bgme.me/posts/2023/how-to-clean-up-the-synapse-database/#rest_code_ff3db68906c24d7597e1ee21e8b87eab-11"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;events&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;room_id&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;IS&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;NULL&lt;/span&gt;
&lt;a id="rest_code_ff3db68906c24d7597e1ee21e8b87eab-12" name="rest_code_ff3db68906c24d7597e1ee21e8b87eab-12" href="https://blog.bgme.me/posts/2023/how-to-clean-up-the-synapse-database/#rest_code_ff3db68906c24d7597e1ee21e8b87eab-12"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;GROUP&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;BY&lt;/span&gt;
&lt;a id="rest_code_ff3db68906c24d7597e1ee21e8b87eab-13" name="rest_code_ff3db68906c24d7597e1ee21e8b87eab-13" href="https://blog.bgme.me/posts/2023/how-to-clean-up-the-synapse-database/#rest_code_ff3db68906c24d7597e1ee21e8b87eab-13"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;room_id_gone&lt;/span&gt;
&lt;a id="rest_code_ff3db68906c24d7597e1ee21e8b87eab-14" name="rest_code_ff3db68906c24d7597e1ee21e8b87eab-14" href="https://blog.bgme.me/posts/2023/how-to-clean-up-the-synapse-database/#rest_code_ff3db68906c24d7597e1ee21e8b87eab-14"&gt;&lt;/a&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/section&gt;
&lt;/section&gt;
&lt;section id="step-2-run-synapse-auto-compressor"&gt;
&lt;h2&gt;Step 2: Run synapse_auto_compressor&lt;/h2&gt;
&lt;p&gt;&lt;a class="reference external" href="https://github.com/matrix-org/rust-synapse-compress-state"&gt;https://github.com/matrix-org/rust-synapse-compress-state&lt;/a&gt;&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code bash"&gt;&lt;a id="rest_code_25ba0031e2154631b390ec6e6783ba23-1" name="rest_code_25ba0031e2154631b390ec6e6783ba23-1" href="https://blog.bgme.me/posts/2023/how-to-clean-up-the-synapse-database/#rest_code_25ba0031e2154631b390ec6e6783ba23-1"&gt;&lt;/a&gt;git&lt;span class="w"&gt; &lt;/span&gt;clone&lt;span class="w"&gt; &lt;/span&gt;https://github.com/matrix-org/rust-synapse-compress-state.git
&lt;a id="rest_code_25ba0031e2154631b390ec6e6783ba23-2" name="rest_code_25ba0031e2154631b390ec6e6783ba23-2" href="https://blog.bgme.me/posts/2023/how-to-clean-up-the-synapse-database/#rest_code_25ba0031e2154631b390ec6e6783ba23-2"&gt;&lt;/a&gt;
&lt;a id="rest_code_25ba0031e2154631b390ec6e6783ba23-3" name="rest_code_25ba0031e2154631b390ec6e6783ba23-3" href="https://blog.bgme.me/posts/2023/how-to-clean-up-the-synapse-database/#rest_code_25ba0031e2154631b390ec6e6783ba23-3"&gt;&lt;/a&gt;&lt;span class="nb"&gt;cd&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;rust-synapse-compress-state/
&lt;a id="rest_code_25ba0031e2154631b390ec6e6783ba23-4" name="rest_code_25ba0031e2154631b390ec6e6783ba23-4" href="https://blog.bgme.me/posts/2023/how-to-clean-up-the-synapse-database/#rest_code_25ba0031e2154631b390ec6e6783ba23-4"&gt;&lt;/a&gt;cargo&lt;span class="w"&gt; &lt;/span&gt;build&lt;span class="w"&gt; &lt;/span&gt;-r
&lt;a id="rest_code_25ba0031e2154631b390ec6e6783ba23-5" name="rest_code_25ba0031e2154631b390ec6e6783ba23-5" href="https://blog.bgme.me/posts/2023/how-to-clean-up-the-synapse-database/#rest_code_25ba0031e2154631b390ec6e6783ba23-5"&gt;&lt;/a&gt;
&lt;a id="rest_code_25ba0031e2154631b390ec6e6783ba23-6" name="rest_code_25ba0031e2154631b390ec6e6783ba23-6" href="https://blog.bgme.me/posts/2023/how-to-clean-up-the-synapse-database/#rest_code_25ba0031e2154631b390ec6e6783ba23-6"&gt;&lt;/a&gt;&lt;span class="nb"&gt;cd&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;synapse_auto_compressor/
&lt;a id="rest_code_25ba0031e2154631b390ec6e6783ba23-7" name="rest_code_25ba0031e2154631b390ec6e6783ba23-7" href="https://blog.bgme.me/posts/2023/how-to-clean-up-the-synapse-database/#rest_code_25ba0031e2154631b390ec6e6783ba23-7"&gt;&lt;/a&gt;cargo&lt;span class="w"&gt; &lt;/span&gt;build&lt;span class="w"&gt; &lt;/span&gt;-r
&lt;a id="rest_code_25ba0031e2154631b390ec6e6783ba23-8" name="rest_code_25ba0031e2154631b390ec6e6783ba23-8" href="https://blog.bgme.me/posts/2023/how-to-clean-up-the-synapse-database/#rest_code_25ba0031e2154631b390ec6e6783ba23-8"&gt;&lt;/a&gt;
&lt;a id="rest_code_25ba0031e2154631b390ec6e6783ba23-9" name="rest_code_25ba0031e2154631b390ec6e6783ba23-9" href="https://blog.bgme.me/posts/2023/how-to-clean-up-the-synapse-database/#rest_code_25ba0031e2154631b390ec6e6783ba23-9"&gt;&lt;/a&gt;&lt;span class="nb"&gt;cd&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;../target/release/
&lt;a id="rest_code_25ba0031e2154631b390ec6e6783ba23-10" name="rest_code_25ba0031e2154631b390ec6e6783ba23-10" href="https://blog.bgme.me/posts/2023/how-to-clean-up-the-synapse-database/#rest_code_25ba0031e2154631b390ec6e6783ba23-10"&gt;&lt;/a&gt;
&lt;a id="rest_code_25ba0031e2154631b390ec6e6783ba23-11" name="rest_code_25ba0031e2154631b390ec6e6783ba23-11" href="https://blog.bgme.me/posts/2023/how-to-clean-up-the-synapse-database/#rest_code_25ba0031e2154631b390ec6e6783ba23-11"&gt;&lt;/a&gt;./synapse_auto_compressor&lt;span class="w"&gt; &lt;/span&gt;-p&lt;span class="w"&gt; &lt;/span&gt;postgresql://synapse_user:&lt;span class="o"&gt;[&lt;/span&gt;password&lt;span class="o"&gt;]&lt;/span&gt;@&lt;span class="o"&gt;[&lt;/span&gt;host&lt;span class="o"&gt;]&lt;/span&gt;/synapse&lt;span class="w"&gt; &lt;/span&gt;-c&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;1000&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;-n&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;10000000&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;tee&lt;span class="w"&gt; &lt;/span&gt;~/synapse_auto_compressor.log
&lt;/pre&gt;&lt;/div&gt;
&lt;/section&gt;
&lt;section id="step-3-vacuum-database"&gt;
&lt;h2&gt;Step 3: Vacuum Database&lt;/h2&gt;
&lt;div class="code"&gt;&lt;pre class="code sql"&gt;&lt;a id="rest_code_30e8489f3a37496bae4a6cbe8087230a-1" name="rest_code_30e8489f3a37496bae4a6cbe8087230a-1" href="https://blog.bgme.me/posts/2023/how-to-clean-up-the-synapse-database/#rest_code_30e8489f3a37496bae4a6cbe8087230a-1"&gt;&lt;/a&gt;&lt;span class="k"&gt;REINDEX&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;VERBOSE&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;DATABASE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;synapse&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;a id="rest_code_30e8489f3a37496bae4a6cbe8087230a-2" name="rest_code_30e8489f3a37496bae4a6cbe8087230a-2" href="https://blog.bgme.me/posts/2023/how-to-clean-up-the-synapse-database/#rest_code_30e8489f3a37496bae4a6cbe8087230a-2"&gt;&lt;/a&gt;&lt;span class="k"&gt;VACUUM&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;FULL&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;VERBOSE&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;hr class="docutils"&gt;
&lt;p&gt;Before:&lt;/p&gt;
&lt;a class="reference external image-reference" href="https://blog.bgme.me/images/2023/how-to-clean-up-the-synapse-database/01.png"&gt;&lt;img alt="/images/2023/how-to-clean-up-the-synapse-database/01.thumbnail.png" src="https://blog.bgme.me/images/2023/how-to-clean-up-the-synapse-database/01.thumbnail.png"&gt;&lt;/a&gt;
&lt;p&gt;After:&lt;/p&gt;
&lt;a class="reference external image-reference" href="https://blog.bgme.me/images/2023/how-to-clean-up-the-synapse-database/02.png"&gt;&lt;img alt="/images/2023/how-to-clean-up-the-synapse-database/02.thumbnail.png" src="https://blog.bgme.me/images/2023/how-to-clean-up-the-synapse-database/02.thumbnail.png"&gt;&lt;/a&gt;
&lt;/section&gt;</description><category>Matrix</category><guid>https://blog.bgme.me/posts/2023/how-to-clean-up-the-synapse-database/</guid><pubDate>Sat, 10 Jun 2023 14:17:31 GMT</pubDate></item><item><title>Mastodon 域名设置全讲解</title><link>https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/</link><dc:creator>无影人</dc:creator><description>&lt;p&gt;很早之前写过一篇《&lt;a class="reference external" href="https://blog.bgme.me/posts/nginx-reverser-proxy-for-mastodon/"&gt;使用 Nginx 反代 Mastodon&lt;/a&gt;》，但那篇主要指对没有站点管理权的情况下如何添加反代域名，而且年代久远一些内容也需要更新。&lt;/p&gt;
&lt;p&gt;应嘎嘎的要求，今天特别写一篇博文讲一讲 Mastodon 域名设置相关的内容。&lt;/p&gt;
&lt;p&gt;本文篇幅可能会比较长，前半部分将大致讲解 Mastodon 的架构以及域名相关设置，后半部分将讲解如何更换 WEB_DOMAIN、如何添加反代域名。&lt;/p&gt;
&lt;!-- TEASER_END --&gt;
&lt;nav class="contents" id="topic-1" role="doc-toc"&gt;
&lt;p class="topic-title"&gt;目录&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#mastodon" id="toc-entry-1"&gt;Mastodon 大体架构&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#mastodon-1" id="toc-entry-2"&gt;Mastodon 服务发现流程&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#mastodon-2" id="toc-entry-3"&gt;Mastodon 域名配置&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#local-domain" id="toc-entry-4"&gt;LOCAL_DOMAIN&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#web-domain" id="toc-entry-5"&gt;WEB_DOMAIN&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#alternate-domains" id="toc-entry-6"&gt;ALTERNATE_DOMAINS&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#streaming-api-base-url" id="toc-entry-7"&gt;STREAMING_API_BASE_URL&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#cdn-host" id="toc-entry-8"&gt;CDN_HOST&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#s3-alias-host" id="toc-entry-9"&gt;S3_ALIAS_HOST&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#section-1" id="toc-entry-10"&gt;域名注意事项&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#section-2" id="toc-entry-11"&gt;实际操作篇&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#mastodon-3" id="toc-entry-12"&gt;在不同域名托管 Mastodon 服务&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#section-3" id="toc-entry-13"&gt;添加反代域名&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference internal" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#section-4" id="toc-entry-14"&gt;参考资料&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/nav&gt;
&lt;section id="mastodon"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#toc-entry-1" role="doc-backlink"&gt;Mastodon 大体架构&lt;/a&gt;&lt;/h2&gt;
&lt;figure class="align-center"&gt;
&lt;a class="reference external image-reference" href="https://blog.bgme.me/images/2022/full-explanation-of-mastodon-domain-name-settings/Mastodon%E6%9E%B6%E6%9E%84%E5%9B%BE.png"&gt;&lt;img alt="/images/2022/full-explanation-of-mastodon-domain-name-settings/Mastodon架构图.thumbnail.png" src="https://blog.bgme.me/images/2022/full-explanation-of-mastodon-domain-name-settings/Mastodon%E6%9E%B6%E6%9E%84%E5%9B%BE.thumbnail.png"&gt;&lt;/a&gt;
&lt;figcaption&gt;
&lt;p&gt;Mastodon 大体架构图&lt;/p&gt;
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;Mastodon 是一个前后端分离的应用，前端是使用 React 写成的单页应用，负责交互与展示；后端由 Ruby 写成负表提供 API 。&lt;/p&gt;
&lt;p&gt;当用户访问时，HTML、XHR 请求反代至 Puma 服务， websocket 请求反代至 Node 服务，其余静态资源由 nginx 响应。&lt;/p&gt;
&lt;p&gt;因此，Mastodon 也可以像 Pleroma 那样使用替换前端，例如：&lt;a class="reference external" href="https://github.com/NanaMorse/Cuckoo.Plus"&gt;Cuckoo+&lt;/a&gt; 、&lt;a class="reference external" href="https://github.com/nolanlawson/pinafore"&gt;Pinafore&lt;/a&gt; 。&lt;/p&gt;
&lt;figure class="align-center"&gt;
&lt;a class="reference external image-reference" href="https://blog.bgme.me/images/2022/full-explanation-of-mastodon-domain-name-settings/pinafore.bgme.bid.png"&gt;&lt;img alt="/images/2022/full-explanation-of-mastodon-domain-name-settings/pinafore.bgme.bid.thumbnail.png" src="https://blog.bgme.me/images/2022/full-explanation-of-mastodon-domain-name-settings/pinafore.bgme.bid.thumbnail.png"&gt;&lt;/a&gt;
&lt;figcaption&gt;
&lt;p&gt;pinafore.bgme.bid&lt;/p&gt;
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/section&gt;
&lt;section id="mastodon-1"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#toc-entry-2" role="doc-backlink"&gt;Mastodon 服务发现流程&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;众所周知，Mastodon 是一个基于 ActivityPub 协议联邦式的去中心化平台。&lt;/p&gt;
&lt;p&gt;那么问题来了，Mastodon 是如何发现远程实例的？或者说当你在编辑框中写下 &lt;code class="docutils literal"&gt;@user@example.org&lt;/code&gt; 后，Mastodon 是如何将其翻译为 ActivityPub 协议所需的 HTTPS URI 的？&lt;/p&gt;
&lt;p&gt;Mastodon 帐户的两个身份标识：&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;webfinger &lt;code class="docutils literal"&gt;acct&lt;/code&gt; URI：跨实例的可验证的全局用户身份标识。&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;actor URI：用于 federation 过程的其他所有方面。&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="mastodon-2"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#toc-entry-3" role="doc-backlink"&gt;Mastodon 域名配置&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;在 Mastodon 配置文件中，与用户使用相关的域名选项有 &lt;code class="docutils literal"&gt;LOCAL_DOMAIN&lt;/code&gt;、&lt;code class="docutils literal"&gt;WEB_DOMAIN&lt;/code&gt;、&lt;code class="docutils literal"&gt;ALTERNATE_DOMAINS&lt;/code&gt;、&lt;code class="docutils literal"&gt;STREAMING_API_BASE_URL&lt;/code&gt;、&lt;code class="docutils literal"&gt;CDN_HOST&lt;/code&gt;、&lt;code class="docutils literal"&gt;S3_ALIAS_HOST&lt;/code&gt;。&lt;/p&gt;
&lt;section id="local-domain"&gt;
&lt;h3&gt;&lt;a class="toc-backref" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#toc-entry-4" role="doc-backlink"&gt;LOCAL_DOMAIN&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;服务器在 Fediverse 网络中唯一标识，用于生成帐户 &lt;code class="docutils literal"&gt;acct&lt;/code&gt; URI，确认后无法更改，修改该项配置将导致帐户 &lt;code class="docutils literal"&gt;acct&lt;/code&gt; URI 改变，远程服务器会将现有帐户视为不同于之前的全新帐户。&lt;/p&gt;
&lt;p&gt;例如： &lt;code class="docutils literal"&gt;@qpomelo@mastodon.qpomelo.app&lt;/code&gt; 将实例的 &lt;code class="docutils literal"&gt;LOCAL_DOMAIN&lt;/code&gt; 由 &lt;code class="docutils literal"&gt;mastodon.qpomelo.app&lt;/code&gt; 改为 &lt;code class="docutils literal"&gt;qpomelo.cc&lt;/code&gt;，其acct也从 &lt;code class="docutils literal"&gt;acct:qpomelo@mastodon.qpomelo.app&lt;/code&gt; 变更为 &lt;code class="docutils literal"&gt;acct:qpomelo@qpomelo.cc&lt;/code&gt; 。&lt;/p&gt;
&lt;figure class="align-center"&gt;
&lt;a class="reference external image-reference" href="https://blog.bgme.me/images/2022/full-explanation-of-mastodon-domain-name-settings/local_domain_mastodon.qpomelo.app.png"&gt;&lt;img alt="/images/2022/full-explanation-of-mastodon-domain-name-settings/local_domain_mastodon.qpomelo.app.thumbnail.png" src="https://blog.bgme.me/images/2022/full-explanation-of-mastodon-domain-name-settings/local_domain_mastodon.qpomelo.app.thumbnail.png" style="height: 15em;"&gt;&lt;/a&gt;
&lt;figcaption&gt;
&lt;p&gt;@qpomelo@mastodon.qpomelo.app&lt;/p&gt;
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class="align-center"&gt;
&lt;a class="reference external image-reference" href="https://blog.bgme.me/images/2022/full-explanation-of-mastodon-domain-name-settings/local_domain_qpomelo.cc.png"&gt;&lt;img alt="/images/2022/full-explanation-of-mastodon-domain-name-settings/local_domain_qpomelo.cc.thumbnail.png" src="https://blog.bgme.me/images/2022/full-explanation-of-mastodon-domain-name-settings/local_domain_qpomelo.cc.thumbnail.png" style="height: 15em;"&gt;&lt;/a&gt;
&lt;figcaption&gt;
&lt;p&gt;@qpomelo@qpomelo.cc&lt;/p&gt;
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;虽然实际上是同一个帐户，但由于acct不同，被远程实例视为两个不同的帐户。&lt;/p&gt;
&lt;/section&gt;
&lt;section id="web-domain"&gt;
&lt;h3&gt;&lt;a class="toc-backref" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#toc-entry-5" role="doc-backlink"&gt;WEB_DOMAIN&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;可选配置项，默认与 &lt;code class="docutils literal"&gt;LOCAL_DOMAIN&lt;/code&gt; 相同，用于生成网页内容，诸如：&lt;code class="docutils literal"&gt;actor&lt;/code&gt; 、 &lt;code class="docutils literal"&gt;inbox&lt;/code&gt; 等。通过设置 &lt;code class="docutils literal"&gt;WEB_DOMAIN&lt;/code&gt;，可以将 Mastodon 服务运行于另一域名。&lt;/p&gt;
&lt;p&gt;例如：假设 &lt;code class="docutils literal"&gt;bgme.me&lt;/code&gt; 已经存在其它服务，将 &lt;code class="docutils literal"&gt;LOCAL_DOMAIN&lt;/code&gt; 设为 &lt;code class="docutils literal"&gt;bgme.me&lt;/code&gt;，将 &lt;code class="docutils literal"&gt;WEB_DOMAIN&lt;/code&gt; 设为 &lt;code class="docutils literal"&gt;mastodon.bgme.me&lt;/code&gt;，便可以保证帐户 &lt;code class="docutils literal"&gt;acct&lt;/code&gt; URI 以 &lt;code class="docutils literal"&gt;bgme.me&lt;/code&gt; 结尾的情况下将 Mastodon 相关服务运行在 &lt;code class="docutils literal"&gt;mastodon.bgme.me&lt;/code&gt; 域名下。&lt;/p&gt;
&lt;figure class="align-center"&gt;
&lt;a class="reference external image-reference" href="https://blog.bgme.me/images/2022/full-explanation-of-mastodon-domain-name-settings/web_domain_admin_ui.png"&gt;&lt;img alt="/images/2022/full-explanation-of-mastodon-domain-name-settings/web_domain_admin_ui.thumbnail.png" src="https://blog.bgme.me/images/2022/full-explanation-of-mastodon-domain-name-settings/web_domain_admin_ui.thumbnail.png" style="height: 15em;"&gt;&lt;/a&gt;
&lt;figcaption&gt;
&lt;p&gt;@naraku@naraku.cc&lt;/p&gt;
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;style&gt;
.code.httpie {
    max-height: 20em;
    overflow: scroll;
    white-space: pre;
}
&lt;/style&gt;&lt;div class="code"&gt;&lt;pre class="code bash"&gt;&lt;a id="rest_code_69365cd8431b4786ab08114b1fe6d4f5-1" name="rest_code_69365cd8431b4786ab08114b1fe6d4f5-1" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_69365cd8431b4786ab08114b1fe6d4f5-1"&gt;&lt;/a&gt;http&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://naraku.cc/.well-known/host-meta"&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;-p&lt;span class="w"&gt; &lt;/span&gt;HBhb
&lt;/pre&gt;&lt;/div&gt;
&lt;div class="code"&gt;&lt;pre class="code text httpie"&gt;&lt;a id="rest_code_e0a59cae85b0459c8bb5555ad3b700b5-1" name="rest_code_e0a59cae85b0459c8bb5555ad3b700b5-1" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_e0a59cae85b0459c8bb5555ad3b700b5-1"&gt;&lt;/a&gt;GET /.well-known/host-meta HTTP/1.1
&lt;a id="rest_code_e0a59cae85b0459c8bb5555ad3b700b5-2" name="rest_code_e0a59cae85b0459c8bb5555ad3b700b5-2" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_e0a59cae85b0459c8bb5555ad3b700b5-2"&gt;&lt;/a&gt;Accept: */*
&lt;a id="rest_code_e0a59cae85b0459c8bb5555ad3b700b5-3" name="rest_code_e0a59cae85b0459c8bb5555ad3b700b5-3" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_e0a59cae85b0459c8bb5555ad3b700b5-3"&gt;&lt;/a&gt;Accept-Encoding: gzip, deflate, br
&lt;a id="rest_code_e0a59cae85b0459c8bb5555ad3b700b5-4" name="rest_code_e0a59cae85b0459c8bb5555ad3b700b5-4" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_e0a59cae85b0459c8bb5555ad3b700b5-4"&gt;&lt;/a&gt;Connection: keep-alive
&lt;a id="rest_code_e0a59cae85b0459c8bb5555ad3b700b5-5" name="rest_code_e0a59cae85b0459c8bb5555ad3b700b5-5" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_e0a59cae85b0459c8bb5555ad3b700b5-5"&gt;&lt;/a&gt;Host: naraku.cc
&lt;a id="rest_code_e0a59cae85b0459c8bb5555ad3b700b5-6" name="rest_code_e0a59cae85b0459c8bb5555ad3b700b5-6" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_e0a59cae85b0459c8bb5555ad3b700b5-6"&gt;&lt;/a&gt;User-Agent: HTTPie/3.2.1
&lt;a id="rest_code_e0a59cae85b0459c8bb5555ad3b700b5-7" name="rest_code_e0a59cae85b0459c8bb5555ad3b700b5-7" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_e0a59cae85b0459c8bb5555ad3b700b5-7"&gt;&lt;/a&gt;
&lt;a id="rest_code_e0a59cae85b0459c8bb5555ad3b700b5-8" name="rest_code_e0a59cae85b0459c8bb5555ad3b700b5-8" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_e0a59cae85b0459c8bb5555ad3b700b5-8"&gt;&lt;/a&gt;
&lt;a id="rest_code_e0a59cae85b0459c8bb5555ad3b700b5-9" name="rest_code_e0a59cae85b0459c8bb5555ad3b700b5-9" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_e0a59cae85b0459c8bb5555ad3b700b5-9"&gt;&lt;/a&gt;
&lt;a id="rest_code_e0a59cae85b0459c8bb5555ad3b700b5-10" name="rest_code_e0a59cae85b0459c8bb5555ad3b700b5-10" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_e0a59cae85b0459c8bb5555ad3b700b5-10"&gt;&lt;/a&gt;HTTP/1.1 301 Moved Permanently
&lt;a id="rest_code_e0a59cae85b0459c8bb5555ad3b700b5-11" name="rest_code_e0a59cae85b0459c8bb5555ad3b700b5-11" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_e0a59cae85b0459c8bb5555ad3b700b5-11"&gt;&lt;/a&gt;CF-Cache-Status: DYNAMIC
&lt;a id="rest_code_e0a59cae85b0459c8bb5555ad3b700b5-12" name="rest_code_e0a59cae85b0459c8bb5555ad3b700b5-12" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_e0a59cae85b0459c8bb5555ad3b700b5-12"&gt;&lt;/a&gt;CF-RAY: 77ef38a2ef452ac1-LAX
&lt;a id="rest_code_e0a59cae85b0459c8bb5555ad3b700b5-13" name="rest_code_e0a59cae85b0459c8bb5555ad3b700b5-13" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_e0a59cae85b0459c8bb5555ad3b700b5-13"&gt;&lt;/a&gt;Connection: keep-alive
&lt;a id="rest_code_e0a59cae85b0459c8bb5555ad3b700b5-14" name="rest_code_e0a59cae85b0459c8bb5555ad3b700b5-14" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_e0a59cae85b0459c8bb5555ad3b700b5-14"&gt;&lt;/a&gt;Content-Type: text/html
&lt;a id="rest_code_e0a59cae85b0459c8bb5555ad3b700b5-15" name="rest_code_e0a59cae85b0459c8bb5555ad3b700b5-15" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_e0a59cae85b0459c8bb5555ad3b700b5-15"&gt;&lt;/a&gt;Date: Sun, 25 Dec 2022 05:36:49 GMT
&lt;a id="rest_code_e0a59cae85b0459c8bb5555ad3b700b5-16" name="rest_code_e0a59cae85b0459c8bb5555ad3b700b5-16" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_e0a59cae85b0459c8bb5555ad3b700b5-16"&gt;&lt;/a&gt;NEL: {"success_fraction":0,"report_to":"cf-nel","max_age":604800}
&lt;a id="rest_code_e0a59cae85b0459c8bb5555ad3b700b5-17" name="rest_code_e0a59cae85b0459c8bb5555ad3b700b5-17" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_e0a59cae85b0459c8bb5555ad3b700b5-17"&gt;&lt;/a&gt;Report-To: {"endpoints":[{"url":"https:\/\/a.nel.cloudflare.com\/report\/v3?s=iZw4%2BWLYieZU2hKsOvMH4bRt1nJSgQkvZgaiWgY7GsvaBWsDvOB8W0sLcPo7LHzmungp42AkWLkEfcU%2BTG2hrK%2F6jSOTLMlOkNkNNJVna7CjhUaukV%2FOvBrf6Mu5izCV0HKz9BfZq%2FA%3D"}],"group":"cf-nel","max_age":604800}
&lt;a id="rest_code_e0a59cae85b0459c8bb5555ad3b700b5-18" name="rest_code_e0a59cae85b0459c8bb5555ad3b700b5-18" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_e0a59cae85b0459c8bb5555ad3b700b5-18"&gt;&lt;/a&gt;Server: cloudflare
&lt;a id="rest_code_e0a59cae85b0459c8bb5555ad3b700b5-19" name="rest_code_e0a59cae85b0459c8bb5555ad3b700b5-19" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_e0a59cae85b0459c8bb5555ad3b700b5-19"&gt;&lt;/a&gt;Strict-Transport-Security: max-age=15552000; includeSubDomains; preload
&lt;a id="rest_code_e0a59cae85b0459c8bb5555ad3b700b5-20" name="rest_code_e0a59cae85b0459c8bb5555ad3b700b5-20" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_e0a59cae85b0459c8bb5555ad3b700b5-20"&gt;&lt;/a&gt;Transfer-Encoding: chunked
&lt;a id="rest_code_e0a59cae85b0459c8bb5555ad3b700b5-21" name="rest_code_e0a59cae85b0459c8bb5555ad3b700b5-21" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_e0a59cae85b0459c8bb5555ad3b700b5-21"&gt;&lt;/a&gt;X-Content-Type-Options: nosniff
&lt;a id="rest_code_e0a59cae85b0459c8bb5555ad3b700b5-22" name="rest_code_e0a59cae85b0459c8bb5555ad3b700b5-22" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_e0a59cae85b0459c8bb5555ad3b700b5-22"&gt;&lt;/a&gt;access-control-allow-origin: *
&lt;a id="rest_code_e0a59cae85b0459c8bb5555ad3b700b5-23" name="rest_code_e0a59cae85b0459c8bb5555ad3b700b5-23" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_e0a59cae85b0459c8bb5555ad3b700b5-23"&gt;&lt;/a&gt;alt-svc: h3=":443"; ma=86400, h3-29=":443"; ma=86400
&lt;a id="rest_code_e0a59cae85b0459c8bb5555ad3b700b5-24" name="rest_code_e0a59cae85b0459c8bb5555ad3b700b5-24" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_e0a59cae85b0459c8bb5555ad3b700b5-24"&gt;&lt;/a&gt;location: https://mtd.naraku.cc/.well-known/host-meta
&lt;a id="rest_code_e0a59cae85b0459c8bb5555ad3b700b5-25" name="rest_code_e0a59cae85b0459c8bb5555ad3b700b5-25" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_e0a59cae85b0459c8bb5555ad3b700b5-25"&gt;&lt;/a&gt;
&lt;a id="rest_code_e0a59cae85b0459c8bb5555ad3b700b5-26" name="rest_code_e0a59cae85b0459c8bb5555ad3b700b5-26" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_e0a59cae85b0459c8bb5555ad3b700b5-26"&gt;&lt;/a&gt;&amp;lt;html&amp;gt;
&lt;a id="rest_code_e0a59cae85b0459c8bb5555ad3b700b5-27" name="rest_code_e0a59cae85b0459c8bb5555ad3b700b5-27" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_e0a59cae85b0459c8bb5555ad3b700b5-27"&gt;&lt;/a&gt;&amp;lt;head&amp;gt;&amp;lt;title&amp;gt;301 Moved Permanently&amp;lt;/title&amp;gt;&amp;lt;/head&amp;gt;
&lt;a id="rest_code_e0a59cae85b0459c8bb5555ad3b700b5-28" name="rest_code_e0a59cae85b0459c8bb5555ad3b700b5-28" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_e0a59cae85b0459c8bb5555ad3b700b5-28"&gt;&lt;/a&gt;&amp;lt;body&amp;gt;
&lt;a id="rest_code_e0a59cae85b0459c8bb5555ad3b700b5-29" name="rest_code_e0a59cae85b0459c8bb5555ad3b700b5-29" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_e0a59cae85b0459c8bb5555ad3b700b5-29"&gt;&lt;/a&gt;&amp;lt;center&amp;gt;&amp;lt;h1&amp;gt;301 Moved Permanently&amp;lt;/h1&amp;gt;&amp;lt;/center&amp;gt;
&lt;a id="rest_code_e0a59cae85b0459c8bb5555ad3b700b5-30" name="rest_code_e0a59cae85b0459c8bb5555ad3b700b5-30" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_e0a59cae85b0459c8bb5555ad3b700b5-30"&gt;&lt;/a&gt;&amp;lt;hr&amp;gt;&amp;lt;center&amp;gt;nginx&amp;lt;/center&amp;gt;
&lt;a id="rest_code_e0a59cae85b0459c8bb5555ad3b700b5-31" name="rest_code_e0a59cae85b0459c8bb5555ad3b700b5-31" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_e0a59cae85b0459c8bb5555ad3b700b5-31"&gt;&lt;/a&gt;&amp;lt;/body&amp;gt;
&lt;a id="rest_code_e0a59cae85b0459c8bb5555ad3b700b5-32" name="rest_code_e0a59cae85b0459c8bb5555ad3b700b5-32" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_e0a59cae85b0459c8bb5555ad3b700b5-32"&gt;&lt;/a&gt;&amp;lt;/html&amp;gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;div class="code"&gt;&lt;pre class="code bash"&gt;&lt;a id="rest_code_131918af57674dad8a60f259474f4835-1" name="rest_code_131918af57674dad8a60f259474f4835-1" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_131918af57674dad8a60f259474f4835-1"&gt;&lt;/a&gt;http&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://mtd.naraku.cc/.well-known/host-meta"&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;-p&lt;span class="w"&gt; &lt;/span&gt;HBhb
&lt;/pre&gt;&lt;/div&gt;
&lt;div class="code"&gt;&lt;pre class="code text httpie"&gt;&lt;a id="rest_code_5a69bea8d7e44e4990020dd8678b87cd-1" name="rest_code_5a69bea8d7e44e4990020dd8678b87cd-1" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_5a69bea8d7e44e4990020dd8678b87cd-1"&gt;&lt;/a&gt;GET /.well-known/host-meta HTTP/1.1
&lt;a id="rest_code_5a69bea8d7e44e4990020dd8678b87cd-2" name="rest_code_5a69bea8d7e44e4990020dd8678b87cd-2" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_5a69bea8d7e44e4990020dd8678b87cd-2"&gt;&lt;/a&gt;Accept: */*
&lt;a id="rest_code_5a69bea8d7e44e4990020dd8678b87cd-3" name="rest_code_5a69bea8d7e44e4990020dd8678b87cd-3" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_5a69bea8d7e44e4990020dd8678b87cd-3"&gt;&lt;/a&gt;Accept-Encoding: gzip, deflate, br
&lt;a id="rest_code_5a69bea8d7e44e4990020dd8678b87cd-4" name="rest_code_5a69bea8d7e44e4990020dd8678b87cd-4" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_5a69bea8d7e44e4990020dd8678b87cd-4"&gt;&lt;/a&gt;Connection: keep-alive
&lt;a id="rest_code_5a69bea8d7e44e4990020dd8678b87cd-5" name="rest_code_5a69bea8d7e44e4990020dd8678b87cd-5" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_5a69bea8d7e44e4990020dd8678b87cd-5"&gt;&lt;/a&gt;Host: mtd.naraku.cc
&lt;a id="rest_code_5a69bea8d7e44e4990020dd8678b87cd-6" name="rest_code_5a69bea8d7e44e4990020dd8678b87cd-6" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_5a69bea8d7e44e4990020dd8678b87cd-6"&gt;&lt;/a&gt;User-Agent: HTTPie/3.2.1
&lt;a id="rest_code_5a69bea8d7e44e4990020dd8678b87cd-7" name="rest_code_5a69bea8d7e44e4990020dd8678b87cd-7" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_5a69bea8d7e44e4990020dd8678b87cd-7"&gt;&lt;/a&gt;
&lt;a id="rest_code_5a69bea8d7e44e4990020dd8678b87cd-8" name="rest_code_5a69bea8d7e44e4990020dd8678b87cd-8" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_5a69bea8d7e44e4990020dd8678b87cd-8"&gt;&lt;/a&gt;
&lt;a id="rest_code_5a69bea8d7e44e4990020dd8678b87cd-9" name="rest_code_5a69bea8d7e44e4990020dd8678b87cd-9" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_5a69bea8d7e44e4990020dd8678b87cd-9"&gt;&lt;/a&gt;
&lt;a id="rest_code_5a69bea8d7e44e4990020dd8678b87cd-10" name="rest_code_5a69bea8d7e44e4990020dd8678b87cd-10" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_5a69bea8d7e44e4990020dd8678b87cd-10"&gt;&lt;/a&gt;HTTP/1.1 200 OK
&lt;a id="rest_code_5a69bea8d7e44e4990020dd8678b87cd-11" name="rest_code_5a69bea8d7e44e4990020dd8678b87cd-11" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_5a69bea8d7e44e4990020dd8678b87cd-11"&gt;&lt;/a&gt;CF-Cache-Status: DYNAMIC
&lt;a id="rest_code_5a69bea8d7e44e4990020dd8678b87cd-12" name="rest_code_5a69bea8d7e44e4990020dd8678b87cd-12" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_5a69bea8d7e44e4990020dd8678b87cd-12"&gt;&lt;/a&gt;CF-RAY: 77ef36c5efab527b-LAX
&lt;a id="rest_code_5a69bea8d7e44e4990020dd8678b87cd-13" name="rest_code_5a69bea8d7e44e4990020dd8678b87cd-13" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_5a69bea8d7e44e4990020dd8678b87cd-13"&gt;&lt;/a&gt;Cache-Control: max-age=259200, public
&lt;a id="rest_code_5a69bea8d7e44e4990020dd8678b87cd-14" name="rest_code_5a69bea8d7e44e4990020dd8678b87cd-14" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_5a69bea8d7e44e4990020dd8678b87cd-14"&gt;&lt;/a&gt;Connection: keep-alive
&lt;a id="rest_code_5a69bea8d7e44e4990020dd8678b87cd-15" name="rest_code_5a69bea8d7e44e4990020dd8678b87cd-15" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_5a69bea8d7e44e4990020dd8678b87cd-15"&gt;&lt;/a&gt;Content-Type: application/xrd+xml; charset=utf-8
&lt;a id="rest_code_5a69bea8d7e44e4990020dd8678b87cd-16" name="rest_code_5a69bea8d7e44e4990020dd8678b87cd-16" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_5a69bea8d7e44e4990020dd8678b87cd-16"&gt;&lt;/a&gt;Date: Sun, 25 Dec 2022 05:35:33 GMT
&lt;a id="rest_code_5a69bea8d7e44e4990020dd8678b87cd-17" name="rest_code_5a69bea8d7e44e4990020dd8678b87cd-17" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_5a69bea8d7e44e4990020dd8678b87cd-17"&gt;&lt;/a&gt;NEL: {"success_fraction":0,"report_to":"cf-nel","max_age":604800}
&lt;a id="rest_code_5a69bea8d7e44e4990020dd8678b87cd-18" name="rest_code_5a69bea8d7e44e4990020dd8678b87cd-18" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_5a69bea8d7e44e4990020dd8678b87cd-18"&gt;&lt;/a&gt;Report-To: {"endpoints":[{"url":"https:\/\/a.nel.cloudflare.com\/report\/v3?s=oXXheIvbL6bzP4E2Kp%2F6wgvMn8cvr2bXJgXNl8bO%2F86r4Gdy4z7fp3y7SMwVAAORKiy5Qh5rjVx6TKaLhpnHT7D2Xwh58g1r1W4HU6n%2BnJgnZZWaeqqnyMhZKEpHXTkJMkTwKT4FUtkefGU%2F"}],"group":"cf-nel","max_age":604800}
&lt;a id="rest_code_5a69bea8d7e44e4990020dd8678b87cd-19" name="rest_code_5a69bea8d7e44e4990020dd8678b87cd-19" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_5a69bea8d7e44e4990020dd8678b87cd-19"&gt;&lt;/a&gt;Server: cloudflare
&lt;a id="rest_code_5a69bea8d7e44e4990020dd8678b87cd-20" name="rest_code_5a69bea8d7e44e4990020dd8678b87cd-20" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_5a69bea8d7e44e4990020dd8678b87cd-20"&gt;&lt;/a&gt;Transfer-Encoding: chunked
&lt;a id="rest_code_5a69bea8d7e44e4990020dd8678b87cd-21" name="rest_code_5a69bea8d7e44e4990020dd8678b87cd-21" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_5a69bea8d7e44e4990020dd8678b87cd-21"&gt;&lt;/a&gt;alt-svc: h3=":443"; ma=86400, h3-29=":443"; ma=86400
&lt;a id="rest_code_5a69bea8d7e44e4990020dd8678b87cd-22" name="rest_code_5a69bea8d7e44e4990020dd8678b87cd-22" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_5a69bea8d7e44e4990020dd8678b87cd-22"&gt;&lt;/a&gt;content-security-policy: base-uri 'none'; default-src 'none'; frame-ancestors 'none'; font-src 'self' https://mtd.naraku.cc; img-src 'self' https: data: blob: https://mtd.naraku.cc; style-src 'self' https://mtd.naraku.cc 'nonce-PXsk8y8bu+tcBwEB5toFkw=='; media-src 'self' https: data: https://mtd.naraku.cc; frame-src 'self' https:; manifest-src 'self' https://mtd.naraku.cc; connect-src 'self' data: blob: https://mtd.naraku.cc https://mtd.naraku.cc wss://mtd.naraku.cc; script-src 'self' https://mtd.naraku.cc 'wasm-unsafe-eval'; child-src 'self' blob: https://mtd.naraku.cc; worker-src 'self' blob: https://mtd.naraku.cc
&lt;a id="rest_code_5a69bea8d7e44e4990020dd8678b87cd-23" name="rest_code_5a69bea8d7e44e4990020dd8678b87cd-23" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_5a69bea8d7e44e4990020dd8678b87cd-23"&gt;&lt;/a&gt;etag: W/"5205d754e2b6177b4be99ecc2e1413a7"
&lt;a id="rest_code_5a69bea8d7e44e4990020dd8678b87cd-24" name="rest_code_5a69bea8d7e44e4990020dd8678b87cd-24" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_5a69bea8d7e44e4990020dd8678b87cd-24"&gt;&lt;/a&gt;permissions-policy: interest-cohort=()
&lt;a id="rest_code_5a69bea8d7e44e4990020dd8678b87cd-25" name="rest_code_5a69bea8d7e44e4990020dd8678b87cd-25" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_5a69bea8d7e44e4990020dd8678b87cd-25"&gt;&lt;/a&gt;strict-transport-security: max-age=15552000; includeSubDomains; preload
&lt;a id="rest_code_5a69bea8d7e44e4990020dd8678b87cd-26" name="rest_code_5a69bea8d7e44e4990020dd8678b87cd-26" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_5a69bea8d7e44e4990020dd8678b87cd-26"&gt;&lt;/a&gt;vary: Accept, Origin
&lt;a id="rest_code_5a69bea8d7e44e4990020dd8678b87cd-27" name="rest_code_5a69bea8d7e44e4990020dd8678b87cd-27" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_5a69bea8d7e44e4990020dd8678b87cd-27"&gt;&lt;/a&gt;x-content-type-options: nosniff
&lt;a id="rest_code_5a69bea8d7e44e4990020dd8678b87cd-28" name="rest_code_5a69bea8d7e44e4990020dd8678b87cd-28" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_5a69bea8d7e44e4990020dd8678b87cd-28"&gt;&lt;/a&gt;x-frame-options: DENY
&lt;a id="rest_code_5a69bea8d7e44e4990020dd8678b87cd-29" name="rest_code_5a69bea8d7e44e4990020dd8678b87cd-29" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_5a69bea8d7e44e4990020dd8678b87cd-29"&gt;&lt;/a&gt;x-request-id: cd29d011-08e4-4117-b31b-f1f5c0f04c4b
&lt;a id="rest_code_5a69bea8d7e44e4990020dd8678b87cd-30" name="rest_code_5a69bea8d7e44e4990020dd8678b87cd-30" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_5a69bea8d7e44e4990020dd8678b87cd-30"&gt;&lt;/a&gt;x-runtime: 0.004306
&lt;a id="rest_code_5a69bea8d7e44e4990020dd8678b87cd-31" name="rest_code_5a69bea8d7e44e4990020dd8678b87cd-31" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_5a69bea8d7e44e4990020dd8678b87cd-31"&gt;&lt;/a&gt;x-xss-protection: 0
&lt;a id="rest_code_5a69bea8d7e44e4990020dd8678b87cd-32" name="rest_code_5a69bea8d7e44e4990020dd8678b87cd-32" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_5a69bea8d7e44e4990020dd8678b87cd-32"&gt;&lt;/a&gt;
&lt;a id="rest_code_5a69bea8d7e44e4990020dd8678b87cd-33" name="rest_code_5a69bea8d7e44e4990020dd8678b87cd-33" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_5a69bea8d7e44e4990020dd8678b87cd-33"&gt;&lt;/a&gt;&amp;lt;?xml version="1.0" encoding="UTF-8"?&amp;gt;
&lt;a id="rest_code_5a69bea8d7e44e4990020dd8678b87cd-34" name="rest_code_5a69bea8d7e44e4990020dd8678b87cd-34" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_5a69bea8d7e44e4990020dd8678b87cd-34"&gt;&lt;/a&gt;&amp;lt;XRD xmlns="http://docs.oasis-open.org/ns/xri/xrd-1.0"&amp;gt;
&lt;a id="rest_code_5a69bea8d7e44e4990020dd8678b87cd-35" name="rest_code_5a69bea8d7e44e4990020dd8678b87cd-35" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_5a69bea8d7e44e4990020dd8678b87cd-35"&gt;&lt;/a&gt;    &amp;lt;Link rel="lrdd" template="https://mtd.naraku.cc/.well-known/webfinger?resource={uri}"/&amp;gt;
&lt;a id="rest_code_5a69bea8d7e44e4990020dd8678b87cd-36" name="rest_code_5a69bea8d7e44e4990020dd8678b87cd-36" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_5a69bea8d7e44e4990020dd8678b87cd-36"&gt;&lt;/a&gt;&amp;lt;/XRD&amp;gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;div class="code"&gt;&lt;pre class="code bash"&gt;&lt;a id="rest_code_06d41d83fc2a48139aa6fedc14026572-1" name="rest_code_06d41d83fc2a48139aa6fedc14026572-1" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_06d41d83fc2a48139aa6fedc14026572-1"&gt;&lt;/a&gt;http&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://mtd.naraku.cc/.well-known/webfinger?resource=acct:naraku@naraku.cc"&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;-p&lt;span class="w"&gt; &lt;/span&gt;HBhb
&lt;/pre&gt;&lt;/div&gt;
&lt;div class="code"&gt;&lt;pre class="code text httpie"&gt;&lt;a id="rest_code_d2bec1e03e3e47cfa253fba5cbd8e30e-1" name="rest_code_d2bec1e03e3e47cfa253fba5cbd8e30e-1" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_d2bec1e03e3e47cfa253fba5cbd8e30e-1"&gt;&lt;/a&gt;GET /.well-known/webfinger?resource=acct:naraku@naraku.cc HTTP/1.1
&lt;a id="rest_code_d2bec1e03e3e47cfa253fba5cbd8e30e-2" name="rest_code_d2bec1e03e3e47cfa253fba5cbd8e30e-2" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_d2bec1e03e3e47cfa253fba5cbd8e30e-2"&gt;&lt;/a&gt;Accept: */*
&lt;a id="rest_code_d2bec1e03e3e47cfa253fba5cbd8e30e-3" name="rest_code_d2bec1e03e3e47cfa253fba5cbd8e30e-3" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_d2bec1e03e3e47cfa253fba5cbd8e30e-3"&gt;&lt;/a&gt;Accept-Encoding: gzip, deflate, br
&lt;a id="rest_code_d2bec1e03e3e47cfa253fba5cbd8e30e-4" name="rest_code_d2bec1e03e3e47cfa253fba5cbd8e30e-4" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_d2bec1e03e3e47cfa253fba5cbd8e30e-4"&gt;&lt;/a&gt;Connection: keep-alive
&lt;a id="rest_code_d2bec1e03e3e47cfa253fba5cbd8e30e-5" name="rest_code_d2bec1e03e3e47cfa253fba5cbd8e30e-5" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_d2bec1e03e3e47cfa253fba5cbd8e30e-5"&gt;&lt;/a&gt;Host: mtd.naraku.cc
&lt;a id="rest_code_d2bec1e03e3e47cfa253fba5cbd8e30e-6" name="rest_code_d2bec1e03e3e47cfa253fba5cbd8e30e-6" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_d2bec1e03e3e47cfa253fba5cbd8e30e-6"&gt;&lt;/a&gt;User-Agent: HTTPie/3.2.1
&lt;a id="rest_code_d2bec1e03e3e47cfa253fba5cbd8e30e-7" name="rest_code_d2bec1e03e3e47cfa253fba5cbd8e30e-7" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_d2bec1e03e3e47cfa253fba5cbd8e30e-7"&gt;&lt;/a&gt;
&lt;a id="rest_code_d2bec1e03e3e47cfa253fba5cbd8e30e-8" name="rest_code_d2bec1e03e3e47cfa253fba5cbd8e30e-8" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_d2bec1e03e3e47cfa253fba5cbd8e30e-8"&gt;&lt;/a&gt;
&lt;a id="rest_code_d2bec1e03e3e47cfa253fba5cbd8e30e-9" name="rest_code_d2bec1e03e3e47cfa253fba5cbd8e30e-9" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_d2bec1e03e3e47cfa253fba5cbd8e30e-9"&gt;&lt;/a&gt;
&lt;a id="rest_code_d2bec1e03e3e47cfa253fba5cbd8e30e-10" name="rest_code_d2bec1e03e3e47cfa253fba5cbd8e30e-10" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_d2bec1e03e3e47cfa253fba5cbd8e30e-10"&gt;&lt;/a&gt;HTTP/1.1 200 OK
&lt;a id="rest_code_d2bec1e03e3e47cfa253fba5cbd8e30e-11" name="rest_code_d2bec1e03e3e47cfa253fba5cbd8e30e-11" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_d2bec1e03e3e47cfa253fba5cbd8e30e-11"&gt;&lt;/a&gt;CF-Cache-Status: DYNAMIC
&lt;a id="rest_code_d2bec1e03e3e47cfa253fba5cbd8e30e-12" name="rest_code_d2bec1e03e3e47cfa253fba5cbd8e30e-12" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_d2bec1e03e3e47cfa253fba5cbd8e30e-12"&gt;&lt;/a&gt;CF-RAY: 77ef33764ff15214-LAX
&lt;a id="rest_code_d2bec1e03e3e47cfa253fba5cbd8e30e-13" name="rest_code_d2bec1e03e3e47cfa253fba5cbd8e30e-13" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_d2bec1e03e3e47cfa253fba5cbd8e30e-13"&gt;&lt;/a&gt;Cache-Control: max-age=259200, public
&lt;a id="rest_code_d2bec1e03e3e47cfa253fba5cbd8e30e-14" name="rest_code_d2bec1e03e3e47cfa253fba5cbd8e30e-14" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_d2bec1e03e3e47cfa253fba5cbd8e30e-14"&gt;&lt;/a&gt;Connection: keep-alive
&lt;a id="rest_code_d2bec1e03e3e47cfa253fba5cbd8e30e-15" name="rest_code_d2bec1e03e3e47cfa253fba5cbd8e30e-15" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_d2bec1e03e3e47cfa253fba5cbd8e30e-15"&gt;&lt;/a&gt;Content-Type: application/jrd+json; charset=utf-8
&lt;a id="rest_code_d2bec1e03e3e47cfa253fba5cbd8e30e-16" name="rest_code_d2bec1e03e3e47cfa253fba5cbd8e30e-16" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_d2bec1e03e3e47cfa253fba5cbd8e30e-16"&gt;&lt;/a&gt;Date: Sun, 25 Dec 2022 05:33:17 GMT
&lt;a id="rest_code_d2bec1e03e3e47cfa253fba5cbd8e30e-17" name="rest_code_d2bec1e03e3e47cfa253fba5cbd8e30e-17" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_d2bec1e03e3e47cfa253fba5cbd8e30e-17"&gt;&lt;/a&gt;NEL: {"success_fraction":0,"report_to":"cf-nel","max_age":604800}
&lt;a id="rest_code_d2bec1e03e3e47cfa253fba5cbd8e30e-18" name="rest_code_d2bec1e03e3e47cfa253fba5cbd8e30e-18" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_d2bec1e03e3e47cfa253fba5cbd8e30e-18"&gt;&lt;/a&gt;Report-To: {"endpoints":[{"url":"https:\/\/a.nel.cloudflare.com\/report\/v3?s=vQy9au8mhZlm8cgjGpTkPxU%2BOODjpwPh1jRwdMGLJZWblTWLidQyqgfQclB7%2BnFwA08aJYS2sQhoSoww7scjtJ6FQ2BVzUQan9TWZ4TIg%2BVHWx9oKDudox6VWThj9cDg9uyqp%2FU6C%2BsxqBmx"}],"group":"cf-nel","max_age":604800}
&lt;a id="rest_code_d2bec1e03e3e47cfa253fba5cbd8e30e-19" name="rest_code_d2bec1e03e3e47cfa253fba5cbd8e30e-19" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_d2bec1e03e3e47cfa253fba5cbd8e30e-19"&gt;&lt;/a&gt;Server: cloudflare
&lt;a id="rest_code_d2bec1e03e3e47cfa253fba5cbd8e30e-20" name="rest_code_d2bec1e03e3e47cfa253fba5cbd8e30e-20" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_d2bec1e03e3e47cfa253fba5cbd8e30e-20"&gt;&lt;/a&gt;Transfer-Encoding: chunked
&lt;a id="rest_code_d2bec1e03e3e47cfa253fba5cbd8e30e-21" name="rest_code_d2bec1e03e3e47cfa253fba5cbd8e30e-21" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_d2bec1e03e3e47cfa253fba5cbd8e30e-21"&gt;&lt;/a&gt;alt-svc: h3=":443"; ma=86400, h3-29=":443"; ma=86400
&lt;a id="rest_code_d2bec1e03e3e47cfa253fba5cbd8e30e-22" name="rest_code_d2bec1e03e3e47cfa253fba5cbd8e30e-22" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_d2bec1e03e3e47cfa253fba5cbd8e30e-22"&gt;&lt;/a&gt;content-security-policy: base-uri 'none'; default-src 'none'; frame-ancestors 'none'; font-src 'self' https://mtd.naraku.cc; img-src 'self' https: data: blob: https://mtd.naraku.cc; style-src 'self' https://mtd.naraku.cc 'nonce-HtWXbWc6yrKVW32Aqzv4Cw=='; media-src 'self' https: data: https://mtd.naraku.cc; frame-src 'self' https:; manifest-src 'self' https://mtd.naraku.cc; connect-src 'self' data: blob: https://mtd.naraku.cc https://mtd.naraku.cc wss://mtd.naraku.cc; script-src 'self' https://mtd.naraku.cc 'wasm-unsafe-eval'; child-src 'self' blob: https://mtd.naraku.cc; worker-src 'self' blob: https://mtd.naraku.cc
&lt;a id="rest_code_d2bec1e03e3e47cfa253fba5cbd8e30e-23" name="rest_code_d2bec1e03e3e47cfa253fba5cbd8e30e-23" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_d2bec1e03e3e47cfa253fba5cbd8e30e-23"&gt;&lt;/a&gt;etag: W/"b465d414f933c0013f1e193073fabba4"
&lt;a id="rest_code_d2bec1e03e3e47cfa253fba5cbd8e30e-24" name="rest_code_d2bec1e03e3e47cfa253fba5cbd8e30e-24" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_d2bec1e03e3e47cfa253fba5cbd8e30e-24"&gt;&lt;/a&gt;permissions-policy: interest-cohort=()
&lt;a id="rest_code_d2bec1e03e3e47cfa253fba5cbd8e30e-25" name="rest_code_d2bec1e03e3e47cfa253fba5cbd8e30e-25" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_d2bec1e03e3e47cfa253fba5cbd8e30e-25"&gt;&lt;/a&gt;strict-transport-security: max-age=15552000; includeSubDomains; preload
&lt;a id="rest_code_d2bec1e03e3e47cfa253fba5cbd8e30e-26" name="rest_code_d2bec1e03e3e47cfa253fba5cbd8e30e-26" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_d2bec1e03e3e47cfa253fba5cbd8e30e-26"&gt;&lt;/a&gt;vary: Accept, Origin
&lt;a id="rest_code_d2bec1e03e3e47cfa253fba5cbd8e30e-27" name="rest_code_d2bec1e03e3e47cfa253fba5cbd8e30e-27" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_d2bec1e03e3e47cfa253fba5cbd8e30e-27"&gt;&lt;/a&gt;x-content-type-options: nosniff
&lt;a id="rest_code_d2bec1e03e3e47cfa253fba5cbd8e30e-28" name="rest_code_d2bec1e03e3e47cfa253fba5cbd8e30e-28" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_d2bec1e03e3e47cfa253fba5cbd8e30e-28"&gt;&lt;/a&gt;x-frame-options: DENY
&lt;a id="rest_code_d2bec1e03e3e47cfa253fba5cbd8e30e-29" name="rest_code_d2bec1e03e3e47cfa253fba5cbd8e30e-29" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_d2bec1e03e3e47cfa253fba5cbd8e30e-29"&gt;&lt;/a&gt;x-request-id: f6aa211d-bab6-47a1-87a7-fdd97b511e8b
&lt;a id="rest_code_d2bec1e03e3e47cfa253fba5cbd8e30e-30" name="rest_code_d2bec1e03e3e47cfa253fba5cbd8e30e-30" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_d2bec1e03e3e47cfa253fba5cbd8e30e-30"&gt;&lt;/a&gt;x-runtime: 0.008764
&lt;a id="rest_code_d2bec1e03e3e47cfa253fba5cbd8e30e-31" name="rest_code_d2bec1e03e3e47cfa253fba5cbd8e30e-31" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_d2bec1e03e3e47cfa253fba5cbd8e30e-31"&gt;&lt;/a&gt;x-xss-protection: 0
&lt;a id="rest_code_d2bec1e03e3e47cfa253fba5cbd8e30e-32" name="rest_code_d2bec1e03e3e47cfa253fba5cbd8e30e-32" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_d2bec1e03e3e47cfa253fba5cbd8e30e-32"&gt;&lt;/a&gt;
&lt;a id="rest_code_d2bec1e03e3e47cfa253fba5cbd8e30e-33" name="rest_code_d2bec1e03e3e47cfa253fba5cbd8e30e-33" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_d2bec1e03e3e47cfa253fba5cbd8e30e-33"&gt;&lt;/a&gt;{
&lt;a id="rest_code_d2bec1e03e3e47cfa253fba5cbd8e30e-34" name="rest_code_d2bec1e03e3e47cfa253fba5cbd8e30e-34" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_d2bec1e03e3e47cfa253fba5cbd8e30e-34"&gt;&lt;/a&gt;    "aliases": [
&lt;a id="rest_code_d2bec1e03e3e47cfa253fba5cbd8e30e-35" name="rest_code_d2bec1e03e3e47cfa253fba5cbd8e30e-35" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_d2bec1e03e3e47cfa253fba5cbd8e30e-35"&gt;&lt;/a&gt;        "https://mtd.naraku.cc/@naraku",
&lt;a id="rest_code_d2bec1e03e3e47cfa253fba5cbd8e30e-36" name="rest_code_d2bec1e03e3e47cfa253fba5cbd8e30e-36" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_d2bec1e03e3e47cfa253fba5cbd8e30e-36"&gt;&lt;/a&gt;        "https://mtd.naraku.cc/users/naraku"
&lt;a id="rest_code_d2bec1e03e3e47cfa253fba5cbd8e30e-37" name="rest_code_d2bec1e03e3e47cfa253fba5cbd8e30e-37" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_d2bec1e03e3e47cfa253fba5cbd8e30e-37"&gt;&lt;/a&gt;    ],
&lt;a id="rest_code_d2bec1e03e3e47cfa253fba5cbd8e30e-38" name="rest_code_d2bec1e03e3e47cfa253fba5cbd8e30e-38" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_d2bec1e03e3e47cfa253fba5cbd8e30e-38"&gt;&lt;/a&gt;    "links": [
&lt;a id="rest_code_d2bec1e03e3e47cfa253fba5cbd8e30e-39" name="rest_code_d2bec1e03e3e47cfa253fba5cbd8e30e-39" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_d2bec1e03e3e47cfa253fba5cbd8e30e-39"&gt;&lt;/a&gt;        {
&lt;a id="rest_code_d2bec1e03e3e47cfa253fba5cbd8e30e-40" name="rest_code_d2bec1e03e3e47cfa253fba5cbd8e30e-40" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_d2bec1e03e3e47cfa253fba5cbd8e30e-40"&gt;&lt;/a&gt;            "href": "https://mtd.naraku.cc/@naraku",
&lt;a id="rest_code_d2bec1e03e3e47cfa253fba5cbd8e30e-41" name="rest_code_d2bec1e03e3e47cfa253fba5cbd8e30e-41" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_d2bec1e03e3e47cfa253fba5cbd8e30e-41"&gt;&lt;/a&gt;            "rel": "http://webfinger.net/rel/profile-page",
&lt;a id="rest_code_d2bec1e03e3e47cfa253fba5cbd8e30e-42" name="rest_code_d2bec1e03e3e47cfa253fba5cbd8e30e-42" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_d2bec1e03e3e47cfa253fba5cbd8e30e-42"&gt;&lt;/a&gt;            "type": "text/html"
&lt;a id="rest_code_d2bec1e03e3e47cfa253fba5cbd8e30e-43" name="rest_code_d2bec1e03e3e47cfa253fba5cbd8e30e-43" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_d2bec1e03e3e47cfa253fba5cbd8e30e-43"&gt;&lt;/a&gt;        },
&lt;a id="rest_code_d2bec1e03e3e47cfa253fba5cbd8e30e-44" name="rest_code_d2bec1e03e3e47cfa253fba5cbd8e30e-44" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_d2bec1e03e3e47cfa253fba5cbd8e30e-44"&gt;&lt;/a&gt;        {
&lt;a id="rest_code_d2bec1e03e3e47cfa253fba5cbd8e30e-45" name="rest_code_d2bec1e03e3e47cfa253fba5cbd8e30e-45" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_d2bec1e03e3e47cfa253fba5cbd8e30e-45"&gt;&lt;/a&gt;            "href": "https://mtd.naraku.cc/users/naraku",
&lt;a id="rest_code_d2bec1e03e3e47cfa253fba5cbd8e30e-46" name="rest_code_d2bec1e03e3e47cfa253fba5cbd8e30e-46" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_d2bec1e03e3e47cfa253fba5cbd8e30e-46"&gt;&lt;/a&gt;            "rel": "self",
&lt;a id="rest_code_d2bec1e03e3e47cfa253fba5cbd8e30e-47" name="rest_code_d2bec1e03e3e47cfa253fba5cbd8e30e-47" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_d2bec1e03e3e47cfa253fba5cbd8e30e-47"&gt;&lt;/a&gt;            "type": "application/activity+json"
&lt;a id="rest_code_d2bec1e03e3e47cfa253fba5cbd8e30e-48" name="rest_code_d2bec1e03e3e47cfa253fba5cbd8e30e-48" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_d2bec1e03e3e47cfa253fba5cbd8e30e-48"&gt;&lt;/a&gt;        },
&lt;a id="rest_code_d2bec1e03e3e47cfa253fba5cbd8e30e-49" name="rest_code_d2bec1e03e3e47cfa253fba5cbd8e30e-49" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_d2bec1e03e3e47cfa253fba5cbd8e30e-49"&gt;&lt;/a&gt;        {
&lt;a id="rest_code_d2bec1e03e3e47cfa253fba5cbd8e30e-50" name="rest_code_d2bec1e03e3e47cfa253fba5cbd8e30e-50" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_d2bec1e03e3e47cfa253fba5cbd8e30e-50"&gt;&lt;/a&gt;            "rel": "http://ostatus.org/schema/1.0/subscribe",
&lt;a id="rest_code_d2bec1e03e3e47cfa253fba5cbd8e30e-51" name="rest_code_d2bec1e03e3e47cfa253fba5cbd8e30e-51" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_d2bec1e03e3e47cfa253fba5cbd8e30e-51"&gt;&lt;/a&gt;            "template": "https://mtd.naraku.cc/authorize_interaction?uri={uri}"
&lt;a id="rest_code_d2bec1e03e3e47cfa253fba5cbd8e30e-52" name="rest_code_d2bec1e03e3e47cfa253fba5cbd8e30e-52" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_d2bec1e03e3e47cfa253fba5cbd8e30e-52"&gt;&lt;/a&gt;        }
&lt;a id="rest_code_d2bec1e03e3e47cfa253fba5cbd8e30e-53" name="rest_code_d2bec1e03e3e47cfa253fba5cbd8e30e-53" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_d2bec1e03e3e47cfa253fba5cbd8e30e-53"&gt;&lt;/a&gt;    ],
&lt;a id="rest_code_d2bec1e03e3e47cfa253fba5cbd8e30e-54" name="rest_code_d2bec1e03e3e47cfa253fba5cbd8e30e-54" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_d2bec1e03e3e47cfa253fba5cbd8e30e-54"&gt;&lt;/a&gt;    "subject": "acct:naraku@naraku.cc"
&lt;a id="rest_code_d2bec1e03e3e47cfa253fba5cbd8e30e-55" name="rest_code_d2bec1e03e3e47cfa253fba5cbd8e30e-55" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_d2bec1e03e3e47cfa253fba5cbd8e30e-55"&gt;&lt;/a&gt;}
&lt;/pre&gt;&lt;/div&gt;
&lt;div class="code"&gt;&lt;pre class="code bash"&gt;&lt;a id="rest_code_7cc2f10073294eec81bfebaa7414cdc1-1" name="rest_code_7cc2f10073294eec81bfebaa7414cdc1-1" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_7cc2f10073294eec81bfebaa7414cdc1-1"&gt;&lt;/a&gt;http&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://mtd.naraku.cc/users/naraku"&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="s2"&gt;"Accept: application/activity+json"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;-p&lt;span class="w"&gt; &lt;/span&gt;HBhb
&lt;/pre&gt;&lt;/div&gt;
&lt;div class="code"&gt;&lt;pre class="code text httpie"&gt;&lt;a id="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-1" name="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-1" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_8dc0be02e62f48ecaa583b7182eaeea6-1"&gt;&lt;/a&gt;GET /users/naraku HTTP/1.1
&lt;a id="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-2" name="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-2" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_8dc0be02e62f48ecaa583b7182eaeea6-2"&gt;&lt;/a&gt;Accept: application/activity+json
&lt;a id="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-3" name="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-3" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_8dc0be02e62f48ecaa583b7182eaeea6-3"&gt;&lt;/a&gt;Accept-Encoding: gzip, deflate, br
&lt;a id="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-4" name="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-4" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_8dc0be02e62f48ecaa583b7182eaeea6-4"&gt;&lt;/a&gt;Connection: keep-alive
&lt;a id="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-5" name="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-5" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_8dc0be02e62f48ecaa583b7182eaeea6-5"&gt;&lt;/a&gt;Host: mtd.naraku.cc
&lt;a id="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-6" name="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-6" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_8dc0be02e62f48ecaa583b7182eaeea6-6"&gt;&lt;/a&gt;User-Agent: HTTPie/3.2.1
&lt;a id="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-7" name="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-7" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_8dc0be02e62f48ecaa583b7182eaeea6-7"&gt;&lt;/a&gt;
&lt;a id="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-8" name="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-8" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_8dc0be02e62f48ecaa583b7182eaeea6-8"&gt;&lt;/a&gt;
&lt;a id="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-9" name="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-9" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_8dc0be02e62f48ecaa583b7182eaeea6-9"&gt;&lt;/a&gt;
&lt;a id="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-10" name="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-10" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_8dc0be02e62f48ecaa583b7182eaeea6-10"&gt;&lt;/a&gt;HTTP/1.1 200 OK
&lt;a id="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-11" name="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-11" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_8dc0be02e62f48ecaa583b7182eaeea6-11"&gt;&lt;/a&gt;CF-Cache-Status: DYNAMIC
&lt;a id="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-12" name="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-12" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_8dc0be02e62f48ecaa583b7182eaeea6-12"&gt;&lt;/a&gt;CF-RAY: 77ef47fb4c7f2b50-LAX
&lt;a id="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-13" name="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-13" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_8dc0be02e62f48ecaa583b7182eaeea6-13"&gt;&lt;/a&gt;Cache-Control: max-age=180, public
&lt;a id="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-14" name="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-14" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_8dc0be02e62f48ecaa583b7182eaeea6-14"&gt;&lt;/a&gt;Connection: keep-alive
&lt;a id="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-15" name="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-15" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_8dc0be02e62f48ecaa583b7182eaeea6-15"&gt;&lt;/a&gt;Content-Type: application/activity+json; charset=utf-8
&lt;a id="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-16" name="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-16" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_8dc0be02e62f48ecaa583b7182eaeea6-16"&gt;&lt;/a&gt;Date: Sun, 25 Dec 2022 05:47:18 GMT
&lt;a id="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-17" name="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-17" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_8dc0be02e62f48ecaa583b7182eaeea6-17"&gt;&lt;/a&gt;NEL: {"success_fraction":0,"report_to":"cf-nel","max_age":604800}
&lt;a id="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-18" name="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-18" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_8dc0be02e62f48ecaa583b7182eaeea6-18"&gt;&lt;/a&gt;Report-To: {"endpoints":[{"url":"https:\/\/a.nel.cloudflare.com\/report\/v3?s=p9ppDYwQMI6z5Sc%2BY1FlfE2BxwxXfd%2F7yQSwwrQdyRHcKXvwUSF%2BJTug1i%2BQ7QAIz0nKix6XTVTH5fMrLNoIixkf4%2Bex29%2FavM6659cwkh8z6YN4W5A0%2B3onYsrQI%2F2pw9oWJx1Nd399QZRT"}],"group":"cf-nel","max_age":604800}
&lt;a id="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-19" name="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-19" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_8dc0be02e62f48ecaa583b7182eaeea6-19"&gt;&lt;/a&gt;Server: cloudflare
&lt;a id="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-20" name="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-20" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_8dc0be02e62f48ecaa583b7182eaeea6-20"&gt;&lt;/a&gt;Transfer-Encoding: chunked
&lt;a id="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-21" name="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-21" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_8dc0be02e62f48ecaa583b7182eaeea6-21"&gt;&lt;/a&gt;alt-svc: h3=":443"; ma=86400, h3-29=":443"; ma=86400
&lt;a id="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-22" name="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-22" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_8dc0be02e62f48ecaa583b7182eaeea6-22"&gt;&lt;/a&gt;content-security-policy: base-uri 'none'; default-src 'none'; frame-ancestors 'none'; font-src 'self' https://mtd.naraku.cc; img-src 'self' https: data: blob: https://mtd.naraku.cc; style-src 'self' https://mtd.naraku.cc 'nonce-0qN1dzer3t4zyTyWue1qqw=='; media-src 'self' https: data: https://mtd.naraku.cc; frame-src 'self' https:; manifest-src 'self' https://mtd.naraku.cc; connect-src 'self' data: blob: https://mtd.naraku.cc https://mtd.naraku.cc wss://mtd.naraku.cc; script-src 'self' https://mtd.naraku.cc 'wasm-unsafe-eval'; child-src 'self' blob: https://mtd.naraku.cc; worker-src 'self' blob: https://mtd.naraku.cc
&lt;a id="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-23" name="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-23" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_8dc0be02e62f48ecaa583b7182eaeea6-23"&gt;&lt;/a&gt;etag: W/"416f589000111e76eae38f5f7eb69471"
&lt;a id="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-24" name="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-24" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_8dc0be02e62f48ecaa583b7182eaeea6-24"&gt;&lt;/a&gt;permissions-policy: interest-cohort=()
&lt;a id="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-25" name="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-25" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_8dc0be02e62f48ecaa583b7182eaeea6-25"&gt;&lt;/a&gt;referrer-policy: origin
&lt;a id="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-26" name="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-26" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_8dc0be02e62f48ecaa583b7182eaeea6-26"&gt;&lt;/a&gt;strict-transport-security: max-age=15552000; includeSubDomains; preload
&lt;a id="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-27" name="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-27" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_8dc0be02e62f48ecaa583b7182eaeea6-27"&gt;&lt;/a&gt;vary: Accept, Origin
&lt;a id="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-28" name="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-28" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_8dc0be02e62f48ecaa583b7182eaeea6-28"&gt;&lt;/a&gt;x-content-type-options: nosniff
&lt;a id="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-29" name="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-29" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_8dc0be02e62f48ecaa583b7182eaeea6-29"&gt;&lt;/a&gt;x-frame-options: DENY
&lt;a id="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-30" name="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-30" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_8dc0be02e62f48ecaa583b7182eaeea6-30"&gt;&lt;/a&gt;x-request-id: 52b64673-7371-4292-b508-ef26d617f344
&lt;a id="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-31" name="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-31" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_8dc0be02e62f48ecaa583b7182eaeea6-31"&gt;&lt;/a&gt;x-runtime: 0.023334
&lt;a id="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-32" name="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-32" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_8dc0be02e62f48ecaa583b7182eaeea6-32"&gt;&lt;/a&gt;x-xss-protection: 0
&lt;a id="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-33" name="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-33" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_8dc0be02e62f48ecaa583b7182eaeea6-33"&gt;&lt;/a&gt;
&lt;a id="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-34" name="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-34" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_8dc0be02e62f48ecaa583b7182eaeea6-34"&gt;&lt;/a&gt;{
&lt;a id="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-35" name="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-35" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_8dc0be02e62f48ecaa583b7182eaeea6-35"&gt;&lt;/a&gt;    "@context": [
&lt;a id="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-36" name="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-36" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_8dc0be02e62f48ecaa583b7182eaeea6-36"&gt;&lt;/a&gt;        "https://www.w3.org/ns/activitystreams",
&lt;a id="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-37" name="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-37" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_8dc0be02e62f48ecaa583b7182eaeea6-37"&gt;&lt;/a&gt;        "https://w3id.org/security/v1",
&lt;a id="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-38" name="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-38" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_8dc0be02e62f48ecaa583b7182eaeea6-38"&gt;&lt;/a&gt;        {
&lt;a id="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-39" name="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-39" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_8dc0be02e62f48ecaa583b7182eaeea6-39"&gt;&lt;/a&gt;            "Curve25519Key": "toot:Curve25519Key",
&lt;a id="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-40" name="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-40" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_8dc0be02e62f48ecaa583b7182eaeea6-40"&gt;&lt;/a&gt;            "Device": "toot:Device",
&lt;a id="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-41" name="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-41" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_8dc0be02e62f48ecaa583b7182eaeea6-41"&gt;&lt;/a&gt;            "Ed25519Key": "toot:Ed25519Key",
&lt;a id="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-42" name="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-42" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_8dc0be02e62f48ecaa583b7182eaeea6-42"&gt;&lt;/a&gt;            "Ed25519Signature": "toot:Ed25519Signature",
&lt;a id="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-43" name="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-43" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_8dc0be02e62f48ecaa583b7182eaeea6-43"&gt;&lt;/a&gt;            "Emoji": "toot:Emoji",
&lt;a id="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-44" name="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-44" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_8dc0be02e62f48ecaa583b7182eaeea6-44"&gt;&lt;/a&gt;            "EncryptedMessage": "toot:EncryptedMessage",
&lt;a id="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-45" name="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-45" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_8dc0be02e62f48ecaa583b7182eaeea6-45"&gt;&lt;/a&gt;            "PropertyValue": "schema:PropertyValue",
&lt;a id="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-46" name="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-46" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_8dc0be02e62f48ecaa583b7182eaeea6-46"&gt;&lt;/a&gt;            "alsoKnownAs": {
&lt;a id="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-47" name="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-47" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_8dc0be02e62f48ecaa583b7182eaeea6-47"&gt;&lt;/a&gt;                "@id": "as:alsoKnownAs",
&lt;a id="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-48" name="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-48" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_8dc0be02e62f48ecaa583b7182eaeea6-48"&gt;&lt;/a&gt;                "@type": "@id"
&lt;a id="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-49" name="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-49" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_8dc0be02e62f48ecaa583b7182eaeea6-49"&gt;&lt;/a&gt;            },
&lt;a id="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-50" name="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-50" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_8dc0be02e62f48ecaa583b7182eaeea6-50"&gt;&lt;/a&gt;            "cipherText": "toot:cipherText",
&lt;a id="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-51" name="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-51" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_8dc0be02e62f48ecaa583b7182eaeea6-51"&gt;&lt;/a&gt;            "claim": {
&lt;a id="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-52" name="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-52" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_8dc0be02e62f48ecaa583b7182eaeea6-52"&gt;&lt;/a&gt;                "@id": "toot:claim",
&lt;a id="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-53" name="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-53" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_8dc0be02e62f48ecaa583b7182eaeea6-53"&gt;&lt;/a&gt;                "@type": "@id"
&lt;a id="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-54" name="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-54" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_8dc0be02e62f48ecaa583b7182eaeea6-54"&gt;&lt;/a&gt;            },
&lt;a id="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-55" name="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-55" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_8dc0be02e62f48ecaa583b7182eaeea6-55"&gt;&lt;/a&gt;            "deviceId": "toot:deviceId",
&lt;a id="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-56" name="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-56" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_8dc0be02e62f48ecaa583b7182eaeea6-56"&gt;&lt;/a&gt;            "devices": {
&lt;a id="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-57" name="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-57" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_8dc0be02e62f48ecaa583b7182eaeea6-57"&gt;&lt;/a&gt;                "@id": "toot:devices",
&lt;a id="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-58" name="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-58" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_8dc0be02e62f48ecaa583b7182eaeea6-58"&gt;&lt;/a&gt;                "@type": "@id"
&lt;a id="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-59" name="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-59" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_8dc0be02e62f48ecaa583b7182eaeea6-59"&gt;&lt;/a&gt;            },
&lt;a id="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-60" name="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-60" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_8dc0be02e62f48ecaa583b7182eaeea6-60"&gt;&lt;/a&gt;            "discoverable": "toot:discoverable",
&lt;a id="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-61" name="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-61" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_8dc0be02e62f48ecaa583b7182eaeea6-61"&gt;&lt;/a&gt;            "featured": {
&lt;a id="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-62" name="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-62" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_8dc0be02e62f48ecaa583b7182eaeea6-62"&gt;&lt;/a&gt;                "@id": "toot:featured",
&lt;a id="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-63" name="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-63" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_8dc0be02e62f48ecaa583b7182eaeea6-63"&gt;&lt;/a&gt;                "@type": "@id"
&lt;a id="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-64" name="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-64" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_8dc0be02e62f48ecaa583b7182eaeea6-64"&gt;&lt;/a&gt;            },
&lt;a id="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-65" name="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-65" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_8dc0be02e62f48ecaa583b7182eaeea6-65"&gt;&lt;/a&gt;            "featuredTags": {
&lt;a id="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-66" name="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-66" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_8dc0be02e62f48ecaa583b7182eaeea6-66"&gt;&lt;/a&gt;                "@id": "toot:featuredTags",
&lt;a id="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-67" name="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-67" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_8dc0be02e62f48ecaa583b7182eaeea6-67"&gt;&lt;/a&gt;                "@type": "@id"
&lt;a id="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-68" name="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-68" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_8dc0be02e62f48ecaa583b7182eaeea6-68"&gt;&lt;/a&gt;            },
&lt;a id="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-69" name="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-69" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_8dc0be02e62f48ecaa583b7182eaeea6-69"&gt;&lt;/a&gt;            "fingerprintKey": {
&lt;a id="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-70" name="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-70" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_8dc0be02e62f48ecaa583b7182eaeea6-70"&gt;&lt;/a&gt;                "@id": "toot:fingerprintKey",
&lt;a id="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-71" name="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-71" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_8dc0be02e62f48ecaa583b7182eaeea6-71"&gt;&lt;/a&gt;                "@type": "@id"
&lt;a id="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-72" name="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-72" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_8dc0be02e62f48ecaa583b7182eaeea6-72"&gt;&lt;/a&gt;            },
&lt;a id="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-73" name="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-73" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_8dc0be02e62f48ecaa583b7182eaeea6-73"&gt;&lt;/a&gt;            "focalPoint": {
&lt;a id="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-74" name="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-74" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_8dc0be02e62f48ecaa583b7182eaeea6-74"&gt;&lt;/a&gt;                "@container": "@list",
&lt;a id="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-75" name="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-75" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_8dc0be02e62f48ecaa583b7182eaeea6-75"&gt;&lt;/a&gt;                "@id": "toot:focalPoint"
&lt;a id="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-76" name="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-76" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_8dc0be02e62f48ecaa583b7182eaeea6-76"&gt;&lt;/a&gt;            },
&lt;a id="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-77" name="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-77" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_8dc0be02e62f48ecaa583b7182eaeea6-77"&gt;&lt;/a&gt;            "identityKey": {
&lt;a id="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-78" name="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-78" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_8dc0be02e62f48ecaa583b7182eaeea6-78"&gt;&lt;/a&gt;                "@id": "toot:identityKey",
&lt;a id="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-79" name="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-79" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_8dc0be02e62f48ecaa583b7182eaeea6-79"&gt;&lt;/a&gt;                "@type": "@id"
&lt;a id="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-80" name="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-80" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_8dc0be02e62f48ecaa583b7182eaeea6-80"&gt;&lt;/a&gt;            },
&lt;a id="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-81" name="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-81" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_8dc0be02e62f48ecaa583b7182eaeea6-81"&gt;&lt;/a&gt;            "manuallyApprovesFollowers": "as:manuallyApprovesFollowers",
&lt;a id="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-82" name="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-82" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_8dc0be02e62f48ecaa583b7182eaeea6-82"&gt;&lt;/a&gt;            "messageFranking": "toot:messageFranking",
&lt;a id="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-83" name="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-83" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_8dc0be02e62f48ecaa583b7182eaeea6-83"&gt;&lt;/a&gt;            "messageType": "toot:messageType",
&lt;a id="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-84" name="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-84" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_8dc0be02e62f48ecaa583b7182eaeea6-84"&gt;&lt;/a&gt;            "movedTo": {
&lt;a id="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-85" name="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-85" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_8dc0be02e62f48ecaa583b7182eaeea6-85"&gt;&lt;/a&gt;                "@id": "as:movedTo",
&lt;a id="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-86" name="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-86" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_8dc0be02e62f48ecaa583b7182eaeea6-86"&gt;&lt;/a&gt;                "@type": "@id"
&lt;a id="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-87" name="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-87" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_8dc0be02e62f48ecaa583b7182eaeea6-87"&gt;&lt;/a&gt;            },
&lt;a id="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-88" name="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-88" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_8dc0be02e62f48ecaa583b7182eaeea6-88"&gt;&lt;/a&gt;            "publicKeyBase64": "toot:publicKeyBase64",
&lt;a id="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-89" name="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-89" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_8dc0be02e62f48ecaa583b7182eaeea6-89"&gt;&lt;/a&gt;            "schema": "http://schema.org#",
&lt;a id="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-90" name="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-90" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_8dc0be02e62f48ecaa583b7182eaeea6-90"&gt;&lt;/a&gt;            "suspended": "toot:suspended",
&lt;a id="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-91" name="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-91" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_8dc0be02e62f48ecaa583b7182eaeea6-91"&gt;&lt;/a&gt;            "toot": "http://joinmastodon.org/ns#",
&lt;a id="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-92" name="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-92" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_8dc0be02e62f48ecaa583b7182eaeea6-92"&gt;&lt;/a&gt;            "value": "schema:value"
&lt;a id="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-93" name="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-93" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_8dc0be02e62f48ecaa583b7182eaeea6-93"&gt;&lt;/a&gt;        }
&lt;a id="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-94" name="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-94" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_8dc0be02e62f48ecaa583b7182eaeea6-94"&gt;&lt;/a&gt;    ],
&lt;a id="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-95" name="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-95" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_8dc0be02e62f48ecaa583b7182eaeea6-95"&gt;&lt;/a&gt;    "attachment": [
&lt;a id="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-96" name="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-96" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_8dc0be02e62f48ecaa583b7182eaeea6-96"&gt;&lt;/a&gt;        {
&lt;a id="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-97" name="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-97" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_8dc0be02e62f48ecaa583b7182eaeea6-97"&gt;&lt;/a&gt;            "name": "Matrix",
&lt;a id="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-98" name="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-98" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_8dc0be02e62f48ecaa583b7182eaeea6-98"&gt;&lt;/a&gt;            "type": "PropertyValue",
&lt;a id="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-99" name="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-99" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_8dc0be02e62f48ecaa583b7182eaeea6-99"&gt;&lt;/a&gt;            "value": "&amp;lt;span class=\"h-card\"&amp;gt;&amp;lt;a href=\"https://mtd.naraku.cc/@naraku\" class=\"u-url mention\"&amp;gt;@&amp;lt;span&amp;gt;naraku&amp;lt;/span&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/span&amp;gt;:naraku.cc"
&lt;a id="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-100" name="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-100" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_8dc0be02e62f48ecaa583b7182eaeea6-100"&gt;&lt;/a&gt;        }
&lt;a id="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-101" name="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-101" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_8dc0be02e62f48ecaa583b7182eaeea6-101"&gt;&lt;/a&gt;    ],
&lt;a id="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-102" name="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-102" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_8dc0be02e62f48ecaa583b7182eaeea6-102"&gt;&lt;/a&gt;    "devices": "https://mtd.naraku.cc/users/naraku/collections/devices",
&lt;a id="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-103" name="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-103" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_8dc0be02e62f48ecaa583b7182eaeea6-103"&gt;&lt;/a&gt;    "discoverable": true,
&lt;a id="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-104" name="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-104" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_8dc0be02e62f48ecaa583b7182eaeea6-104"&gt;&lt;/a&gt;    "endpoints": {
&lt;a id="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-105" name="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-105" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_8dc0be02e62f48ecaa583b7182eaeea6-105"&gt;&lt;/a&gt;        "sharedInbox": "https://mtd.naraku.cc/inbox"
&lt;a id="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-106" name="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-106" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_8dc0be02e62f48ecaa583b7182eaeea6-106"&gt;&lt;/a&gt;    },
&lt;a id="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-107" name="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-107" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_8dc0be02e62f48ecaa583b7182eaeea6-107"&gt;&lt;/a&gt;    "featured": "https://mtd.naraku.cc/users/naraku/collections/featured",
&lt;a id="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-108" name="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-108" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_8dc0be02e62f48ecaa583b7182eaeea6-108"&gt;&lt;/a&gt;    "featuredTags": "https://mtd.naraku.cc/users/naraku/collections/tags",
&lt;a id="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-109" name="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-109" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_8dc0be02e62f48ecaa583b7182eaeea6-109"&gt;&lt;/a&gt;    "followers": "https://mtd.naraku.cc/users/naraku/followers",
&lt;a id="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-110" name="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-110" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_8dc0be02e62f48ecaa583b7182eaeea6-110"&gt;&lt;/a&gt;    "following": "https://mtd.naraku.cc/users/naraku/following",
&lt;a id="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-111" name="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-111" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_8dc0be02e62f48ecaa583b7182eaeea6-111"&gt;&lt;/a&gt;    "icon": {
&lt;a id="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-112" name="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-112" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_8dc0be02e62f48ecaa583b7182eaeea6-112"&gt;&lt;/a&gt;        "mediaType": "image/jpeg",
&lt;a id="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-113" name="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-113" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_8dc0be02e62f48ecaa583b7182eaeea6-113"&gt;&lt;/a&gt;        "type": "Image",
&lt;a id="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-114" name="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-114" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_8dc0be02e62f48ecaa583b7182eaeea6-114"&gt;&lt;/a&gt;        "url": "https://mtd.naraku.cc/system/accounts/avatars/109/513/842/758/850/375/original/355c3a2e588b4fba.jpeg"
&lt;a id="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-115" name="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-115" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_8dc0be02e62f48ecaa583b7182eaeea6-115"&gt;&lt;/a&gt;    },
&lt;a id="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-116" name="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-116" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_8dc0be02e62f48ecaa583b7182eaeea6-116"&gt;&lt;/a&gt;    "id": "https://mtd.naraku.cc/users/naraku",
&lt;a id="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-117" name="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-117" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_8dc0be02e62f48ecaa583b7182eaeea6-117"&gt;&lt;/a&gt;    "image": {
&lt;a id="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-118" name="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-118" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_8dc0be02e62f48ecaa583b7182eaeea6-118"&gt;&lt;/a&gt;        "mediaType": "image/jpeg",
&lt;a id="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-119" name="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-119" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_8dc0be02e62f48ecaa583b7182eaeea6-119"&gt;&lt;/a&gt;        "type": "Image",
&lt;a id="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-120" name="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-120" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_8dc0be02e62f48ecaa583b7182eaeea6-120"&gt;&lt;/a&gt;        "url": "https://mtd.naraku.cc/system/accounts/headers/109/513/842/758/850/375/original/156276bb27f3591e.jpeg"
&lt;a id="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-121" name="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-121" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_8dc0be02e62f48ecaa583b7182eaeea6-121"&gt;&lt;/a&gt;    },
&lt;a id="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-122" name="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-122" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_8dc0be02e62f48ecaa583b7182eaeea6-122"&gt;&lt;/a&gt;    "inbox": "https://mtd.naraku.cc/users/naraku/inbox",
&lt;a id="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-123" name="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-123" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_8dc0be02e62f48ecaa583b7182eaeea6-123"&gt;&lt;/a&gt;    "manuallyApprovesFollowers": false,
&lt;a id="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-124" name="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-124" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_8dc0be02e62f48ecaa583b7182eaeea6-124"&gt;&lt;/a&gt;    "name": "Naraku :mastodon:",
&lt;a id="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-125" name="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-125" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_8dc0be02e62f48ecaa583b7182eaeea6-125"&gt;&lt;/a&gt;    "outbox": "https://mtd.naraku.cc/users/naraku/outbox",
&lt;a id="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-126" name="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-126" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_8dc0be02e62f48ecaa583b7182eaeea6-126"&gt;&lt;/a&gt;    "preferredUsername": "naraku",
&lt;a id="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-127" name="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-127" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_8dc0be02e62f48ecaa583b7182eaeea6-127"&gt;&lt;/a&gt;    "publicKey": {
&lt;a id="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-128" name="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-128" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_8dc0be02e62f48ecaa583b7182eaeea6-128"&gt;&lt;/a&gt;        "id": "https://mtd.naraku.cc/users/naraku#main-key",
&lt;a id="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-129" name="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-129" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_8dc0be02e62f48ecaa583b7182eaeea6-129"&gt;&lt;/a&gt;        "owner": "https://mtd.naraku.cc/users/naraku",
&lt;a id="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-130" name="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-130" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_8dc0be02e62f48ecaa583b7182eaeea6-130"&gt;&lt;/a&gt;        "publicKeyPem": "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArYihLR7VFAiMymGUwkxo\nmMQCaHd9FD59oUfGWGKVCsJ/IkeIbi0+jM5LyeC/QdwCC/ZRgMNvS4zIQgakSRoq\nkiRN3KL3Nv9Uqo9bjC21/H6bgPiZ1aEmck9sZgN0Polxwa3SPeJ08wY8AOWPnGrg\n0kin8+7D1pkemFSfJSJSjPvc9PrKOBCVdbF74haHA99LeHo6GO75P4iLHQnlw565\nVNrUnbtH52Bcoeavrt0SDdQX239z1YqmRxAuApYlg1l4Hy/+hpmUAoCQJs3ogsjF\nTCjo1jpHgcnKRHn3gLL3o7m4+SpeUuXtFOnsXVnYujpnY0p1ejPx8gwAXcI8kwNI\ngQIDAQAB\n-----END PUBLIC KEY-----\n"
&lt;a id="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-131" name="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-131" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_8dc0be02e62f48ecaa583b7182eaeea6-131"&gt;&lt;/a&gt;    },
&lt;a id="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-132" name="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-132" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_8dc0be02e62f48ecaa583b7182eaeea6-132"&gt;&lt;/a&gt;    "published": "2022-12-14T00:00:00Z",
&lt;a id="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-133" name="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-133" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_8dc0be02e62f48ecaa583b7182eaeea6-133"&gt;&lt;/a&gt;    "summary": "&amp;lt;p&amp;gt;naraku.cc Admin :verify:&amp;lt;/p&amp;gt;&amp;lt;p&amp;gt;Stand with Ukraine! 🇺🇦 &amp;lt;br /&amp;gt;Stand with Democracy!&amp;lt;/p&amp;gt;",
&lt;a id="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-134" name="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-134" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_8dc0be02e62f48ecaa583b7182eaeea6-134"&gt;&lt;/a&gt;    "tag": [
&lt;a id="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-135" name="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-135" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_8dc0be02e62f48ecaa583b7182eaeea6-135"&gt;&lt;/a&gt;        {
&lt;a id="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-136" name="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-136" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_8dc0be02e62f48ecaa583b7182eaeea6-136"&gt;&lt;/a&gt;            "icon": {
&lt;a id="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-137" name="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-137" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_8dc0be02e62f48ecaa583b7182eaeea6-137"&gt;&lt;/a&gt;                "mediaType": "image/gif",
&lt;a id="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-138" name="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-138" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_8dc0be02e62f48ecaa583b7182eaeea6-138"&gt;&lt;/a&gt;                "type": "Image",
&lt;a id="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-139" name="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-139" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_8dc0be02e62f48ecaa583b7182eaeea6-139"&gt;&lt;/a&gt;                "url": "https://mtd.naraku.cc/system/custom_emojis/images/2022/000/000/973/original/20775f75cba35af7.gif"
&lt;a id="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-140" name="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-140" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_8dc0be02e62f48ecaa583b7182eaeea6-140"&gt;&lt;/a&gt;            },
&lt;a id="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-141" name="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-141" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_8dc0be02e62f48ecaa583b7182eaeea6-141"&gt;&lt;/a&gt;            "id": "https://mtd.naraku.cc/emojis/973",
&lt;a id="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-142" name="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-142" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_8dc0be02e62f48ecaa583b7182eaeea6-142"&gt;&lt;/a&gt;            "name": ":verify:",
&lt;a id="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-143" name="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-143" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_8dc0be02e62f48ecaa583b7182eaeea6-143"&gt;&lt;/a&gt;            "type": "Emoji",
&lt;a id="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-144" name="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-144" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_8dc0be02e62f48ecaa583b7182eaeea6-144"&gt;&lt;/a&gt;            "updated": "2022-12-17T17:26:50Z"
&lt;a id="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-145" name="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-145" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_8dc0be02e62f48ecaa583b7182eaeea6-145"&gt;&lt;/a&gt;        },
&lt;a id="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-146" name="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-146" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_8dc0be02e62f48ecaa583b7182eaeea6-146"&gt;&lt;/a&gt;        {
&lt;a id="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-147" name="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-147" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_8dc0be02e62f48ecaa583b7182eaeea6-147"&gt;&lt;/a&gt;            "icon": {
&lt;a id="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-148" name="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-148" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_8dc0be02e62f48ecaa583b7182eaeea6-148"&gt;&lt;/a&gt;                "mediaType": "image/png",
&lt;a id="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-149" name="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-149" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_8dc0be02e62f48ecaa583b7182eaeea6-149"&gt;&lt;/a&gt;                "type": "Image",
&lt;a id="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-150" name="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-150" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_8dc0be02e62f48ecaa583b7182eaeea6-150"&gt;&lt;/a&gt;                "url": "https://mtd.naraku.cc/system/custom_emojis/images/2022/000/000/099/original/56fceeecb032309c.png"
&lt;a id="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-151" name="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-151" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_8dc0be02e62f48ecaa583b7182eaeea6-151"&gt;&lt;/a&gt;            },
&lt;a id="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-152" name="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-152" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_8dc0be02e62f48ecaa583b7182eaeea6-152"&gt;&lt;/a&gt;            "id": "https://mtd.naraku.cc/emojis/99",
&lt;a id="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-153" name="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-153" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_8dc0be02e62f48ecaa583b7182eaeea6-153"&gt;&lt;/a&gt;            "name": ":mastodon:",
&lt;a id="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-154" name="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-154" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_8dc0be02e62f48ecaa583b7182eaeea6-154"&gt;&lt;/a&gt;            "type": "Emoji",
&lt;a id="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-155" name="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-155" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_8dc0be02e62f48ecaa583b7182eaeea6-155"&gt;&lt;/a&gt;            "updated": "2022-12-17T10:45:48Z"
&lt;a id="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-156" name="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-156" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_8dc0be02e62f48ecaa583b7182eaeea6-156"&gt;&lt;/a&gt;        }
&lt;a id="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-157" name="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-157" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_8dc0be02e62f48ecaa583b7182eaeea6-157"&gt;&lt;/a&gt;    ],
&lt;a id="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-158" name="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-158" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_8dc0be02e62f48ecaa583b7182eaeea6-158"&gt;&lt;/a&gt;    "type": "Person",
&lt;a id="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-159" name="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-159" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_8dc0be02e62f48ecaa583b7182eaeea6-159"&gt;&lt;/a&gt;    "url": "https://mtd.naraku.cc/@naraku"
&lt;a id="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-160" name="rest_code_8dc0be02e62f48ecaa583b7182eaeea6-160" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_8dc0be02e62f48ecaa583b7182eaeea6-160"&gt;&lt;/a&gt;}
&lt;/pre&gt;&lt;/div&gt;
&lt;/section&gt;
&lt;section id="alternate-domains"&gt;
&lt;h3&gt;&lt;a class="toc-backref" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#toc-entry-6" role="doc-backlink"&gt;ALTERNATE_DOMAINS&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;指向该服务器的其它域名。如果有多个域名指向 Mastodon 服务器，配置 &lt;code class="docutils literal"&gt;ALTERNATE_DOMAINS&lt;/code&gt; 允许 Fediverse 服务通过其它域名发现帐户。可配置多个域名，域名之间使用逗号隔开，如 &lt;code class="docutils literal"&gt;foo.com,bar.com&lt;/code&gt; 。&lt;/p&gt;
&lt;p&gt;从实现上讲对于列入 &lt;code class="docutils literal"&gt;ALTERNATE_DOMAINS&lt;/code&gt; 的域名，Mastodon 将响应来自这些域名的 WebFinger 查询请求，故其它实例可通过相应的后缀查找到原始帐户。&lt;/p&gt;
&lt;figure class="align-center"&gt;
&lt;a class="reference external image-reference" href="https://blog.bgme.me/images/2022/full-explanation-of-mastodon-domain-name-settings/webfinger_bgme_bgme.bid.png"&gt;&lt;img alt="/images/2022/full-explanation-of-mastodon-domain-name-settings/webfinger_bgme_bgme.bid.thumbnail.png" src="https://blog.bgme.me/images/2022/full-explanation-of-mastodon-domain-name-settings/webfinger_bgme_bgme.bid.thumbnail.png"&gt;&lt;/a&gt;
&lt;figcaption&gt;
&lt;p&gt;通过 WebFinger 协议查询 &lt;code class="docutils literal"&gt;acct:bgme@bgme.bid&lt;/code&gt;&lt;/p&gt;
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;Mastodon v3.4.0 以后版本 &lt;a class="footnote-reference brackets" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#footnote-1" id="footnote-reference-1" role="doc-noteref"&gt;&lt;span class="fn-bracket"&gt;[&lt;/span&gt;1&lt;span class="fn-bracket"&gt;]&lt;/span&gt;&lt;/a&gt; ，出于安全性考量，Puma 只响应 &lt;code class="docutils literal"&gt;Host&lt;/code&gt; 为 &lt;code class="docutils literal"&gt;LOCAL_DOMAIN&lt;/code&gt;、&lt;code class="docutils literal"&gt;WEB_DOMAIN&lt;/code&gt;、&lt;code class="docutils literal"&gt;ALTERNATE_DOMAINS&lt;/code&gt; 的 HTTP 请求。对于其它 Host 一律近回 &lt;code class="docutils literal"&gt;403 Forbidden&lt;/code&gt; 响应。&lt;/p&gt;
&lt;aside class="footnote-list brackets"&gt;
&lt;aside class="footnote brackets" id="footnote-1" role="doc-footnote"&gt;
&lt;span class="label"&gt;&lt;span class="fn-bracket"&gt;[&lt;/span&gt;&lt;a role="doc-backlink" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#footnote-reference-1"&gt;1&lt;/a&gt;&lt;span class="fn-bracket"&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;p&gt;&lt;a class="reference external" href="https://github.com/mastodon/mastodon/commit/83230234643bb53ba563e42d73fb91a0dcfbff64"&gt;Add guard against DNS rebinding attacks (#16087)&lt;/a&gt;&lt;/p&gt;
&lt;/aside&gt;
&lt;/aside&gt;
&lt;/section&gt;
&lt;section id="streaming-api-base-url"&gt;
&lt;h3&gt;&lt;a class="toc-backref" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#toc-entry-7" role="doc-backlink"&gt;STREAMING_API_BASE_URL&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;设置 &lt;code class="docutils literal"&gt;STREAMING_API_BASE_URL&lt;/code&gt; 可将 streaming API 部署于不同域名或不同子域名。这可能有助于提高 streaming API 的性能。&lt;/p&gt;
&lt;p&gt;示例值：&lt;code class="docutils literal"&gt;&lt;span class="pre"&gt;wss://streaming.example.com&lt;/span&gt;&lt;/code&gt;。&lt;/p&gt;
&lt;figure class="align-center"&gt;
&lt;a class="reference external image-reference" href="https://blog.bgme.me/images/2022/full-explanation-of-mastodon-domain-name-settings/stream_api_api_v1_instance.png"&gt;&lt;img alt="/images/2022/full-explanation-of-mastodon-domain-name-settings/stream_api_api_v1_instance.thumbnail.png" src="https://blog.bgme.me/images/2022/full-explanation-of-mastodon-domain-name-settings/stream_api_api_v1_instance.thumbnail.png"&gt;&lt;/a&gt;
&lt;figcaption&gt;
&lt;p&gt;GET /api/v1/instance&lt;/p&gt;
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class="align-center"&gt;
&lt;a class="reference external image-reference" href="https://blog.bgme.me/images/2022/full-explanation-of-mastodon-domain-name-settings/stream_api_initial_state.png"&gt;&lt;img alt="/images/2022/full-explanation-of-mastodon-domain-name-settings/stream_api_initial_state.thumbnail.png" src="https://blog.bgme.me/images/2022/full-explanation-of-mastodon-domain-name-settings/stream_api_initial_state.thumbnail.png"&gt;&lt;/a&gt;
&lt;figcaption&gt;
&lt;p&gt;initial-state&lt;/p&gt;
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/section&gt;
&lt;section id="cdn-host"&gt;
&lt;h3&gt;&lt;a class="toc-backref" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#toc-entry-8" role="doc-backlink"&gt;CDN_HOST&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;你可以通过设置 &lt;code class="docutils literal"&gt;CDN_HOST&lt;/code&gt; 将静态文件（logos，emojis，CSS，JS 等等等）托管于独立域名，如CDN（内容分发网络，Content Delivery Network），这将降低用户加载时间。&lt;/p&gt;
&lt;p&gt;示例值：&lt;code class="docutils literal"&gt;&lt;span class="pre"&gt;https://assets.example.com&lt;/span&gt;&lt;/code&gt;。&lt;/p&gt;
&lt;figure class="align-center"&gt;
&lt;a class="reference external image-reference" href="https://blog.bgme.me/images/2022/full-explanation-of-mastodon-domain-name-settings/cdn_host.png"&gt;&lt;img alt="/images/2022/full-explanation-of-mastodon-domain-name-settings/cdn_host.thumbnail.png" src="https://blog.bgme.me/images/2022/full-explanation-of-mastodon-domain-name-settings/cdn_host.thumbnail.png"&gt;&lt;/a&gt;
&lt;figcaption&gt;
&lt;p&gt;CDN_HOST&lt;/p&gt;
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/section&gt;
&lt;section id="s3-alias-host"&gt;
&lt;h3&gt;&lt;a class="toc-backref" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#toc-entry-9" role="doc-backlink"&gt;S3_ALIAS_HOST&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;类似于 &lt;code class="docutils literal"&gt;CDN_HOST&lt;/code&gt;，设置 &lt;code class="docutils literal"&gt;S3_ALIAS_HOST&lt;/code&gt; 可以将用户上传内容托管至一独立域名。&lt;/p&gt;
&lt;p&gt;示例值： &lt;code class="docutils literal"&gt;files.example.com&lt;/code&gt;。&lt;/p&gt;
&lt;figure class="align-center"&gt;
&lt;a class="reference external image-reference" href="https://blog.bgme.me/images/2022/full-explanation-of-mastodon-domain-name-settings/s3_alias_host_search.png"&gt;&lt;img alt="/images/2022/full-explanation-of-mastodon-domain-name-settings/s3_alias_host_search.thumbnail.png" src="https://blog.bgme.me/images/2022/full-explanation-of-mastodon-domain-name-settings/s3_alias_host_search.thumbnail.png"&gt;&lt;/a&gt;
&lt;figcaption&gt;
&lt;p&gt;Search&lt;/p&gt;
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class="align-center"&gt;
&lt;a class="reference external image-reference" href="https://blog.bgme.me/images/2022/full-explanation-of-mastodon-domain-name-settings/s3_alias_host_xhr.png"&gt;&lt;img alt="/images/2022/full-explanation-of-mastodon-domain-name-settings/s3_alias_host_xhr.thumbnail.png" src="https://blog.bgme.me/images/2022/full-explanation-of-mastodon-domain-name-settings/s3_alias_host_xhr.thumbnail.png" style="height: 15em;"&gt;&lt;/a&gt;
&lt;figcaption&gt;
&lt;p&gt;XHR&lt;/p&gt;
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class="align-center"&gt;
&lt;a class="reference external image-reference" href="https://blog.bgme.me/images/2022/full-explanation-of-mastodon-domain-name-settings/s3_alias_host_ws.png"&gt;&lt;img alt="/images/2022/full-explanation-of-mastodon-domain-name-settings/s3_alias_host_ws.thumbnail.png" src="https://blog.bgme.me/images/2022/full-explanation-of-mastodon-domain-name-settings/s3_alias_host_ws.thumbnail.png"&gt;&lt;/a&gt;
&lt;figcaption&gt;
&lt;p&gt;websocket&lt;/p&gt;
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/section&gt;
&lt;section id="section-1"&gt;
&lt;h3&gt;&lt;a class="toc-backref" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#toc-entry-10" role="doc-backlink"&gt;域名注意事项&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;如前所述，&lt;/p&gt;
&lt;p&gt;Mastodon域名不但是你的用户访问你服务器的方式，更是你的实例和你的用户在联邦宇宙中的身份标识。是后者而不是前者决定了权威域名无法更改。&lt;/p&gt;
&lt;p&gt;如果你使用 masto.host 这类的全托管服务，其可能会为你的实例提供 masto.host 子域。但千万注意，实例的域名一定要自行注册，不要使用全托管服务商为你提供的下属子域。
现在设想这样一个场景，masto.host 宣布下个月要大幅提高托管服务收费，因为太贵了，你不再想使用masto.host托管服务了。&lt;/p&gt;
&lt;p&gt;如果你使用的是自己的域名，那么很简单，只需要导出数据库、导出媒体文件、导出应用密钥，然后使用这些东西转移到另一家托管服务商或自己托管服务器，然后把域名指向新托管商或新服务器就OK了。&lt;/p&gt;
&lt;p&gt;但如果你使用的是 masto.host 的域名，那么你就面临这样一个窘境，你的实例域名是属于masto.host所有，而不是你自己所有，你现在不使用masto.host的服务了，masto.host自然没有义务为你提供域名。由于Mastodon域名一旦确定便不能被更改，如果masto.host不为你提供域名，那你的实例就只能下线。这时如果你实例已经积累了相当用户，又同时希望能继续运行，那你就只有忍受masto.host提价这一个选择，即使价格再贵。&lt;/p&gt;
&lt;/section&gt;
&lt;/section&gt;
&lt;section id="section-2"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#toc-entry-11" role="doc-backlink"&gt;实际操作篇&lt;/a&gt;&lt;/h2&gt;
&lt;section id="mastodon-3"&gt;
&lt;h3&gt;&lt;a class="toc-backref" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#toc-entry-12" role="doc-backlink"&gt;在不同域名托管 Mastodon 服务&lt;/a&gt;&lt;/h3&gt;
&lt;/section&gt;
&lt;section id="section-3"&gt;
&lt;h3&gt;&lt;a class="toc-backref" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#toc-entry-13" role="doc-backlink"&gt;添加反代域名&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;大致步骤：&lt;/p&gt;
&lt;ol class="arabic simple"&gt;
&lt;li&gt;&lt;p&gt;组网（同一台机器的情况下可省略）&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;修改环境变量，将 Puma 监听地址改为 &lt;code class="docutils literal"&gt;0.0.0.0&lt;/code&gt; （同一台机器的情况下可省略）&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;同步 &lt;code class="docutils literal"&gt;/home/mastodon/live/public&lt;/code&gt; （同一台机器的情况下可省略）&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;将反代域名添加至 &lt;code class="docutils literal"&gt;ALTERNATE_DOMAINS&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;创建 MITM 代理，修改 websocket 流中的 &lt;code class="docutils literal"&gt;S3_ALIAS_HOST&lt;/code&gt; （可选）&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;dl class="simple"&gt;
&lt;dt&gt;修改 nginx 配置&lt;/dt&gt;
&lt;dd&gt;&lt;ol class="upperalpha simple"&gt;
&lt;li&gt;&lt;dl class="simple"&gt;
&lt;dt&gt;未设置 &lt;code class="docutils literal"&gt;STREAMING_API_BASE_URL&lt;/code&gt; 、&lt;code class="docutils literal"&gt;CDN_HOST&lt;/code&gt; 、&lt;code class="docutils literal"&gt;S3_ALIAS_HOST&lt;/code&gt;&lt;/dt&gt;
&lt;dd&gt;&lt;ol class="loweralpha simple"&gt;
&lt;li&gt;&lt;p&gt;将反代域名添加至 &lt;code class="docutils literal"&gt;server_name&lt;/code&gt; 中&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;重新生成证书&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/dd&gt;
&lt;/dl&gt;
&lt;/li&gt;
&lt;li&gt;&lt;dl class="simple"&gt;
&lt;dt&gt;需修改 &lt;code class="docutils literal"&gt;STREAMING_API_BASE_URL&lt;/code&gt; 、&lt;code class="docutils literal"&gt;CDN_HOST&lt;/code&gt; 、&lt;code class="docutils literal"&gt;S3_ALIAS_HOST&lt;/code&gt;&lt;/dt&gt;
&lt;dd&gt;&lt;ol class="loweralpha simple"&gt;
&lt;li&gt;&lt;p&gt;复制创建新一份配置文件&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;修改 &lt;code class="docutils literal"&gt;proxy_cache_path&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;添加 &lt;code class="docutils literal"&gt;proxy_set_header &lt;span class="pre"&gt;Accept-Encoding&lt;/span&gt; identity;&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;替换 &lt;code class="docutils literal"&gt;STREAMING_API_BASE_URL&lt;/code&gt; （可选）&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;替换 &lt;code class="docutils literal"&gt;CDN_HOST&lt;/code&gt; （可选）&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;替换 &lt;code class="docutils literal"&gt;S3_ALIAS_HOST&lt;/code&gt; （可选）&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;重新生成证书&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/dd&gt;
&lt;/dl&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/dd&gt;
&lt;/dl&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;修改 nginx 配置的 &lt;code class="docutils literal"&gt;/api/v1/streaming&lt;/code&gt; 部分（可选）&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;重载 nginx 配置&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="code"&gt;&lt;pre class="code nginx"&gt;&lt;a id="rest_code_c78c0419bd344169a8f30c90118a90e8-1" name="rest_code_c78c0419bd344169a8f30c90118a90e8-1" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_c78c0419bd344169a8f30c90118a90e8-1"&gt;&lt;/a&gt;&lt;span class="c1"&gt;# 同一机器需删去该部分&lt;/span&gt;
&lt;a id="rest_code_c78c0419bd344169a8f30c90118a90e8-2" name="rest_code_c78c0419bd344169a8f30c90118a90e8-2" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_c78c0419bd344169a8f30c90118a90e8-2"&gt;&lt;/a&gt;&lt;span class="k"&gt;map&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$http_upgrade&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$connection_upgrade&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;a id="rest_code_c78c0419bd344169a8f30c90118a90e8-3" name="rest_code_c78c0419bd344169a8f30c90118a90e8-3" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_c78c0419bd344169a8f30c90118a90e8-3"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kn"&gt;default&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;upgrade&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;a id="rest_code_c78c0419bd344169a8f30c90118a90e8-4" name="rest_code_c78c0419bd344169a8f30c90118a90e8-4" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_c78c0419bd344169a8f30c90118a90e8-4"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kn"&gt;''&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="s"&gt;close&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;a id="rest_code_c78c0419bd344169a8f30c90118a90e8-5" name="rest_code_c78c0419bd344169a8f30c90118a90e8-5" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_c78c0419bd344169a8f30c90118a90e8-5"&gt;&lt;/a&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;a id="rest_code_c78c0419bd344169a8f30c90118a90e8-6" name="rest_code_c78c0419bd344169a8f30c90118a90e8-6" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_c78c0419bd344169a8f30c90118a90e8-6"&gt;&lt;/a&gt;
&lt;a id="rest_code_c78c0419bd344169a8f30c90118a90e8-7" name="rest_code_c78c0419bd344169a8f30c90118a90e8-7" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_c78c0419bd344169a8f30c90118a90e8-7"&gt;&lt;/a&gt;&lt;span class="c1"&gt;# 同一机器需修改名称&lt;/span&gt;
&lt;a id="rest_code_c78c0419bd344169a8f30c90118a90e8-8" name="rest_code_c78c0419bd344169a8f30c90118a90e8-8" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_c78c0419bd344169a8f30c90118a90e8-8"&gt;&lt;/a&gt;&lt;span class="k"&gt;upstream&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;backend&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;a id="rest_code_c78c0419bd344169a8f30c90118a90e8-9" name="rest_code_c78c0419bd344169a8f30c90118a90e8-9" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_c78c0419bd344169a8f30c90118a90e8-9"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kn"&gt;server&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;127.0.0.1&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;3000&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;fail_timeout=0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;a id="rest_code_c78c0419bd344169a8f30c90118a90e8-10" name="rest_code_c78c0419bd344169a8f30c90118a90e8-10" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_c78c0419bd344169a8f30c90118a90e8-10"&gt;&lt;/a&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;a id="rest_code_c78c0419bd344169a8f30c90118a90e8-11" name="rest_code_c78c0419bd344169a8f30c90118a90e8-11" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_c78c0419bd344169a8f30c90118a90e8-11"&gt;&lt;/a&gt;
&lt;a id="rest_code_c78c0419bd344169a8f30c90118a90e8-12" name="rest_code_c78c0419bd344169a8f30c90118a90e8-12" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_c78c0419bd344169a8f30c90118a90e8-12"&gt;&lt;/a&gt;&lt;span class="c1"&gt;# 同一机器需修改名称，根据需求将 stream API 上游地址修改为 MITM  代理&lt;/span&gt;
&lt;a id="rest_code_c78c0419bd344169a8f30c90118a90e8-13" name="rest_code_c78c0419bd344169a8f30c90118a90e8-13" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_c78c0419bd344169a8f30c90118a90e8-13"&gt;&lt;/a&gt;&lt;span class="k"&gt;upstream&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;streaming&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;a id="rest_code_c78c0419bd344169a8f30c90118a90e8-14" name="rest_code_c78c0419bd344169a8f30c90118a90e8-14" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_c78c0419bd344169a8f30c90118a90e8-14"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kn"&gt;server&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;127.0.0.1&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;4000&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;fail_timeout=0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;a id="rest_code_c78c0419bd344169a8f30c90118a90e8-15" name="rest_code_c78c0419bd344169a8f30c90118a90e8-15" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_c78c0419bd344169a8f30c90118a90e8-15"&gt;&lt;/a&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;a id="rest_code_c78c0419bd344169a8f30c90118a90e8-16" name="rest_code_c78c0419bd344169a8f30c90118a90e8-16" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_c78c0419bd344169a8f30c90118a90e8-16"&gt;&lt;/a&gt;
&lt;a id="rest_code_c78c0419bd344169a8f30c90118a90e8-17" name="rest_code_c78c0419bd344169a8f30c90118a90e8-17" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_c78c0419bd344169a8f30c90118a90e8-17"&gt;&lt;/a&gt;&lt;span class="c1"&gt;# 同一机器需删去该部分&lt;/span&gt;
&lt;a id="rest_code_c78c0419bd344169a8f30c90118a90e8-18" name="rest_code_c78c0419bd344169a8f30c90118a90e8-18" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_c78c0419bd344169a8f30c90118a90e8-18"&gt;&lt;/a&gt;&lt;span class="k"&gt;proxy_cache_path&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;/var/cache/nginx&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;levels=1:2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;keys_zone=CACHE:10m&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;inactive=7d&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;max_size=1g&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;a id="rest_code_c78c0419bd344169a8f30c90118a90e8-19" name="rest_code_c78c0419bd344169a8f30c90118a90e8-19" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_c78c0419bd344169a8f30c90118a90e8-19"&gt;&lt;/a&gt;
&lt;a id="rest_code_c78c0419bd344169a8f30c90118a90e8-20" name="rest_code_c78c0419bd344169a8f30c90118a90e8-20" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_c78c0419bd344169a8f30c90118a90e8-20"&gt;&lt;/a&gt;&lt;span class="k"&gt;server&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;a id="rest_code_c78c0419bd344169a8f30c90118a90e8-21" name="rest_code_c78c0419bd344169a8f30c90118a90e8-21" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_c78c0419bd344169a8f30c90118a90e8-21"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kn"&gt;listen&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;80&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;a id="rest_code_c78c0419bd344169a8f30c90118a90e8-22" name="rest_code_c78c0419bd344169a8f30c90118a90e8-22" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_c78c0419bd344169a8f30c90118a90e8-22"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kn"&gt;listen&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;[::]:80&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;a id="rest_code_c78c0419bd344169a8f30c90118a90e8-23" name="rest_code_c78c0419bd344169a8f30c90118a90e8-23" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_c78c0419bd344169a8f30c90118a90e8-23"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;# 修改或添加 server_name&lt;/span&gt;
&lt;a id="rest_code_c78c0419bd344169a8f30c90118a90e8-24" name="rest_code_c78c0419bd344169a8f30c90118a90e8-24" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_c78c0419bd344169a8f30c90118a90e8-24"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kn"&gt;server_name&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;example.com&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;a id="rest_code_c78c0419bd344169a8f30c90118a90e8-25" name="rest_code_c78c0419bd344169a8f30c90118a90e8-25" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_c78c0419bd344169a8f30c90118a90e8-25"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;# 根据需求修改 root，同一机器保持原状即可&lt;/span&gt;
&lt;a id="rest_code_c78c0419bd344169a8f30c90118a90e8-26" name="rest_code_c78c0419bd344169a8f30c90118a90e8-26" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_c78c0419bd344169a8f30c90118a90e8-26"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kn"&gt;root&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;/home/mastodon/live/public&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;a id="rest_code_c78c0419bd344169a8f30c90118a90e8-27" name="rest_code_c78c0419bd344169a8f30c90118a90e8-27" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_c78c0419bd344169a8f30c90118a90e8-27"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kn"&gt;location&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;/.well-known/acme-challenge/&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kn"&gt;allow&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;all&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;a id="rest_code_c78c0419bd344169a8f30c90118a90e8-28" name="rest_code_c78c0419bd344169a8f30c90118a90e8-28" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_c78c0419bd344169a8f30c90118a90e8-28"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kn"&gt;location&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;/&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kn"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;301&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;https://&lt;/span&gt;&lt;span class="nv"&gt;$host$request_uri&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;a id="rest_code_c78c0419bd344169a8f30c90118a90e8-29" name="rest_code_c78c0419bd344169a8f30c90118a90e8-29" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_c78c0419bd344169a8f30c90118a90e8-29"&gt;&lt;/a&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;a id="rest_code_c78c0419bd344169a8f30c90118a90e8-30" name="rest_code_c78c0419bd344169a8f30c90118a90e8-30" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_c78c0419bd344169a8f30c90118a90e8-30"&gt;&lt;/a&gt;
&lt;a id="rest_code_c78c0419bd344169a8f30c90118a90e8-31" name="rest_code_c78c0419bd344169a8f30c90118a90e8-31" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_c78c0419bd344169a8f30c90118a90e8-31"&gt;&lt;/a&gt;&lt;span class="k"&gt;server&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;a id="rest_code_c78c0419bd344169a8f30c90118a90e8-32" name="rest_code_c78c0419bd344169a8f30c90118a90e8-32" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_c78c0419bd344169a8f30c90118a90e8-32"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kn"&gt;listen&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;443&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;ssl&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;http2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;a id="rest_code_c78c0419bd344169a8f30c90118a90e8-33" name="rest_code_c78c0419bd344169a8f30c90118a90e8-33" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_c78c0419bd344169a8f30c90118a90e8-33"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kn"&gt;listen&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;[::]:443&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;ssl&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;http2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;a id="rest_code_c78c0419bd344169a8f30c90118a90e8-34" name="rest_code_c78c0419bd344169a8f30c90118a90e8-34" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_c78c0419bd344169a8f30c90118a90e8-34"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;# 修改或添加 server_name&lt;/span&gt;
&lt;a id="rest_code_c78c0419bd344169a8f30c90118a90e8-35" name="rest_code_c78c0419bd344169a8f30c90118a90e8-35" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_c78c0419bd344169a8f30c90118a90e8-35"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kn"&gt;server_name&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;example.com&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;a id="rest_code_c78c0419bd344169a8f30c90118a90e8-36" name="rest_code_c78c0419bd344169a8f30c90118a90e8-36" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_c78c0419bd344169a8f30c90118a90e8-36"&gt;&lt;/a&gt;
&lt;a id="rest_code_c78c0419bd344169a8f30c90118a90e8-37" name="rest_code_c78c0419bd344169a8f30c90118a90e8-37" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_c78c0419bd344169a8f30c90118a90e8-37"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kn"&gt;ssl_protocols&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;TLSv1.2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;TLSv1.3&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;a id="rest_code_c78c0419bd344169a8f30c90118a90e8-38" name="rest_code_c78c0419bd344169a8f30c90118a90e8-38" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_c78c0419bd344169a8f30c90118a90e8-38"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kn"&gt;ssl_ciphers&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;HIGH:!MEDIUM:!LOW:!aNULL:!NULL:!SHA&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;a id="rest_code_c78c0419bd344169a8f30c90118a90e8-39" name="rest_code_c78c0419bd344169a8f30c90118a90e8-39" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_c78c0419bd344169a8f30c90118a90e8-39"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kn"&gt;ssl_prefer_server_ciphers&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;on&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;a id="rest_code_c78c0419bd344169a8f30c90118a90e8-40" name="rest_code_c78c0419bd344169a8f30c90118a90e8-40" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_c78c0419bd344169a8f30c90118a90e8-40"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kn"&gt;ssl_session_cache&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;shared:SSL:10m&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;a id="rest_code_c78c0419bd344169a8f30c90118a90e8-41" name="rest_code_c78c0419bd344169a8f30c90118a90e8-41" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_c78c0419bd344169a8f30c90118a90e8-41"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kn"&gt;ssl_session_tickets&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;off&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;a id="rest_code_c78c0419bd344169a8f30c90118a90e8-42" name="rest_code_c78c0419bd344169a8f30c90118a90e8-42" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_c78c0419bd344169a8f30c90118a90e8-42"&gt;&lt;/a&gt;
&lt;a id="rest_code_c78c0419bd344169a8f30c90118a90e8-43" name="rest_code_c78c0419bd344169a8f30c90118a90e8-43" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_c78c0419bd344169a8f30c90118a90e8-43"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;# Uncomment these lines once you acquire a certificate:&lt;/span&gt;
&lt;a id="rest_code_c78c0419bd344169a8f30c90118a90e8-44" name="rest_code_c78c0419bd344169a8f30c90118a90e8-44" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_c78c0419bd344169a8f30c90118a90e8-44"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;# ssl_certificate     /etc/letsencrypt/live/example.com/fullchain.pem;&lt;/span&gt;
&lt;a id="rest_code_c78c0419bd344169a8f30c90118a90e8-45" name="rest_code_c78c0419bd344169a8f30c90118a90e8-45" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_c78c0419bd344169a8f30c90118a90e8-45"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;# ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;&lt;/span&gt;
&lt;a id="rest_code_c78c0419bd344169a8f30c90118a90e8-46" name="rest_code_c78c0419bd344169a8f30c90118a90e8-46" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_c78c0419bd344169a8f30c90118a90e8-46"&gt;&lt;/a&gt;
&lt;a id="rest_code_c78c0419bd344169a8f30c90118a90e8-47" name="rest_code_c78c0419bd344169a8f30c90118a90e8-47" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_c78c0419bd344169a8f30c90118a90e8-47"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kn"&gt;keepalive_timeout&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="mi"&gt;70&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;a id="rest_code_c78c0419bd344169a8f30c90118a90e8-48" name="rest_code_c78c0419bd344169a8f30c90118a90e8-48" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_c78c0419bd344169a8f30c90118a90e8-48"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kn"&gt;sendfile&lt;/span&gt;&lt;span class="w"&gt;             &lt;/span&gt;&lt;span class="no"&gt;on&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;a id="rest_code_c78c0419bd344169a8f30c90118a90e8-49" name="rest_code_c78c0419bd344169a8f30c90118a90e8-49" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_c78c0419bd344169a8f30c90118a90e8-49"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kn"&gt;client_max_body_size&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;80m&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;a id="rest_code_c78c0419bd344169a8f30c90118a90e8-50" name="rest_code_c78c0419bd344169a8f30c90118a90e8-50" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_c78c0419bd344169a8f30c90118a90e8-50"&gt;&lt;/a&gt;
&lt;a id="rest_code_c78c0419bd344169a8f30c90118a90e8-51" name="rest_code_c78c0419bd344169a8f30c90118a90e8-51" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_c78c0419bd344169a8f30c90118a90e8-51"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;# 根据需求修改 root，同一机器保持原状即可&lt;/span&gt;
&lt;a id="rest_code_c78c0419bd344169a8f30c90118a90e8-52" name="rest_code_c78c0419bd344169a8f30c90118a90e8-52" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_c78c0419bd344169a8f30c90118a90e8-52"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kn"&gt;root&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;/home/mastodon/live/public&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;a id="rest_code_c78c0419bd344169a8f30c90118a90e8-53" name="rest_code_c78c0419bd344169a8f30c90118a90e8-53" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_c78c0419bd344169a8f30c90118a90e8-53"&gt;&lt;/a&gt;
&lt;a id="rest_code_c78c0419bd344169a8f30c90118a90e8-54" name="rest_code_c78c0419bd344169a8f30c90118a90e8-54" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_c78c0419bd344169a8f30c90118a90e8-54"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kn"&gt;gzip&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;on&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;a id="rest_code_c78c0419bd344169a8f30c90118a90e8-55" name="rest_code_c78c0419bd344169a8f30c90118a90e8-55" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_c78c0419bd344169a8f30c90118a90e8-55"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kn"&gt;gzip_disable&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;"msie6"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;a id="rest_code_c78c0419bd344169a8f30c90118a90e8-56" name="rest_code_c78c0419bd344169a8f30c90118a90e8-56" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_c78c0419bd344169a8f30c90118a90e8-56"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kn"&gt;gzip_vary&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;on&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;a id="rest_code_c78c0419bd344169a8f30c90118a90e8-57" name="rest_code_c78c0419bd344169a8f30c90118a90e8-57" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_c78c0419bd344169a8f30c90118a90e8-57"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kn"&gt;gzip_proxied&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;any&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;a id="rest_code_c78c0419bd344169a8f30c90118a90e8-58" name="rest_code_c78c0419bd344169a8f30c90118a90e8-58" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_c78c0419bd344169a8f30c90118a90e8-58"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kn"&gt;gzip_comp_level&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;a id="rest_code_c78c0419bd344169a8f30c90118a90e8-59" name="rest_code_c78c0419bd344169a8f30c90118a90e8-59" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_c78c0419bd344169a8f30c90118a90e8-59"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kn"&gt;gzip_buffers&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;16&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;8k&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;a id="rest_code_c78c0419bd344169a8f30c90118a90e8-60" name="rest_code_c78c0419bd344169a8f30c90118a90e8-60" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_c78c0419bd344169a8f30c90118a90e8-60"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kn"&gt;gzip_http_version&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="s"&gt;.1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;a id="rest_code_c78c0419bd344169a8f30c90118a90e8-61" name="rest_code_c78c0419bd344169a8f30c90118a90e8-61" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_c78c0419bd344169a8f30c90118a90e8-61"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kn"&gt;gzip_types&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;text/plain&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;text/css&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;application/json&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;application/javascript&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;text/xml&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;application/xml&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;application/xml+rss&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;text/javascript&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;image/svg+xml&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;image/x-icon&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;a id="rest_code_c78c0419bd344169a8f30c90118a90e8-62" name="rest_code_c78c0419bd344169a8f30c90118a90e8-62" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_c78c0419bd344169a8f30c90118a90e8-62"&gt;&lt;/a&gt;
&lt;a id="rest_code_c78c0419bd344169a8f30c90118a90e8-63" name="rest_code_c78c0419bd344169a8f30c90118a90e8-63" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_c78c0419bd344169a8f30c90118a90e8-63"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kn"&gt;location&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;/&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;a id="rest_code_c78c0419bd344169a8f30c90118a90e8-64" name="rest_code_c78c0419bd344169a8f30c90118a90e8-64" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_c78c0419bd344169a8f30c90118a90e8-64"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="kn"&gt;try_files&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$uri&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;@proxy&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;a id="rest_code_c78c0419bd344169a8f30c90118a90e8-65" name="rest_code_c78c0419bd344169a8f30c90118a90e8-65" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_c78c0419bd344169a8f30c90118a90e8-65"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;a id="rest_code_c78c0419bd344169a8f30c90118a90e8-66" name="rest_code_c78c0419bd344169a8f30c90118a90e8-66" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_c78c0419bd344169a8f30c90118a90e8-66"&gt;&lt;/a&gt;
&lt;a id="rest_code_c78c0419bd344169a8f30c90118a90e8-67" name="rest_code_c78c0419bd344169a8f30c90118a90e8-67" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_c78c0419bd344169a8f30c90118a90e8-67"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;# If Docker is used for deployment and Rails serves static files,&lt;/span&gt;
&lt;a id="rest_code_c78c0419bd344169a8f30c90118a90e8-68" name="rest_code_c78c0419bd344169a8f30c90118a90e8-68" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_c78c0419bd344169a8f30c90118a90e8-68"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;# then needed must replace line `try_files $uri =404;` with `try_files $uri @proxy;`.&lt;/span&gt;
&lt;a id="rest_code_c78c0419bd344169a8f30c90118a90e8-69" name="rest_code_c78c0419bd344169a8f30c90118a90e8-69" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_c78c0419bd344169a8f30c90118a90e8-69"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kn"&gt;location&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;/sw.js&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;a id="rest_code_c78c0419bd344169a8f30c90118a90e8-70" name="rest_code_c78c0419bd344169a8f30c90118a90e8-70" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_c78c0419bd344169a8f30c90118a90e8-70"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="kn"&gt;add_header&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;Cache-Control&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;"public,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;max-age=604800,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;must-revalidate"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;a id="rest_code_c78c0419bd344169a8f30c90118a90e8-71" name="rest_code_c78c0419bd344169a8f30c90118a90e8-71" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_c78c0419bd344169a8f30c90118a90e8-71"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="kn"&gt;add_header&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;Strict-Transport-Security&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;"max-age=63072000&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kn"&gt;includeSubDomains"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;a id="rest_code_c78c0419bd344169a8f30c90118a90e8-72" name="rest_code_c78c0419bd344169a8f30c90118a90e8-72" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_c78c0419bd344169a8f30c90118a90e8-72"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="kn"&gt;try_files&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$uri&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;404&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;a id="rest_code_c78c0419bd344169a8f30c90118a90e8-73" name="rest_code_c78c0419bd344169a8f30c90118a90e8-73" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_c78c0419bd344169a8f30c90118a90e8-73"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;a id="rest_code_c78c0419bd344169a8f30c90118a90e8-74" name="rest_code_c78c0419bd344169a8f30c90118a90e8-74" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_c78c0419bd344169a8f30c90118a90e8-74"&gt;&lt;/a&gt;
&lt;a id="rest_code_c78c0419bd344169a8f30c90118a90e8-75" name="rest_code_c78c0419bd344169a8f30c90118a90e8-75" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_c78c0419bd344169a8f30c90118a90e8-75"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kn"&gt;location&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;~&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="sr"&gt;^/assets/&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;a id="rest_code_c78c0419bd344169a8f30c90118a90e8-76" name="rest_code_c78c0419bd344169a8f30c90118a90e8-76" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_c78c0419bd344169a8f30c90118a90e8-76"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="kn"&gt;add_header&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;Cache-Control&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;"public,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;max-age=2419200,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;must-revalidate"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;a id="rest_code_c78c0419bd344169a8f30c90118a90e8-77" name="rest_code_c78c0419bd344169a8f30c90118a90e8-77" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_c78c0419bd344169a8f30c90118a90e8-77"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="kn"&gt;add_header&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;Strict-Transport-Security&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;"max-age=63072000&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kn"&gt;includeSubDomains"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;a id="rest_code_c78c0419bd344169a8f30c90118a90e8-78" name="rest_code_c78c0419bd344169a8f30c90118a90e8-78" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_c78c0419bd344169a8f30c90118a90e8-78"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="kn"&gt;try_files&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$uri&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;404&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;a id="rest_code_c78c0419bd344169a8f30c90118a90e8-79" name="rest_code_c78c0419bd344169a8f30c90118a90e8-79" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_c78c0419bd344169a8f30c90118a90e8-79"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;a id="rest_code_c78c0419bd344169a8f30c90118a90e8-80" name="rest_code_c78c0419bd344169a8f30c90118a90e8-80" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_c78c0419bd344169a8f30c90118a90e8-80"&gt;&lt;/a&gt;
&lt;a id="rest_code_c78c0419bd344169a8f30c90118a90e8-81" name="rest_code_c78c0419bd344169a8f30c90118a90e8-81" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_c78c0419bd344169a8f30c90118a90e8-81"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kn"&gt;location&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;~&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="sr"&gt;^/avatars/&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;a id="rest_code_c78c0419bd344169a8f30c90118a90e8-82" name="rest_code_c78c0419bd344169a8f30c90118a90e8-82" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_c78c0419bd344169a8f30c90118a90e8-82"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="kn"&gt;add_header&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;Cache-Control&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;"public,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;max-age=2419200,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;must-revalidate"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;a id="rest_code_c78c0419bd344169a8f30c90118a90e8-83" name="rest_code_c78c0419bd344169a8f30c90118a90e8-83" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_c78c0419bd344169a8f30c90118a90e8-83"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="kn"&gt;add_header&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;Strict-Transport-Security&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;"max-age=63072000&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kn"&gt;includeSubDomains"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;a id="rest_code_c78c0419bd344169a8f30c90118a90e8-84" name="rest_code_c78c0419bd344169a8f30c90118a90e8-84" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_c78c0419bd344169a8f30c90118a90e8-84"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="kn"&gt;try_files&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$uri&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;404&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;a id="rest_code_c78c0419bd344169a8f30c90118a90e8-85" name="rest_code_c78c0419bd344169a8f30c90118a90e8-85" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_c78c0419bd344169a8f30c90118a90e8-85"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;a id="rest_code_c78c0419bd344169a8f30c90118a90e8-86" name="rest_code_c78c0419bd344169a8f30c90118a90e8-86" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_c78c0419bd344169a8f30c90118a90e8-86"&gt;&lt;/a&gt;
&lt;a id="rest_code_c78c0419bd344169a8f30c90118a90e8-87" name="rest_code_c78c0419bd344169a8f30c90118a90e8-87" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_c78c0419bd344169a8f30c90118a90e8-87"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kn"&gt;location&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;~&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="sr"&gt;^/emoji/&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;a id="rest_code_c78c0419bd344169a8f30c90118a90e8-88" name="rest_code_c78c0419bd344169a8f30c90118a90e8-88" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_c78c0419bd344169a8f30c90118a90e8-88"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="kn"&gt;add_header&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;Cache-Control&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;"public,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;max-age=2419200,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;must-revalidate"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;a id="rest_code_c78c0419bd344169a8f30c90118a90e8-89" name="rest_code_c78c0419bd344169a8f30c90118a90e8-89" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_c78c0419bd344169a8f30c90118a90e8-89"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="kn"&gt;add_header&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;Strict-Transport-Security&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;"max-age=63072000&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kn"&gt;includeSubDomains"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;a id="rest_code_c78c0419bd344169a8f30c90118a90e8-90" name="rest_code_c78c0419bd344169a8f30c90118a90e8-90" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_c78c0419bd344169a8f30c90118a90e8-90"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="kn"&gt;try_files&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$uri&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;404&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;a id="rest_code_c78c0419bd344169a8f30c90118a90e8-91" name="rest_code_c78c0419bd344169a8f30c90118a90e8-91" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_c78c0419bd344169a8f30c90118a90e8-91"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;a id="rest_code_c78c0419bd344169a8f30c90118a90e8-92" name="rest_code_c78c0419bd344169a8f30c90118a90e8-92" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_c78c0419bd344169a8f30c90118a90e8-92"&gt;&lt;/a&gt;
&lt;a id="rest_code_c78c0419bd344169a8f30c90118a90e8-93" name="rest_code_c78c0419bd344169a8f30c90118a90e8-93" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_c78c0419bd344169a8f30c90118a90e8-93"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kn"&gt;location&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;~&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="sr"&gt;^/headers/&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;a id="rest_code_c78c0419bd344169a8f30c90118a90e8-94" name="rest_code_c78c0419bd344169a8f30c90118a90e8-94" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_c78c0419bd344169a8f30c90118a90e8-94"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="kn"&gt;add_header&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;Cache-Control&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;"public,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;max-age=2419200,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;must-revalidate"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;a id="rest_code_c78c0419bd344169a8f30c90118a90e8-95" name="rest_code_c78c0419bd344169a8f30c90118a90e8-95" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_c78c0419bd344169a8f30c90118a90e8-95"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="kn"&gt;add_header&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;Strict-Transport-Security&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;"max-age=63072000&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kn"&gt;includeSubDomains"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;a id="rest_code_c78c0419bd344169a8f30c90118a90e8-96" name="rest_code_c78c0419bd344169a8f30c90118a90e8-96" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_c78c0419bd344169a8f30c90118a90e8-96"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="kn"&gt;try_files&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$uri&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;404&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;a id="rest_code_c78c0419bd344169a8f30c90118a90e8-97" name="rest_code_c78c0419bd344169a8f30c90118a90e8-97" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_c78c0419bd344169a8f30c90118a90e8-97"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;a id="rest_code_c78c0419bd344169a8f30c90118a90e8-98" name="rest_code_c78c0419bd344169a8f30c90118a90e8-98" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_c78c0419bd344169a8f30c90118a90e8-98"&gt;&lt;/a&gt;
&lt;a id="rest_code_c78c0419bd344169a8f30c90118a90e8-99" name="rest_code_c78c0419bd344169a8f30c90118a90e8-99" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_c78c0419bd344169a8f30c90118a90e8-99"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kn"&gt;location&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;~&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="sr"&gt;^/packs/&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;a id="rest_code_c78c0419bd344169a8f30c90118a90e8-100" name="rest_code_c78c0419bd344169a8f30c90118a90e8-100" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_c78c0419bd344169a8f30c90118a90e8-100"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="kn"&gt;add_header&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;Cache-Control&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;"public,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;max-age=2419200,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;must-revalidate"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;a id="rest_code_c78c0419bd344169a8f30c90118a90e8-101" name="rest_code_c78c0419bd344169a8f30c90118a90e8-101" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_c78c0419bd344169a8f30c90118a90e8-101"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="kn"&gt;add_header&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;Strict-Transport-Security&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;"max-age=63072000&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kn"&gt;includeSubDomains"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;a id="rest_code_c78c0419bd344169a8f30c90118a90e8-102" name="rest_code_c78c0419bd344169a8f30c90118a90e8-102" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_c78c0419bd344169a8f30c90118a90e8-102"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="kn"&gt;try_files&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$uri&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;404&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;a id="rest_code_c78c0419bd344169a8f30c90118a90e8-103" name="rest_code_c78c0419bd344169a8f30c90118a90e8-103" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_c78c0419bd344169a8f30c90118a90e8-103"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;a id="rest_code_c78c0419bd344169a8f30c90118a90e8-104" name="rest_code_c78c0419bd344169a8f30c90118a90e8-104" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_c78c0419bd344169a8f30c90118a90e8-104"&gt;&lt;/a&gt;
&lt;a id="rest_code_c78c0419bd344169a8f30c90118a90e8-105" name="rest_code_c78c0419bd344169a8f30c90118a90e8-105" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_c78c0419bd344169a8f30c90118a90e8-105"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kn"&gt;location&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;~&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="sr"&gt;^/shortcuts/&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;a id="rest_code_c78c0419bd344169a8f30c90118a90e8-106" name="rest_code_c78c0419bd344169a8f30c90118a90e8-106" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_c78c0419bd344169a8f30c90118a90e8-106"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="kn"&gt;add_header&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;Cache-Control&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;"public,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;max-age=2419200,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;must-revalidate"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;a id="rest_code_c78c0419bd344169a8f30c90118a90e8-107" name="rest_code_c78c0419bd344169a8f30c90118a90e8-107" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_c78c0419bd344169a8f30c90118a90e8-107"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="kn"&gt;add_header&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;Strict-Transport-Security&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;"max-age=63072000&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kn"&gt;includeSubDomains"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;a id="rest_code_c78c0419bd344169a8f30c90118a90e8-108" name="rest_code_c78c0419bd344169a8f30c90118a90e8-108" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_c78c0419bd344169a8f30c90118a90e8-108"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="kn"&gt;try_files&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$uri&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;404&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;a id="rest_code_c78c0419bd344169a8f30c90118a90e8-109" name="rest_code_c78c0419bd344169a8f30c90118a90e8-109" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_c78c0419bd344169a8f30c90118a90e8-109"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;a id="rest_code_c78c0419bd344169a8f30c90118a90e8-110" name="rest_code_c78c0419bd344169a8f30c90118a90e8-110" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_c78c0419bd344169a8f30c90118a90e8-110"&gt;&lt;/a&gt;
&lt;a id="rest_code_c78c0419bd344169a8f30c90118a90e8-111" name="rest_code_c78c0419bd344169a8f30c90118a90e8-111" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_c78c0419bd344169a8f30c90118a90e8-111"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kn"&gt;location&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;~&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="sr"&gt;^/sounds/&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;a id="rest_code_c78c0419bd344169a8f30c90118a90e8-112" name="rest_code_c78c0419bd344169a8f30c90118a90e8-112" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_c78c0419bd344169a8f30c90118a90e8-112"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="kn"&gt;add_header&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;Cache-Control&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;"public,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;max-age=2419200,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;must-revalidate"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;a id="rest_code_c78c0419bd344169a8f30c90118a90e8-113" name="rest_code_c78c0419bd344169a8f30c90118a90e8-113" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_c78c0419bd344169a8f30c90118a90e8-113"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="kn"&gt;add_header&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;Strict-Transport-Security&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;"max-age=63072000&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kn"&gt;includeSubDomains"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;a id="rest_code_c78c0419bd344169a8f30c90118a90e8-114" name="rest_code_c78c0419bd344169a8f30c90118a90e8-114" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_c78c0419bd344169a8f30c90118a90e8-114"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="kn"&gt;try_files&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$uri&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;404&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;a id="rest_code_c78c0419bd344169a8f30c90118a90e8-115" name="rest_code_c78c0419bd344169a8f30c90118a90e8-115" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_c78c0419bd344169a8f30c90118a90e8-115"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;a id="rest_code_c78c0419bd344169a8f30c90118a90e8-116" name="rest_code_c78c0419bd344169a8f30c90118a90e8-116" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_c78c0419bd344169a8f30c90118a90e8-116"&gt;&lt;/a&gt;
&lt;a id="rest_code_c78c0419bd344169a8f30c90118a90e8-117" name="rest_code_c78c0419bd344169a8f30c90118a90e8-117" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_c78c0419bd344169a8f30c90118a90e8-117"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kn"&gt;location&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;~&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="sr"&gt;^/system/&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;a id="rest_code_c78c0419bd344169a8f30c90118a90e8-118" name="rest_code_c78c0419bd344169a8f30c90118a90e8-118" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_c78c0419bd344169a8f30c90118a90e8-118"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="kn"&gt;add_header&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;Cache-Control&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;"public,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;max-age=2419200,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;immutable"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;a id="rest_code_c78c0419bd344169a8f30c90118a90e8-119" name="rest_code_c78c0419bd344169a8f30c90118a90e8-119" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_c78c0419bd344169a8f30c90118a90e8-119"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="kn"&gt;add_header&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;Strict-Transport-Security&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;"max-age=63072000&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kn"&gt;includeSubDomains"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;a id="rest_code_c78c0419bd344169a8f30c90118a90e8-120" name="rest_code_c78c0419bd344169a8f30c90118a90e8-120" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_c78c0419bd344169a8f30c90118a90e8-120"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="kn"&gt;try_files&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$uri&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;404&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;a id="rest_code_c78c0419bd344169a8f30c90118a90e8-121" name="rest_code_c78c0419bd344169a8f30c90118a90e8-121" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_c78c0419bd344169a8f30c90118a90e8-121"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;a id="rest_code_c78c0419bd344169a8f30c90118a90e8-122" name="rest_code_c78c0419bd344169a8f30c90118a90e8-122" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_c78c0419bd344169a8f30c90118a90e8-122"&gt;&lt;/a&gt;
&lt;a id="rest_code_c78c0419bd344169a8f30c90118a90e8-123" name="rest_code_c78c0419bd344169a8f30c90118a90e8-123" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_c78c0419bd344169a8f30c90118a90e8-123"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kn"&gt;location&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;^~&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;/api/v1/streaming&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;a id="rest_code_c78c0419bd344169a8f30c90118a90e8-124" name="rest_code_c78c0419bd344169a8f30c90118a90e8-124" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_c78c0419bd344169a8f30c90118a90e8-124"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="kn"&gt;proxy_set_header&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;Host&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$host&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;a id="rest_code_c78c0419bd344169a8f30c90118a90e8-125" name="rest_code_c78c0419bd344169a8f30c90118a90e8-125" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_c78c0419bd344169a8f30c90118a90e8-125"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="kn"&gt;proxy_set_header&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;X-Real-IP&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$remote_addr&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;a id="rest_code_c78c0419bd344169a8f30c90118a90e8-126" name="rest_code_c78c0419bd344169a8f30c90118a90e8-126" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_c78c0419bd344169a8f30c90118a90e8-126"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="kn"&gt;proxy_set_header&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;X-Forwarded-For&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$proxy_add_x_forwarded_for&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;a id="rest_code_c78c0419bd344169a8f30c90118a90e8-127" name="rest_code_c78c0419bd344169a8f30c90118a90e8-127" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_c78c0419bd344169a8f30c90118a90e8-127"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="kn"&gt;proxy_set_header&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;X-Forwarded-Proto&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$scheme&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;a id="rest_code_c78c0419bd344169a8f30c90118a90e8-128" name="rest_code_c78c0419bd344169a8f30c90118a90e8-128" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_c78c0419bd344169a8f30c90118a90e8-128"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="kn"&gt;proxy_set_header&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;Proxy&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;""&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;a id="rest_code_c78c0419bd344169a8f30c90118a90e8-129" name="rest_code_c78c0419bd344169a8f30c90118a90e8-129" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_c78c0419bd344169a8f30c90118a90e8-129"&gt;&lt;/a&gt;
&lt;a id="rest_code_c78c0419bd344169a8f30c90118a90e8-130" name="rest_code_c78c0419bd344169a8f30c90118a90e8-130" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_c78c0419bd344169a8f30c90118a90e8-130"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="kn"&gt;proxy_pass&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;http://streaming&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;a id="rest_code_c78c0419bd344169a8f30c90118a90e8-131" name="rest_code_c78c0419bd344169a8f30c90118a90e8-131" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_c78c0419bd344169a8f30c90118a90e8-131"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="kn"&gt;proxy_buffering&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;off&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;a id="rest_code_c78c0419bd344169a8f30c90118a90e8-132" name="rest_code_c78c0419bd344169a8f30c90118a90e8-132" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_c78c0419bd344169a8f30c90118a90e8-132"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="kn"&gt;proxy_redirect&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;off&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;a id="rest_code_c78c0419bd344169a8f30c90118a90e8-133" name="rest_code_c78c0419bd344169a8f30c90118a90e8-133" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_c78c0419bd344169a8f30c90118a90e8-133"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="kn"&gt;proxy_http_version&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="s"&gt;.1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;a id="rest_code_c78c0419bd344169a8f30c90118a90e8-134" name="rest_code_c78c0419bd344169a8f30c90118a90e8-134" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_c78c0419bd344169a8f30c90118a90e8-134"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="kn"&gt;proxy_set_header&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;Upgrade&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$http_upgrade&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;a id="rest_code_c78c0419bd344169a8f30c90118a90e8-135" name="rest_code_c78c0419bd344169a8f30c90118a90e8-135" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_c78c0419bd344169a8f30c90118a90e8-135"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="kn"&gt;proxy_set_header&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;Connection&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$connection_upgrade&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;a id="rest_code_c78c0419bd344169a8f30c90118a90e8-136" name="rest_code_c78c0419bd344169a8f30c90118a90e8-136" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_c78c0419bd344169a8f30c90118a90e8-136"&gt;&lt;/a&gt;
&lt;a id="rest_code_c78c0419bd344169a8f30c90118a90e8-137" name="rest_code_c78c0419bd344169a8f30c90118a90e8-137" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_c78c0419bd344169a8f30c90118a90e8-137"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="kn"&gt;add_header&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;Strict-Transport-Security&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;"max-age=63072000&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kn"&gt;includeSubDomains"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;a id="rest_code_c78c0419bd344169a8f30c90118a90e8-138" name="rest_code_c78c0419bd344169a8f30c90118a90e8-138" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_c78c0419bd344169a8f30c90118a90e8-138"&gt;&lt;/a&gt;
&lt;a id="rest_code_c78c0419bd344169a8f30c90118a90e8-139" name="rest_code_c78c0419bd344169a8f30c90118a90e8-139" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_c78c0419bd344169a8f30c90118a90e8-139"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="kn"&gt;tcp_nodelay&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;on&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;a id="rest_code_c78c0419bd344169a8f30c90118a90e8-140" name="rest_code_c78c0419bd344169a8f30c90118a90e8-140" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_c78c0419bd344169a8f30c90118a90e8-140"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;a id="rest_code_c78c0419bd344169a8f30c90118a90e8-141" name="rest_code_c78c0419bd344169a8f30c90118a90e8-141" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_c78c0419bd344169a8f30c90118a90e8-141"&gt;&lt;/a&gt;
&lt;a id="rest_code_c78c0419bd344169a8f30c90118a90e8-142" name="rest_code_c78c0419bd344169a8f30c90118a90e8-142" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_c78c0419bd344169a8f30c90118a90e8-142"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kn"&gt;location&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;@proxy&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;a id="rest_code_c78c0419bd344169a8f30c90118a90e8-143" name="rest_code_c78c0419bd344169a8f30c90118a90e8-143" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_c78c0419bd344169a8f30c90118a90e8-143"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="kn"&gt;proxy_set_header&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;Host&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$host&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;a id="rest_code_c78c0419bd344169a8f30c90118a90e8-144" name="rest_code_c78c0419bd344169a8f30c90118a90e8-144" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_c78c0419bd344169a8f30c90118a90e8-144"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="kn"&gt;proxy_set_header&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;X-Real-IP&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$remote_addr&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;a id="rest_code_c78c0419bd344169a8f30c90118a90e8-145" name="rest_code_c78c0419bd344169a8f30c90118a90e8-145" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_c78c0419bd344169a8f30c90118a90e8-145"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="kn"&gt;proxy_set_header&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;X-Forwarded-For&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$proxy_add_x_forwarded_for&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;a id="rest_code_c78c0419bd344169a8f30c90118a90e8-146" name="rest_code_c78c0419bd344169a8f30c90118a90e8-146" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_c78c0419bd344169a8f30c90118a90e8-146"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="kn"&gt;proxy_set_header&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;X-Forwarded-Proto&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$scheme&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;a id="rest_code_c78c0419bd344169a8f30c90118a90e8-147" name="rest_code_c78c0419bd344169a8f30c90118a90e8-147" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_c78c0419bd344169a8f30c90118a90e8-147"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="kn"&gt;proxy_set_header&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;Proxy&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;""&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;a id="rest_code_c78c0419bd344169a8f30c90118a90e8-148" name="rest_code_c78c0419bd344169a8f30c90118a90e8-148" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_c78c0419bd344169a8f30c90118a90e8-148"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="kn"&gt;proxy_pass_header&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;Server&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;a id="rest_code_c78c0419bd344169a8f30c90118a90e8-149" name="rest_code_c78c0419bd344169a8f30c90118a90e8-149" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_c78c0419bd344169a8f30c90118a90e8-149"&gt;&lt;/a&gt;
&lt;a id="rest_code_c78c0419bd344169a8f30c90118a90e8-150" name="rest_code_c78c0419bd344169a8f30c90118a90e8-150" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_c78c0419bd344169a8f30c90118a90e8-150"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="kn"&gt;proxy_pass&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;http://backend&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;a id="rest_code_c78c0419bd344169a8f30c90118a90e8-151" name="rest_code_c78c0419bd344169a8f30c90118a90e8-151" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_c78c0419bd344169a8f30c90118a90e8-151"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="kn"&gt;proxy_buffering&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;on&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;a id="rest_code_c78c0419bd344169a8f30c90118a90e8-152" name="rest_code_c78c0419bd344169a8f30c90118a90e8-152" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_c78c0419bd344169a8f30c90118a90e8-152"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="kn"&gt;proxy_redirect&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;off&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;a id="rest_code_c78c0419bd344169a8f30c90118a90e8-153" name="rest_code_c78c0419bd344169a8f30c90118a90e8-153" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_c78c0419bd344169a8f30c90118a90e8-153"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="kn"&gt;proxy_http_version&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="s"&gt;.1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;a id="rest_code_c78c0419bd344169a8f30c90118a90e8-154" name="rest_code_c78c0419bd344169a8f30c90118a90e8-154" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_c78c0419bd344169a8f30c90118a90e8-154"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="kn"&gt;proxy_set_header&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;Upgrade&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$http_upgrade&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;a id="rest_code_c78c0419bd344169a8f30c90118a90e8-155" name="rest_code_c78c0419bd344169a8f30c90118a90e8-155" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_c78c0419bd344169a8f30c90118a90e8-155"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="kn"&gt;proxy_set_header&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;Connection&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$connection_upgrade&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;a id="rest_code_c78c0419bd344169a8f30c90118a90e8-156" name="rest_code_c78c0419bd344169a8f30c90118a90e8-156" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_c78c0419bd344169a8f30c90118a90e8-156"&gt;&lt;/a&gt;
&lt;a id="rest_code_c78c0419bd344169a8f30c90118a90e8-157" name="rest_code_c78c0419bd344169a8f30c90118a90e8-157" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_c78c0419bd344169a8f30c90118a90e8-157"&gt;&lt;/a&gt;
&lt;a id="rest_code_c78c0419bd344169a8f30c90118a90e8-158" name="rest_code_c78c0419bd344169a8f30c90118a90e8-158" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_c78c0419bd344169a8f30c90118a90e8-158"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;#### 新增部分开始 ###&lt;/span&gt;
&lt;a id="rest_code_c78c0419bd344169a8f30c90118a90e8-159" name="rest_code_c78c0419bd344169a8f30c90118a90e8-159" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_c78c0419bd344169a8f30c90118a90e8-159"&gt;&lt;/a&gt;
&lt;a id="rest_code_c78c0419bd344169a8f30c90118a90e8-160" name="rest_code_c78c0419bd344169a8f30c90118a90e8-160" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_c78c0419bd344169a8f30c90118a90e8-160"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;# 向上游请求明文，nginx 无法替换压缩内容&lt;/span&gt;
&lt;a id="rest_code_c78c0419bd344169a8f30c90118a90e8-161" name="rest_code_c78c0419bd344169a8f30c90118a90e8-161" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_c78c0419bd344169a8f30c90118a90e8-161"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="kn"&gt;proxy_set_header&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;Accept-Encoding&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;identity&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;a id="rest_code_c78c0419bd344169a8f30c90118a90e8-162" name="rest_code_c78c0419bd344169a8f30c90118a90e8-162" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_c78c0419bd344169a8f30c90118a90e8-162"&gt;&lt;/a&gt;
&lt;a id="rest_code_c78c0419bd344169a8f30c90118a90e8-163" name="rest_code_c78c0419bd344169a8f30c90118a90e8-163" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_c78c0419bd344169a8f30c90118a90e8-163"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;# 字符串只进行一次替换，即只替换第一个被匹配的字符串。这里关闭。&lt;/span&gt;
&lt;a id="rest_code_c78c0419bd344169a8f30c90118a90e8-164" name="rest_code_c78c0419bd344169a8f30c90118a90e8-164" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_c78c0419bd344169a8f30c90118a90e8-164"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="kn"&gt;sub_filter_once&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;off&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;a id="rest_code_c78c0419bd344169a8f30c90118a90e8-165" name="rest_code_c78c0419bd344169a8f30c90118a90e8-165" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_c78c0419bd344169a8f30c90118a90e8-165"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;#替换的请求类型，增加 application/json 。&lt;/span&gt;
&lt;a id="rest_code_c78c0419bd344169a8f30c90118a90e8-166" name="rest_code_c78c0419bd344169a8f30c90118a90e8-166" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_c78c0419bd344169a8f30c90118a90e8-166"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="kn"&gt;sub_filter_types&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;application/json&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;a id="rest_code_c78c0419bd344169a8f30c90118a90e8-167" name="rest_code_c78c0419bd344169a8f30c90118a90e8-167" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_c78c0419bd344169a8f30c90118a90e8-167"&gt;&lt;/a&gt;
&lt;a id="rest_code_c78c0419bd344169a8f30c90118a90e8-168" name="rest_code_c78c0419bd344169a8f30c90118a90e8-168" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_c78c0419bd344169a8f30c90118a90e8-168"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;# 替换 STREAMING_API_BASE_URL （按需）&lt;/span&gt;
&lt;a id="rest_code_c78c0419bd344169a8f30c90118a90e8-169" name="rest_code_c78c0419bd344169a8f30c90118a90e8-169" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_c78c0419bd344169a8f30c90118a90e8-169"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="kn"&gt;sub_filter&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;wss://example.com&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;wss://example.org&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;a id="rest_code_c78c0419bd344169a8f30c90118a90e8-170" name="rest_code_c78c0419bd344169a8f30c90118a90e8-170" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_c78c0419bd344169a8f30c90118a90e8-170"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;# 替换 CDN_HOST （按需）&lt;/span&gt;
&lt;a id="rest_code_c78c0419bd344169a8f30c90118a90e8-171" name="rest_code_c78c0419bd344169a8f30c90118a90e8-171" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_c78c0419bd344169a8f30c90118a90e8-171"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="kn"&gt;sub_filter&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;https://cdn.example.com&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;https://cdn.example.org&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;a id="rest_code_c78c0419bd344169a8f30c90118a90e8-172" name="rest_code_c78c0419bd344169a8f30c90118a90e8-172" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_c78c0419bd344169a8f30c90118a90e8-172"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;# 替换 S3_ALIAS_HOST （按需）&lt;/span&gt;
&lt;a id="rest_code_c78c0419bd344169a8f30c90118a90e8-173" name="rest_code_c78c0419bd344169a8f30c90118a90e8-173" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_c78c0419bd344169a8f30c90118a90e8-173"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="kn"&gt;sub_filter&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;https://img.example.com&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;https://img.example.org&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;a id="rest_code_c78c0419bd344169a8f30c90118a90e8-174" name="rest_code_c78c0419bd344169a8f30c90118a90e8-174" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_c78c0419bd344169a8f30c90118a90e8-174"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;# 替捣 missing.png （按需）&lt;/span&gt;
&lt;a id="rest_code_c78c0419bd344169a8f30c90118a90e8-175" name="rest_code_c78c0419bd344169a8f30c90118a90e8-175" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_c78c0419bd344169a8f30c90118a90e8-175"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="kn"&gt;sub_filter&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;https://example.com/avatars/original/missing.png&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;https://example.org/avatars/original/missing.png&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;a id="rest_code_c78c0419bd344169a8f30c90118a90e8-176" name="rest_code_c78c0419bd344169a8f30c90118a90e8-176" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_c78c0419bd344169a8f30c90118a90e8-176"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="kn"&gt;sub_filter&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;https://example.com/headers/original/missing.png&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;https://example.org/headers/original/missing.png&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;a id="rest_code_c78c0419bd344169a8f30c90118a90e8-177" name="rest_code_c78c0419bd344169a8f30c90118a90e8-177" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_c78c0419bd344169a8f30c90118a90e8-177"&gt;&lt;/a&gt;
&lt;a id="rest_code_c78c0419bd344169a8f30c90118a90e8-178" name="rest_code_c78c0419bd344169a8f30c90118a90e8-178" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_c78c0419bd344169a8f30c90118a90e8-178"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;### 新增部分结束 ###&lt;/span&gt;
&lt;a id="rest_code_c78c0419bd344169a8f30c90118a90e8-179" name="rest_code_c78c0419bd344169a8f30c90118a90e8-179" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_c78c0419bd344169a8f30c90118a90e8-179"&gt;&lt;/a&gt;
&lt;a id="rest_code_c78c0419bd344169a8f30c90118a90e8-180" name="rest_code_c78c0419bd344169a8f30c90118a90e8-180" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_c78c0419bd344169a8f30c90118a90e8-180"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="kn"&gt;proxy_cache&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;CACHE&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;a id="rest_code_c78c0419bd344169a8f30c90118a90e8-181" name="rest_code_c78c0419bd344169a8f30c90118a90e8-181" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_c78c0419bd344169a8f30c90118a90e8-181"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="kn"&gt;proxy_cache_valid&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;7d&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;a id="rest_code_c78c0419bd344169a8f30c90118a90e8-182" name="rest_code_c78c0419bd344169a8f30c90118a90e8-182" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_c78c0419bd344169a8f30c90118a90e8-182"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="kn"&gt;proxy_cache_valid&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;410&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;24h&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;a id="rest_code_c78c0419bd344169a8f30c90118a90e8-183" name="rest_code_c78c0419bd344169a8f30c90118a90e8-183" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_c78c0419bd344169a8f30c90118a90e8-183"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="kn"&gt;proxy_cache_use_stale&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;error&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;timeout&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;updating&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;http_500&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;http_502&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;http_503&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;http_504&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;a id="rest_code_c78c0419bd344169a8f30c90118a90e8-184" name="rest_code_c78c0419bd344169a8f30c90118a90e8-184" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_c78c0419bd344169a8f30c90118a90e8-184"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="kn"&gt;add_header&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;X-Cached&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$upstream_cache_status&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;a id="rest_code_c78c0419bd344169a8f30c90118a90e8-185" name="rest_code_c78c0419bd344169a8f30c90118a90e8-185" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_c78c0419bd344169a8f30c90118a90e8-185"&gt;&lt;/a&gt;
&lt;a id="rest_code_c78c0419bd344169a8f30c90118a90e8-186" name="rest_code_c78c0419bd344169a8f30c90118a90e8-186" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_c78c0419bd344169a8f30c90118a90e8-186"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="kn"&gt;tcp_nodelay&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;on&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;a id="rest_code_c78c0419bd344169a8f30c90118a90e8-187" name="rest_code_c78c0419bd344169a8f30c90118a90e8-187" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_c78c0419bd344169a8f30c90118a90e8-187"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;a id="rest_code_c78c0419bd344169a8f30c90118a90e8-188" name="rest_code_c78c0419bd344169a8f30c90118a90e8-188" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_c78c0419bd344169a8f30c90118a90e8-188"&gt;&lt;/a&gt;
&lt;a id="rest_code_c78c0419bd344169a8f30c90118a90e8-189" name="rest_code_c78c0419bd344169a8f30c90118a90e8-189" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_c78c0419bd344169a8f30c90118a90e8-189"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kn"&gt;error_page&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;404&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;500&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;501&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;502&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;503&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;504&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;/500.html&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;a id="rest_code_c78c0419bd344169a8f30c90118a90e8-190" name="rest_code_c78c0419bd344169a8f30c90118a90e8-190" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_c78c0419bd344169a8f30c90118a90e8-190"&gt;&lt;/a&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;websocket MITM 代理&lt;/p&gt;
&lt;p&gt;安装 &lt;a class="reference external" href="https://mitmproxy.org/"&gt;mitmproxy&lt;/a&gt;&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code python3"&gt;&lt;a id="rest_code_c79eed607b744b8d9e69bcb38673e8e5-1" name="rest_code_c79eed607b744b8d9e69bcb38673e8e5-1" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_c79eed607b744b8d9e69bcb38673e8e5-1"&gt;&lt;/a&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;re&lt;/span&gt;
&lt;a id="rest_code_c79eed607b744b8d9e69bcb38673e8e5-2" name="rest_code_c79eed607b744b8d9e69bcb38673e8e5-2" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_c79eed607b744b8d9e69bcb38673e8e5-2"&gt;&lt;/a&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;mitmproxy&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;ctx&lt;/span&gt;
&lt;a id="rest_code_c79eed607b744b8d9e69bcb38673e8e5-3" name="rest_code_c79eed607b744b8d9e69bcb38673e8e5-3" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_c79eed607b744b8d9e69bcb38673e8e5-3"&gt;&lt;/a&gt;
&lt;a id="rest_code_c79eed607b744b8d9e69bcb38673e8e5-4" name="rest_code_c79eed607b744b8d9e69bcb38673e8e5-4" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_c79eed607b744b8d9e69bcb38673e8e5-4"&gt;&lt;/a&gt;
&lt;a id="rest_code_c79eed607b744b8d9e69bcb38673e8e5-5" name="rest_code_c79eed607b744b8d9e69bcb38673e8e5-5" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_c79eed607b744b8d9e69bcb38673e8e5-5"&gt;&lt;/a&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;websocket_message&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;flow&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
&lt;a id="rest_code_c79eed607b744b8d9e69bcb38673e8e5-6" name="rest_code_c79eed607b744b8d9e69bcb38673e8e5-6" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_c79eed607b744b8d9e69bcb38673e8e5-6"&gt;&lt;/a&gt;    &lt;span class="c1"&gt;# get the latest message&lt;/span&gt;
&lt;a id="rest_code_c79eed607b744b8d9e69bcb38673e8e5-7" name="rest_code_c79eed607b744b8d9e69bcb38673e8e5-7" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_c79eed607b744b8d9e69bcb38673e8e5-7"&gt;&lt;/a&gt;    &lt;span class="n"&gt;message&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;flow&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;messages&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;a id="rest_code_c79eed607b744b8d9e69bcb38673e8e5-8" name="rest_code_c79eed607b744b8d9e69bcb38673e8e5-8" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_c79eed607b744b8d9e69bcb38673e8e5-8"&gt;&lt;/a&gt;
&lt;a id="rest_code_c79eed607b744b8d9e69bcb38673e8e5-9" name="rest_code_c79eed607b744b8d9e69bcb38673e8e5-9" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_c79eed607b744b8d9e69bcb38673e8e5-9"&gt;&lt;/a&gt;    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;message&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;from_client&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;a id="rest_code_c79eed607b744b8d9e69bcb38673e8e5-10" name="rest_code_c79eed607b744b8d9e69bcb38673e8e5-10" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_c79eed607b744b8d9e69bcb38673e8e5-10"&gt;&lt;/a&gt;        &lt;span class="n"&gt;ctx&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;log&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;info&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"Client sent a message: &lt;/span&gt;&lt;span class="si"&gt;{}&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;format&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;message&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;a id="rest_code_c79eed607b744b8d9e69bcb38673e8e5-11" name="rest_code_c79eed607b744b8d9e69bcb38673e8e5-11" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_c79eed607b744b8d9e69bcb38673e8e5-11"&gt;&lt;/a&gt;    &lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;a id="rest_code_c79eed607b744b8d9e69bcb38673e8e5-12" name="rest_code_c79eed607b744b8d9e69bcb38673e8e5-12" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_c79eed607b744b8d9e69bcb38673e8e5-12"&gt;&lt;/a&gt;        &lt;span class="n"&gt;ctx&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;log&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;info&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"Server sent a message: &lt;/span&gt;&lt;span class="si"&gt;{}&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;format&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;message&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;a id="rest_code_c79eed607b744b8d9e69bcb38673e8e5-13" name="rest_code_c79eed607b744b8d9e69bcb38673e8e5-13" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_c79eed607b744b8d9e69bcb38673e8e5-13"&gt;&lt;/a&gt;
&lt;a id="rest_code_c79eed607b744b8d9e69bcb38673e8e5-14" name="rest_code_c79eed607b744b8d9e69bcb38673e8e5-14" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_c79eed607b744b8d9e69bcb38673e8e5-14"&gt;&lt;/a&gt;    &lt;span class="c1"&gt;# manipulate the message content&lt;/span&gt;
&lt;a id="rest_code_c79eed607b744b8d9e69bcb38673e8e5-15" name="rest_code_c79eed607b744b8d9e69bcb38673e8e5-15" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_c79eed607b744b8d9e69bcb38673e8e5-15"&gt;&lt;/a&gt;    &lt;span class="n"&gt;message&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;content&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;re&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;sub&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"https://img\.example\.com"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"https://img.example.org"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;message&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;a id="rest_code_c79eed607b744b8d9e69bcb38673e8e5-16" name="rest_code_c79eed607b744b8d9e69bcb38673e8e5-16" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_c79eed607b744b8d9e69bcb38673e8e5-16"&gt;&lt;/a&gt;
&lt;a id="rest_code_c79eed607b744b8d9e69bcb38673e8e5-17" name="rest_code_c79eed607b744b8d9e69bcb38673e8e5-17" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_c79eed607b744b8d9e69bcb38673e8e5-17"&gt;&lt;/a&gt;    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="s1"&gt;'FOOBAR'&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;message&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;a id="rest_code_c79eed607b744b8d9e69bcb38673e8e5-18" name="rest_code_c79eed607b744b8d9e69bcb38673e8e5-18" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_c79eed607b744b8d9e69bcb38673e8e5-18"&gt;&lt;/a&gt;        &lt;span class="c1"&gt;# kill the message and not send it to the other endpoint&lt;/span&gt;
&lt;a id="rest_code_c79eed607b744b8d9e69bcb38673e8e5-19" name="rest_code_c79eed607b744b8d9e69bcb38673e8e5-19" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_c79eed607b744b8d9e69bcb38673e8e5-19"&gt;&lt;/a&gt;        &lt;span class="n"&gt;message&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;kill&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;div class="code"&gt;&lt;pre class="code text"&gt;&lt;a id="rest_code_d4503550503c4e5788551e1d76ecb69f-1" name="rest_code_d4503550503c4e5788551e1d76ecb69f-1" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_d4503550503c4e5788551e1d76ecb69f-1"&gt;&lt;/a&gt;# /etc/systemd/system/mitm-mastodon-websocket.service
&lt;a id="rest_code_d4503550503c4e5788551e1d76ecb69f-2" name="rest_code_d4503550503c4e5788551e1d76ecb69f-2" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_d4503550503c4e5788551e1d76ecb69f-2"&gt;&lt;/a&gt;[Unit]
&lt;a id="rest_code_d4503550503c4e5788551e1d76ecb69f-3" name="rest_code_d4503550503c4e5788551e1d76ecb69f-3" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_d4503550503c4e5788551e1d76ecb69f-3"&gt;&lt;/a&gt;Description=Mastodon Mitm push websocket
&lt;a id="rest_code_d4503550503c4e5788551e1d76ecb69f-4" name="rest_code_d4503550503c4e5788551e1d76ecb69f-4" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_d4503550503c4e5788551e1d76ecb69f-4"&gt;&lt;/a&gt;After=network.target
&lt;a id="rest_code_d4503550503c4e5788551e1d76ecb69f-5" name="rest_code_d4503550503c4e5788551e1d76ecb69f-5" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_d4503550503c4e5788551e1d76ecb69f-5"&gt;&lt;/a&gt;Wants=network.target
&lt;a id="rest_code_d4503550503c4e5788551e1d76ecb69f-6" name="rest_code_d4503550503c4e5788551e1d76ecb69f-6" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_d4503550503c4e5788551e1d76ecb69f-6"&gt;&lt;/a&gt;
&lt;a id="rest_code_d4503550503c4e5788551e1d76ecb69f-7" name="rest_code_d4503550503c4e5788551e1d76ecb69f-7" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_d4503550503c4e5788551e1d76ecb69f-7"&gt;&lt;/a&gt;[Service]
&lt;a id="rest_code_d4503550503c4e5788551e1d76ecb69f-8" name="rest_code_d4503550503c4e5788551e1d76ecb69f-8" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_d4503550503c4e5788551e1d76ecb69f-8"&gt;&lt;/a&gt;Type=simple
&lt;a id="rest_code_d4503550503c4e5788551e1d76ecb69f-9" name="rest_code_d4503550503c4e5788551e1d76ecb69f-9" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_d4503550503c4e5788551e1d76ecb69f-9"&gt;&lt;/a&gt;User=www-data
&lt;a id="rest_code_d4503550503c4e5788551e1d76ecb69f-10" name="rest_code_d4503550503c4e5788551e1d76ecb69f-10" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_d4503550503c4e5788551e1d76ecb69f-10"&gt;&lt;/a&gt;Slice=system-mitm.slice
&lt;a id="rest_code_d4503550503c4e5788551e1d76ecb69f-11" name="rest_code_d4503550503c4e5788551e1d76ecb69f-11" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_d4503550503c4e5788551e1d76ecb69f-11"&gt;&lt;/a&gt;ExecStart=/usr/bin/mitmdump --listen-host 127.0.0.1 -p 4444 -s /opt/mastodon_websocket_messages.py --mode reverse:http://127.0.0.1:4000 --set keep_host_header --quiet
&lt;a id="rest_code_d4503550503c4e5788551e1d76ecb69f-12" name="rest_code_d4503550503c4e5788551e1d76ecb69f-12" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_d4503550503c4e5788551e1d76ecb69f-12"&gt;&lt;/a&gt;Restart=on-failure
&lt;a id="rest_code_d4503550503c4e5788551e1d76ecb69f-13" name="rest_code_d4503550503c4e5788551e1d76ecb69f-13" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_d4503550503c4e5788551e1d76ecb69f-13"&gt;&lt;/a&gt;
&lt;a id="rest_code_d4503550503c4e5788551e1d76ecb69f-14" name="rest_code_d4503550503c4e5788551e1d76ecb69f-14" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_d4503550503c4e5788551e1d76ecb69f-14"&gt;&lt;/a&gt;[Install]
&lt;a id="rest_code_d4503550503c4e5788551e1d76ecb69f-15" name="rest_code_d4503550503c4e5788551e1d76ecb69f-15" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#rest_code_d4503550503c4e5788551e1d76ecb69f-15"&gt;&lt;/a&gt;WantedBy=multi-user.target
&lt;/pre&gt;&lt;/div&gt;
&lt;/section&gt;
&lt;/section&gt;
&lt;section id="section-4"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/#toc-entry-14" role="doc-backlink"&gt;参考资料&lt;/a&gt;&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference external" href="https://docs.joinmastodon.org/admin/config/"&gt;Configuring your environment&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference external" href="https://github.com/mastodon/documentation/blob/archive/Running-Mastodon/Serving_a_different_domain.md"&gt;Using a different domain name for Mastodon and the users it serves&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference external" href="https://docs.joinmastodon.org/spec/webfinger/"&gt;WebFinger&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;</description><category>Mastodon</category><guid>https://blog.bgme.me/posts/2022/full-explanation-of-mastodon-domain-name-settings/</guid><pubDate>Mon, 05 Dec 2022 14:31:19 GMT</pubDate></item><item><title>十个新时代童话故事</title><link>https://blog.bgme.me/posts/2022/shi-ge-xin-shi-dai-tong-hua-gu-shi/</link><dc:creator>无影人</dc:creator><description>&lt;p&gt;原贴地址：&lt;a class="reference external" href="https://weibo.com/1667542751/Gmw2rEuBC"&gt;https://weibo.com/1667542751/Gmw2rEuBC&lt;/a&gt;&lt;/p&gt;
&lt;!-- TEASER_END --&gt;
&lt;ol class="arabic simple"&gt;
&lt;li&gt;&lt;p&gt;“哈哈哈哈皇帝的衣服没有穿好！” 路边的小男孩说。皇帝想了一想，先把小男孩抓起来，再把听众的舌头割掉。又想了一想，干脆把衣服全部脱光了。&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;卖火柴的小女孩冻死在路边的消息，传出后人们议论纷纷，甲说：“小商小贩路边占道经营本来就该管管了。” 乙说：“对啊，难道她穷就有理吗？” 丙说：“太平盛世哪有什么冻死的小女孩？莫要轻信境外势力捏造。”&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;白雪公主在森林里躲避追杀遭遇千难万险，王国警方温馨提醒：单身女性需注意安全，避免独自外出。&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;艾丽莎满手鲜血，终于编织出了荨麻衣，将十一个哥哥从野天鹅变回王子。哥哥们看着艾丽莎一个女孩，就把国王死前分给她的封地占了。&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;海的女儿喝下巫婆的汤剂，丢失了声音不说，走路也像在刀尖上。她和姐姐们一起揭露汤剂成分有害，被判侵犯了制剂公司声誉，押入海牢。&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;神仙教母数次向王国警方求助，要求解救长期遭受家庭暴力的灰姑娘。王国警方表示，清官难断家务事，再说也已经对灰姑娘的父亲等人进行了批评教育。王国女性儿童促进会对灰姑娘进行家访，拍了一张灰姑娘笑着干活的照片，表示她生活的其实很好，神仙教母介入他人家庭事务，对这个家庭伤害很大。&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;贝儿被父亲卖给野兽抵债，逃出来后，围观群众表示：野兽是真的爱你啊！你怎么能这么狠心就不要这个家了呢？想想孩子！——国王听说贝儿在城堡里教家具识字，赐予她“感动城堡”勋章，希望她回到野兽身边。&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;睡美人说，她并没有同意王子碰她。有人说，“谁让你不省人事的？” 还有人说，“他可是王子！什么样的公主找不到。会稀罕强吻你？”&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;樵夫决定，把汉赛尔和格莱特兄妹带到密林中，生一团火，给每人一个小面包，然后假装去干活好把他们遗弃在那里。第二天出门时，他想了想，还是把哥哥汉赛尔留在了家里。&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;如果要打开山洞封闭的大门，需要爬上云梯、学会咒语——梯子经常断、咒语也时常换，会开门的阿里巴巴时常得意地说，“没有这个智力和体力的人，本来就不配有开着的门。”&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;</description><category>毛象搬运</category><category>转载</category><guid>https://blog.bgme.me/posts/2022/shi-ge-xin-shi-dai-tong-hua-gu-shi/</guid><pubDate>Mon, 21 Nov 2022 15:37:27 GMT</pubDate></item><item><title>手把手教你如何一步步开启 Secure Boot</title><link>https://blog.bgme.me/posts/2022/how-to-enable-secure-boot-step-by-step/</link><dc:creator>无影人</dc:creator><description>&lt;p&gt;启用全盘加密对于移动设备（手机、笔记本）的必要性无须多言，就算防不住条子防不住六扇门，也可以防防修电脑的人（参考陈冠希艳照门），防防手机、笔记本被偷导致的数据泄露。&lt;/p&gt;
&lt;p&gt;此外，目前一些品牌笔记本原装系统已经默认启用了 Bitlocker 全盘加密，对于这样的笔记本，如果你想装双系统，同时不想关闭 Bitlocker，那么为 Linux 系统配置启用 Secure Boot 便是必须的。&lt;/p&gt;
&lt;p&gt;本文将简单记录一下：如何一步步为新系统安装 systemd-boot 引导同时启用 Secure Boot 的具体操作流程，希望对各位有所帮助。&lt;/p&gt;
&lt;!-- TEASER_END --&gt;
&lt;hr class="docutils"&gt;
&lt;p&gt;首先要禁用 Secure Boot ，这就不用多说了。&lt;/p&gt;
&lt;p&gt;以下步骤操作针对 &lt;code class="docutils literal"&gt;/boot&lt;/code&gt; 分区同时为 ESP 分区的情况。&lt;/p&gt;
&lt;section id="systemd-boot"&gt;
&lt;h2&gt;第一步：安装 systemd-boot&lt;/h2&gt;
&lt;p&gt;安装 EFI boot manager&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code bash"&gt;&lt;a id="rest_code_d37ac4779479495ab3664e7e0cc1321c-1" name="rest_code_d37ac4779479495ab3664e7e0cc1321c-1" href="https://blog.bgme.me/posts/2022/how-to-enable-secure-boot-step-by-step/#rest_code_d37ac4779479495ab3664e7e0cc1321c-1"&gt;&lt;/a&gt;bootctl&lt;span class="w"&gt; &lt;/span&gt;install
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;然后你应当看到 &lt;code class="docutils literal"&gt;&lt;span class="pre"&gt;/boot/EFI/systemd/systemd-bootx64.efi&lt;/span&gt;&lt;/code&gt; 、&lt;code class="docutils literal"&gt;/boot/EFI/EFI/BOOT/BOOTX64.EFI&lt;/code&gt; 两个文件了。&lt;/p&gt;
&lt;p&gt;使用 &lt;code class="docutils literal"&gt;efibootmgr &lt;span class="pre"&gt;--verbose&lt;/span&gt;&lt;/code&gt; 应当也能看到 systemd-boot 的启动项。&lt;/p&gt;
&lt;p&gt;然后在 &lt;code class="docutils literal"&gt;/boot/loader&lt;/code&gt; 目录添加相应的配置文件，systemd-boot 并不能像 grub 那样自动生成配置文件。&lt;/p&gt;
&lt;p&gt;添加 &lt;code class="docutils literal"&gt;/boot/loader/entries/linux.conf&lt;/code&gt;&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code text"&gt;&lt;a id="rest_code_47be8a6d01fa43348b9e13ef990ab39f-1" name="rest_code_47be8a6d01fa43348b9e13ef990ab39f-1" href="https://blog.bgme.me/posts/2022/how-to-enable-secure-boot-step-by-step/#rest_code_47be8a6d01fa43348b9e13ef990ab39f-1"&gt;&lt;/a&gt;title Arch Linux
&lt;a id="rest_code_47be8a6d01fa43348b9e13ef990ab39f-2" name="rest_code_47be8a6d01fa43348b9e13ef990ab39f-2" href="https://blog.bgme.me/posts/2022/how-to-enable-secure-boot-step-by-step/#rest_code_47be8a6d01fa43348b9e13ef990ab39f-2"&gt;&lt;/a&gt;linux /vmlinuz-linux
&lt;a id="rest_code_47be8a6d01fa43348b9e13ef990ab39f-3" name="rest_code_47be8a6d01fa43348b9e13ef990ab39f-3" href="https://blog.bgme.me/posts/2022/how-to-enable-secure-boot-step-by-step/#rest_code_47be8a6d01fa43348b9e13ef990ab39f-3"&gt;&lt;/a&gt;initrd /amd-ucode.img
&lt;a id="rest_code_47be8a6d01fa43348b9e13ef990ab39f-4" name="rest_code_47be8a6d01fa43348b9e13ef990ab39f-4" href="https://blog.bgme.me/posts/2022/how-to-enable-secure-boot-step-by-step/#rest_code_47be8a6d01fa43348b9e13ef990ab39f-4"&gt;&lt;/a&gt;initrd /initramfs-linux.img
&lt;a id="rest_code_47be8a6d01fa43348b9e13ef990ab39f-5" name="rest_code_47be8a6d01fa43348b9e13ef990ab39f-5" href="https://blog.bgme.me/posts/2022/how-to-enable-secure-boot-step-by-step/#rest_code_47be8a6d01fa43348b9e13ef990ab39f-5"&gt;&lt;/a&gt;options loglevel=3 root="LABEL=arch_os" rw
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;添加 &lt;code class="docutils literal"&gt;&lt;span class="pre"&gt;/boot/loader/entries/linux-fallback.conf&lt;/span&gt;&lt;/code&gt;&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code text"&gt;&lt;a id="rest_code_3cd8b18a47634907be34d86474728ba1-1" name="rest_code_3cd8b18a47634907be34d86474728ba1-1" href="https://blog.bgme.me/posts/2022/how-to-enable-secure-boot-step-by-step/#rest_code_3cd8b18a47634907be34d86474728ba1-1"&gt;&lt;/a&gt;title Arch Linux (fallback initramfs)
&lt;a id="rest_code_3cd8b18a47634907be34d86474728ba1-2" name="rest_code_3cd8b18a47634907be34d86474728ba1-2" href="https://blog.bgme.me/posts/2022/how-to-enable-secure-boot-step-by-step/#rest_code_3cd8b18a47634907be34d86474728ba1-2"&gt;&lt;/a&gt;linux /vmlinuz-linux
&lt;a id="rest_code_3cd8b18a47634907be34d86474728ba1-3" name="rest_code_3cd8b18a47634907be34d86474728ba1-3" href="https://blog.bgme.me/posts/2022/how-to-enable-secure-boot-step-by-step/#rest_code_3cd8b18a47634907be34d86474728ba1-3"&gt;&lt;/a&gt;initrd /amd-ucode.img
&lt;a id="rest_code_3cd8b18a47634907be34d86474728ba1-4" name="rest_code_3cd8b18a47634907be34d86474728ba1-4" href="https://blog.bgme.me/posts/2022/how-to-enable-secure-boot-step-by-step/#rest_code_3cd8b18a47634907be34d86474728ba1-4"&gt;&lt;/a&gt;initrd /initramfs-linux-fallback.img
&lt;a id="rest_code_3cd8b18a47634907be34d86474728ba1-5" name="rest_code_3cd8b18a47634907be34d86474728ba1-5" href="https://blog.bgme.me/posts/2022/how-to-enable-secure-boot-step-by-step/#rest_code_3cd8b18a47634907be34d86474728ba1-5"&gt;&lt;/a&gt;options loglevel=3 root="LABEL=arch_os" rw
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;需要安装 &lt;code class="docutils literal"&gt;&lt;span class="pre"&gt;amd-ucode&lt;/span&gt;&lt;/code&gt;，且以上仅为示例，请根据自己情况修改 options 。&lt;/p&gt;
&lt;p&gt;添加 &lt;code class="docutils literal"&gt;/boot/loader/loader.conf&lt;/code&gt;&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code text"&gt;&lt;a id="rest_code_9ebf5a4ba9c449fdaf89b77b3c9e3d60-1" name="rest_code_9ebf5a4ba9c449fdaf89b77b3c9e3d60-1" href="https://blog.bgme.me/posts/2022/how-to-enable-secure-boot-step-by-step/#rest_code_9ebf5a4ba9c449fdaf89b77b3c9e3d60-1"&gt;&lt;/a&gt;timeout 3
&lt;a id="rest_code_9ebf5a4ba9c449fdaf89b77b3c9e3d60-2" name="rest_code_9ebf5a4ba9c449fdaf89b77b3c9e3d60-2" href="https://blog.bgme.me/posts/2022/how-to-enable-secure-boot-step-by-step/#rest_code_9ebf5a4ba9c449fdaf89b77b3c9e3d60-2"&gt;&lt;/a&gt;console-mode keep
&lt;a id="rest_code_9ebf5a4ba9c449fdaf89b77b3c9e3d60-3" name="rest_code_9ebf5a4ba9c449fdaf89b77b3c9e3d60-3" href="https://blog.bgme.me/posts/2022/how-to-enable-secure-boot-step-by-step/#rest_code_9ebf5a4ba9c449fdaf89b77b3c9e3d60-3"&gt;&lt;/a&gt;default linux.conf
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;然后重启系统，确认 &lt;code class="docutils literal"&gt;&lt;span class="pre"&gt;systemd-boot&lt;/span&gt;&lt;/code&gt; 可以正常工作后进入下一步&lt;/p&gt;
&lt;/section&gt;
&lt;section id="shim"&gt;
&lt;h2&gt;第二步：安装 shim&lt;/h2&gt;
&lt;p&gt;安装 &lt;code class="docutils literal"&gt;&lt;span class="pre"&gt;shim-signed&lt;/span&gt;&lt;/code&gt;、&lt;code class="docutils literal"&gt;sbsigntools&lt;/code&gt;。&lt;/p&gt;
&lt;section id="section-1"&gt;
&lt;h3&gt;复制文件&lt;/h3&gt;
&lt;div class="code"&gt;&lt;pre class="code bash"&gt;&lt;a id="rest_code_b886eb7b205b43019d6ffbf518b5f61e-1" name="rest_code_b886eb7b205b43019d6ffbf518b5f61e-1" href="https://blog.bgme.me/posts/2022/how-to-enable-secure-boot-step-by-step/#rest_code_b886eb7b205b43019d6ffbf518b5f61e-1"&gt;&lt;/a&gt;cp&lt;span class="w"&gt; &lt;/span&gt;/usr/share/shim-signed/shimx64.efi&lt;span class="w"&gt; &lt;/span&gt;/boot/EFI/systemd/
&lt;a id="rest_code_b886eb7b205b43019d6ffbf518b5f61e-2" name="rest_code_b886eb7b205b43019d6ffbf518b5f61e-2" href="https://blog.bgme.me/posts/2022/how-to-enable-secure-boot-step-by-step/#rest_code_b886eb7b205b43019d6ffbf518b5f61e-2"&gt;&lt;/a&gt;cp&lt;span class="w"&gt; &lt;/span&gt;/usr/share/shim-signed/mmx64.efi&lt;span class="w"&gt; &lt;/span&gt;/boot/EFI/systemd/
&lt;/pre&gt;&lt;/div&gt;
&lt;/section&gt;
&lt;/section&gt;
&lt;section id="efi"&gt;
&lt;h2&gt;第三步：添加 EFI 启动项&lt;/h2&gt;
&lt;div class="code"&gt;&lt;pre class="code bash"&gt;&lt;a id="rest_code_61757cf7dc7141cf930635d0185b99b4-1" name="rest_code_61757cf7dc7141cf930635d0185b99b4-1" href="https://blog.bgme.me/posts/2022/how-to-enable-secure-boot-step-by-step/#rest_code_61757cf7dc7141cf930635d0185b99b4-1"&gt;&lt;/a&gt;efibootmgr&lt;span class="w"&gt; &lt;/span&gt;--verbose&lt;span class="w"&gt; &lt;/span&gt;--disk&lt;span class="w"&gt; &lt;/span&gt;/dev/sdX&lt;span class="w"&gt; &lt;/span&gt;--part&lt;span class="w"&gt; &lt;/span&gt;Y&lt;span class="w"&gt; &lt;/span&gt;--create&lt;span class="w"&gt; &lt;/span&gt;--label&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Shim"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;--loader&lt;span class="w"&gt; &lt;/span&gt;/EFI/systemd/shimx64.efi
&lt;/pre&gt;&lt;/div&gt;
&lt;/section&gt;
&lt;section id="mok"&gt;
&lt;h2&gt;第四步：生成 MOK 密匙&lt;/h2&gt;
&lt;div class="code"&gt;&lt;pre class="code bash"&gt;&lt;a id="rest_code_d619fc67e1ed41f0913db7458f0212a9-1" name="rest_code_d619fc67e1ed41f0913db7458f0212a9-1" href="https://blog.bgme.me/posts/2022/how-to-enable-secure-boot-step-by-step/#rest_code_d619fc67e1ed41f0913db7458f0212a9-1"&gt;&lt;/a&gt;openssl&lt;span class="w"&gt; &lt;/span&gt;req&lt;span class="w"&gt; &lt;/span&gt;-newkey&lt;span class="w"&gt; &lt;/span&gt;rsa:4096&lt;span class="w"&gt; &lt;/span&gt;-nodes&lt;span class="w"&gt; &lt;/span&gt;-keyout&lt;span class="w"&gt; &lt;/span&gt;MOK.key&lt;span class="w"&gt; &lt;/span&gt;-new&lt;span class="w"&gt; &lt;/span&gt;-x509&lt;span class="w"&gt; &lt;/span&gt;-sha256&lt;span class="w"&gt; &lt;/span&gt;-days&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;3650&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;-subj&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"/CN=my Machine Owner Key/"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;-out&lt;span class="w"&gt; &lt;/span&gt;MOK.crt
&lt;a id="rest_code_d619fc67e1ed41f0913db7458f0212a9-2" name="rest_code_d619fc67e1ed41f0913db7458f0212a9-2" href="https://blog.bgme.me/posts/2022/how-to-enable-secure-boot-step-by-step/#rest_code_d619fc67e1ed41f0913db7458f0212a9-2"&gt;&lt;/a&gt;openssl&lt;span class="w"&gt; &lt;/span&gt;x509&lt;span class="w"&gt; &lt;/span&gt;-outform&lt;span class="w"&gt; &lt;/span&gt;DER&lt;span class="w"&gt; &lt;/span&gt;-in&lt;span class="w"&gt; &lt;/span&gt;MOK.crt&lt;span class="w"&gt; &lt;/span&gt;-out&lt;span class="w"&gt; &lt;/span&gt;MOK.cer
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;将 &lt;code class="docutils literal"&gt;MOK.cer&lt;/code&gt; 复制至 &lt;code class="docutils literal"&gt;/boot/MOK.cer&lt;/code&gt;。
将 &lt;code class="docutils literal"&gt;MOK.cer&lt;/code&gt; 复制至 &lt;code class="docutils literal"&gt;/etc/mok/MOK.cer&lt;/code&gt;。
将 &lt;code class="docutils literal"&gt;MOK.crt&lt;/code&gt; 复制至 &lt;code class="docutils literal"&gt;/etc/mok/MOK.key&lt;/code&gt;，特别注意文件权限。&lt;/p&gt;
&lt;/section&gt;
&lt;section id="section-2"&gt;
&lt;h2&gt;第五步：签名启动器及内核&lt;/h2&gt;
&lt;section id="systemd-boot-1"&gt;
&lt;h3&gt;签名 systemd-boot&lt;/h3&gt;
&lt;div class="code"&gt;&lt;pre class="code bash"&gt;&lt;a id="rest_code_e3147d8d04ef4637b754925fcc0f8673-1" name="rest_code_e3147d8d04ef4637b754925fcc0f8673-1" href="https://blog.bgme.me/posts/2022/how-to-enable-secure-boot-step-by-step/#rest_code_e3147d8d04ef4637b754925fcc0f8673-1"&gt;&lt;/a&gt;cp&lt;span class="w"&gt; &lt;/span&gt;/boot/EFI/systemd/systemd-bootx64.efi&lt;span class="w"&gt; &lt;/span&gt;/boot/EFI/systemd/grubx64.efi
&lt;a id="rest_code_e3147d8d04ef4637b754925fcc0f8673-2" name="rest_code_e3147d8d04ef4637b754925fcc0f8673-2" href="https://blog.bgme.me/posts/2022/how-to-enable-secure-boot-step-by-step/#rest_code_e3147d8d04ef4637b754925fcc0f8673-2"&gt;&lt;/a&gt;sbsign&lt;span class="w"&gt; &lt;/span&gt;--key&lt;span class="w"&gt; &lt;/span&gt;MOK.key&lt;span class="w"&gt; &lt;/span&gt;--cert&lt;span class="w"&gt; &lt;/span&gt;MOK.crt&lt;span class="w"&gt; &lt;/span&gt;--output&lt;span class="w"&gt; &lt;/span&gt;/boot/EFI/systemd/grubx64.efi&lt;span class="w"&gt; &lt;/span&gt;/boot/EFI/systemd/grubx64.efi
&lt;/pre&gt;&lt;/div&gt;
&lt;/section&gt;
&lt;section id="section-3"&gt;
&lt;h3&gt;签名内核&lt;/h3&gt;
&lt;div class="code"&gt;&lt;pre class="code bash"&gt;&lt;a id="rest_code_379f36ab1c7940a8ad094339b8a81535-1" name="rest_code_379f36ab1c7940a8ad094339b8a81535-1" href="https://blog.bgme.me/posts/2022/how-to-enable-secure-boot-step-by-step/#rest_code_379f36ab1c7940a8ad094339b8a81535-1"&gt;&lt;/a&gt;sbsign&lt;span class="w"&gt; &lt;/span&gt;--key&lt;span class="w"&gt; &lt;/span&gt;MOK.key&lt;span class="w"&gt; &lt;/span&gt;--cert&lt;span class="w"&gt; &lt;/span&gt;MOK.crt&lt;span class="w"&gt; &lt;/span&gt;--output&lt;span class="w"&gt; &lt;/span&gt;/boot/vmlinuz-linux&lt;span class="w"&gt; &lt;/span&gt;/boot/vmlinuz-linux
&lt;/pre&gt;&lt;/div&gt;
&lt;/section&gt;
&lt;/section&gt;
&lt;section id="pacman-hook"&gt;
&lt;h2&gt;第六步：添加 pacman hook&lt;/h2&gt;
&lt;p&gt;&lt;code class="docutils literal"&gt;&lt;span class="pre"&gt;/etc/pacman.d/hooks/999-sign_kernel_for_secureboot.hook&lt;/span&gt;&lt;/code&gt;&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code text"&gt;&lt;a id="rest_code_e234ff59242e4cf0961c0b39d1db7d98-1" name="rest_code_e234ff59242e4cf0961c0b39d1db7d98-1" href="https://blog.bgme.me/posts/2022/how-to-enable-secure-boot-step-by-step/#rest_code_e234ff59242e4cf0961c0b39d1db7d98-1"&gt;&lt;/a&gt;[Trigger]
&lt;a id="rest_code_e234ff59242e4cf0961c0b39d1db7d98-2" name="rest_code_e234ff59242e4cf0961c0b39d1db7d98-2" href="https://blog.bgme.me/posts/2022/how-to-enable-secure-boot-step-by-step/#rest_code_e234ff59242e4cf0961c0b39d1db7d98-2"&gt;&lt;/a&gt;Operation = Install
&lt;a id="rest_code_e234ff59242e4cf0961c0b39d1db7d98-3" name="rest_code_e234ff59242e4cf0961c0b39d1db7d98-3" href="https://blog.bgme.me/posts/2022/how-to-enable-secure-boot-step-by-step/#rest_code_e234ff59242e4cf0961c0b39d1db7d98-3"&gt;&lt;/a&gt;Operation = Upgrade
&lt;a id="rest_code_e234ff59242e4cf0961c0b39d1db7d98-4" name="rest_code_e234ff59242e4cf0961c0b39d1db7d98-4" href="https://blog.bgme.me/posts/2022/how-to-enable-secure-boot-step-by-step/#rest_code_e234ff59242e4cf0961c0b39d1db7d98-4"&gt;&lt;/a&gt;Type = Package
&lt;a id="rest_code_e234ff59242e4cf0961c0b39d1db7d98-5" name="rest_code_e234ff59242e4cf0961c0b39d1db7d98-5" href="https://blog.bgme.me/posts/2022/how-to-enable-secure-boot-step-by-step/#rest_code_e234ff59242e4cf0961c0b39d1db7d98-5"&gt;&lt;/a&gt;Target = linux
&lt;a id="rest_code_e234ff59242e4cf0961c0b39d1db7d98-6" name="rest_code_e234ff59242e4cf0961c0b39d1db7d98-6" href="https://blog.bgme.me/posts/2022/how-to-enable-secure-boot-step-by-step/#rest_code_e234ff59242e4cf0961c0b39d1db7d98-6"&gt;&lt;/a&gt;Target = linux-lts
&lt;a id="rest_code_e234ff59242e4cf0961c0b39d1db7d98-7" name="rest_code_e234ff59242e4cf0961c0b39d1db7d98-7" href="https://blog.bgme.me/posts/2022/how-to-enable-secure-boot-step-by-step/#rest_code_e234ff59242e4cf0961c0b39d1db7d98-7"&gt;&lt;/a&gt;Target = linux-hardened
&lt;a id="rest_code_e234ff59242e4cf0961c0b39d1db7d98-8" name="rest_code_e234ff59242e4cf0961c0b39d1db7d98-8" href="https://blog.bgme.me/posts/2022/how-to-enable-secure-boot-step-by-step/#rest_code_e234ff59242e4cf0961c0b39d1db7d98-8"&gt;&lt;/a&gt;Target = linux-zen
&lt;a id="rest_code_e234ff59242e4cf0961c0b39d1db7d98-9" name="rest_code_e234ff59242e4cf0961c0b39d1db7d98-9" href="https://blog.bgme.me/posts/2022/how-to-enable-secure-boot-step-by-step/#rest_code_e234ff59242e4cf0961c0b39d1db7d98-9"&gt;&lt;/a&gt;
&lt;a id="rest_code_e234ff59242e4cf0961c0b39d1db7d98-10" name="rest_code_e234ff59242e4cf0961c0b39d1db7d98-10" href="https://blog.bgme.me/posts/2022/how-to-enable-secure-boot-step-by-step/#rest_code_e234ff59242e4cf0961c0b39d1db7d98-10"&gt;&lt;/a&gt;[Action]
&lt;a id="rest_code_e234ff59242e4cf0961c0b39d1db7d98-11" name="rest_code_e234ff59242e4cf0961c0b39d1db7d98-11" href="https://blog.bgme.me/posts/2022/how-to-enable-secure-boot-step-by-step/#rest_code_e234ff59242e4cf0961c0b39d1db7d98-11"&gt;&lt;/a&gt;Description = Signing kernel with Machine Owner Key for Secure Boot
&lt;a id="rest_code_e234ff59242e4cf0961c0b39d1db7d98-12" name="rest_code_e234ff59242e4cf0961c0b39d1db7d98-12" href="https://blog.bgme.me/posts/2022/how-to-enable-secure-boot-step-by-step/#rest_code_e234ff59242e4cf0961c0b39d1db7d98-12"&gt;&lt;/a&gt;When = PostTransaction
&lt;a id="rest_code_e234ff59242e4cf0961c0b39d1db7d98-13" name="rest_code_e234ff59242e4cf0961c0b39d1db7d98-13" href="https://blog.bgme.me/posts/2022/how-to-enable-secure-boot-step-by-step/#rest_code_e234ff59242e4cf0961c0b39d1db7d98-13"&gt;&lt;/a&gt;Exec = /usr/bin/find /boot/ -maxdepth 1 -name 'vmlinuz-*' -exec /usr/bin/sh -c 'if ! /usr/bin/sbverify --list {} 2&amp;gt;/dev/null | /usr/bin/grep -q "signature certificates"; then /usr/bin/sbsign --key /etc/mok/MOK.key --cert /etc/mok/MOK.crt --output {} {}; fi' ;
&lt;a id="rest_code_e234ff59242e4cf0961c0b39d1db7d98-14" name="rest_code_e234ff59242e4cf0961c0b39d1db7d98-14" href="https://blog.bgme.me/posts/2022/how-to-enable-secure-boot-step-by-step/#rest_code_e234ff59242e4cf0961c0b39d1db7d98-14"&gt;&lt;/a&gt;Depends = sbsigntools
&lt;a id="rest_code_e234ff59242e4cf0961c0b39d1db7d98-15" name="rest_code_e234ff59242e4cf0961c0b39d1db7d98-15" href="https://blog.bgme.me/posts/2022/how-to-enable-secure-boot-step-by-step/#rest_code_e234ff59242e4cf0961c0b39d1db7d98-15"&gt;&lt;/a&gt;Depends = findutils
&lt;a id="rest_code_e234ff59242e4cf0961c0b39d1db7d98-16" name="rest_code_e234ff59242e4cf0961c0b39d1db7d98-16" href="https://blog.bgme.me/posts/2022/how-to-enable-secure-boot-step-by-step/#rest_code_e234ff59242e4cf0961c0b39d1db7d98-16"&gt;&lt;/a&gt;Depends = grep
&lt;/pre&gt;&lt;/div&gt;
&lt;/section&gt;
&lt;section id="secure-boot"&gt;
&lt;h2&gt;第七步：启用 Secure Boot&lt;/h2&gt;
&lt;p&gt;重启系统，启用 Secure Boot。&lt;/p&gt;
&lt;p&gt;开机时按 F12 选择启动项 shim。&lt;/p&gt;
&lt;p&gt;初次启动时会让你导入 MOK，导入成功后再次重启。&lt;/p&gt;
&lt;p&gt;如果能正常进入系统，即完成 Secure Boot 的设置，可以进入 BIOS 将默认启动项设为 shim 。&lt;/p&gt;
&lt;/section&gt;
&lt;section id="tpm"&gt;
&lt;h2&gt;可选项：将密钥导入 TPM&lt;/h2&gt;
&lt;p&gt;启动全盘加密之后，一个使用的问题的每次启动都需要输入解密密码，虽然不是很麻烦，但每次启动都要输入还是有一点点麻烦的。&lt;/p&gt;
&lt;p&gt;将加密密钥导入 TPM，便可以像 Windows 那样，启动时自动解密。&lt;/p&gt;
&lt;p&gt;当然这样做会降低系统的安全性。&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code bash"&gt;&lt;a id="rest_code_a5b50f1a20eb4068a3088f2908d54fcb-1" name="rest_code_a5b50f1a20eb4068a3088f2908d54fcb-1" href="https://blog.bgme.me/posts/2022/how-to-enable-secure-boot-step-by-step/#rest_code_a5b50f1a20eb4068a3088f2908d54fcb-1"&gt;&lt;/a&gt;systemd-cryptenroll&lt;span class="w"&gt; &lt;/span&gt;--tpm2-device&lt;span class="o"&gt;=&lt;/span&gt;/dev/tpmrm0&lt;span class="w"&gt; &lt;/span&gt;--tpm2-pcrs&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;+2+5+7+12+14&lt;span class="w"&gt;  &lt;/span&gt;/dev/sdxx
&lt;/pre&gt;&lt;/div&gt;
&lt;/section&gt;
&lt;section id="section-4"&gt;
&lt;h2&gt;后记&lt;/h2&gt;
&lt;p&gt;本文仅仅是一篇简单的操作记录，更多内容还请参考 Arch Linux wiki。&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference external" href="https://wiki.archlinux.org/title/Systemd-boot"&gt;systemd-boot&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference external" href="https://wiki.archlinux.org/title/Unified_Extensible_Firmware_Interface/Secure_Boot"&gt;Unified Extensible Firmware Interface/Secure Boot&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference external" href="https://wiki.archlinux.org/title/Dm-crypt/Device_encryption"&gt;dm-crypt/Device encryption&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference external" href="https://wiki.archlinux.org/title/Trusted_Platform_Module"&gt;Trusted Platform Module&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference external" href="https://man.archlinux.org/man/systemd-cryptenroll.1"&gt;systemd-cryptenroll&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;</description><category>Secure Boot</category><category>systemd-boot</category><category>TPM</category><guid>https://blog.bgme.me/posts/2022/how-to-enable-secure-boot-step-by-step/</guid><pubDate>Sat, 15 Oct 2022 04:17:12 GMT</pubDate></item><item><title>NAS成本核算</title><link>https://blog.bgme.me/posts/2022/nas-costing/</link><dc:creator>无影人</dc:creator><description>&lt;p&gt;前段时间发了关于自组NAS的嘟文，如今我的NAS也已经组好，并且已经使用了一段时间了。对于家用NAS也有更多以及更直观的体会。&lt;/p&gt;
&lt;p&gt;今天便在这回答这样一个问题：NAS每年费用大约多少，相较网盘而言是否划算？&lt;/p&gt;
&lt;!-- TEASER_END --&gt;
&lt;p&gt;NAS的费用大致可以分为三个部分：NAS主机成本+存储设备成本+电费。&lt;/p&gt;
&lt;p&gt;存储设备成本：参考淘宝seagate希捷旗舰店的Seagate希捷银河16T机械硬盘，质保五年，价格￥1999，计算可得每TB每年成本约25元（2000÷5÷16=25）。&lt;/p&gt;
&lt;p&gt;电费：我手头自组的这台NAS（E5v4）CPU空闲时实测整机功率约50W。参考群晖的资料以及网友的反馈，NAS平时功率大约30W。电价以每度0.6元计算，可得一年电费约262.8元（50W），157.68元（30W）。&lt;/p&gt;
&lt;p&gt;NAS主机成本波动范围相当大，这里选取几个代表供大家参考：&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;synology群晖ds920+，￥4680，质保三年，每年成本约：1560元（4680÷3=1560）&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;QNAP威联通TS-416，￥2299，质保两年，每年成本约：1150元（2299÷2=1149.5）&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;联想个人云T2，￥699，质保两年，每年成本约：350元（700÷2=250）&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;联想个人云T2 Pro，￥1199，质保两年，每年成本约：600元（1200÷2=600）&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;至此，对于NAS的每年成本多少，各位心中大概应该有了一个估计吧。&lt;/p&gt;
&lt;p&gt;需要注意的一点是：上述硬件产品的每年成本均基于质保时间计算，产品实际使用寿命可能远长于质保时间，例如：Seagate希捷银河16T机械硬盘，平均故障间隔时间（MTBF）250万小时，计算可知，每天24小时，连续使用10年后该硬盘仍有96%以上的可靠性。&lt;/p&gt;
&lt;p&gt;下面列出一些网盘的会员价格（最顶级会员，2022年10月13日价格，国内网盘价格为APP内显示价格）以供对比：&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;百度网盘超级会员，1年￥298，5TB空间&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;腾迅微云超级会员，12个月￥288元，6TB空间&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;阿里云盘超级会员，1年￥388，20TB空间&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;坚果云高级专业版，1年￥399.9，72GB空间&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Microsoft 365 家庭版 &lt;a class="footnote-reference brackets" href="https://blog.bgme.me/posts/2022/nas-costing/#footnote-1" id="footnote-reference-1" role="doc-noteref"&gt;&lt;span class="fn-bracket"&gt;[&lt;/span&gt;1&lt;span class="fn-bracket"&gt;]&lt;/span&gt;&lt;/a&gt;，¥498.00/年，6TB空间（每人 1 TB）&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Dropbox Professional &lt;a class="footnote-reference brackets" href="https://blog.bgme.me/posts/2022/nas-costing/#footnote-2" id="footnote-reference-2" role="doc-noteref"&gt;&lt;span class="fn-bracket"&gt;[&lt;/span&gt;2&lt;span class="fn-bracket"&gt;]&lt;/span&gt;&lt;/a&gt;，€16.58 / month （1年€198.96，约￥1383.31），3TB空间&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;对比NAS费用及网盘服务费用，我们可以看出，NAS每年费用略高于网盘服务费用。&lt;/p&gt;
&lt;p&gt;但是NAS却给了你数据的完全控制权，从此不用再提心文件存在云盘中带来的隐私泄露、文件审查和谐、服务商倒闭跑路等等问题。此外，3毫秒延迟，125MiB/s（1G网口）读写速度，这样的性能是任何云盘都给不了的。&lt;/p&gt;
&lt;aside class="footnote-list brackets"&gt;
&lt;aside class="footnote brackets" id="footnote-1" role="doc-footnote"&gt;
&lt;span class="label"&gt;&lt;span class="fn-bracket"&gt;[&lt;/span&gt;&lt;a role="doc-backlink" href="https://blog.bgme.me/posts/2022/nas-costing/#footnote-reference-1"&gt;1&lt;/a&gt;&lt;span class="fn-bracket"&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;p&gt;&lt;a class="reference external" href="https://www.microsoft.com/zh-cn/microsoft-365/buy/compare-all-microsoft-365-products"&gt;https://www.microsoft.com/zh-cn/microsoft-365/buy/compare-all-microsoft-365-products&lt;/a&gt;&lt;/p&gt;
&lt;/aside&gt;
&lt;aside class="footnote brackets" id="footnote-2" role="doc-footnote"&gt;
&lt;span class="label"&gt;&lt;span class="fn-bracket"&gt;[&lt;/span&gt;&lt;a role="doc-backlink" href="https://blog.bgme.me/posts/2022/nas-costing/#footnote-reference-2"&gt;2&lt;/a&gt;&lt;span class="fn-bracket"&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;p&gt;&lt;a class="reference external" href="https://www.dropbox.com/plans"&gt;https://www.dropbox.com/plans&lt;/a&gt;&lt;/p&gt;
&lt;/aside&gt;
&lt;/aside&gt;</description><category>NAS</category><category>毛象搬运</category><guid>https://blog.bgme.me/posts/2022/nas-costing/</guid><pubDate>Sat, 15 Oct 2022 04:16:25 GMT</pubDate></item><item><title>实例详解自定义字体反爬的对抗</title><link>https://blog.bgme.me/posts/2021/shi-li-xiang-jie-zi-ding-yi-zi-ti-fan-pa-de-dui-kang/</link><dc:creator>无影人</dc:creator><description>&lt;figure&gt;&lt;img src="https://blog.bgme.me/images/anti-font-anti-crawler/jjwxc_font_table.png"&gt;&lt;/figure&gt; &lt;div id="cell-id=3c83c26c" class="cell border-box-sizing text_cell rendered"&gt;&lt;div class="prompt input_prompt"&gt;
&lt;/div&gt;&lt;div class="inner_cell"&gt;
&lt;div class="text_cell_render border-box-sizing rendered_html"&gt;
&lt;p&gt;自定义字体是一种很常见的反爬虫方法，本文将以晋江文学城为例详解如何对抗自定义字体反爬。&lt;/p&gt;
&lt;!-- TEASER_END --&gt;


&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id="cell-id=04c45b23" class="cell border-box-sizing text_cell rendered"&gt;&lt;div class="prompt input_prompt"&gt;
&lt;/div&gt;&lt;div class="inner_cell"&gt;
&lt;div class="text_cell_render border-box-sizing rendered_html"&gt;
&lt;p&gt;随便打开一章晋江VIP章节，查看源码，发现一部分在网页中正常显示的字符，在网页源码却中显示为了方块。&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.bgme.me/images/2021/anti-font-anti-crawler/jjwxc_vip_page.png"&gt;&lt;img src="https://blog.bgme.me/images/2021/anti-font-anti-crawler/jjwxc_vip_page.thumbnail.png" alt="晋江文学城VIP章节截图"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;通过 Fonts 选项卡，可以发现这些方块字体使用了自定义字体（jjwxcfont）。&lt;/p&gt;
&lt;p&gt;如果想要制作一个晋江小说下载器，那么这些使用了自定义字体的方块字是一道绕不开的障碍。&lt;/p&gt;

&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id="cell-id=5faa8f91" class="cell border-box-sizing text_cell rendered"&gt;&lt;div class="prompt input_prompt"&gt;
&lt;/div&gt;&lt;div class="inner_cell"&gt;
&lt;div class="text_cell_render border-box-sizing rendered_html"&gt;
&lt;p&gt;除了先全文截图再直接全图OCR，这种简章粗暴的方法之外。&lt;/p&gt;
&lt;p&gt;另一种通用的方法是，先获取并生成自定义字体的字符映射表，然后根据字符映射表将自定义字体字符映射回通用字符。&lt;/p&gt;
&lt;p&gt;下图即是&lt;a href="https://yingziwu.github.io/jjwxcFontTables/jjwxcfont_0004v.html"&gt;某一晋江字体的字符映射表&lt;/a&gt;。&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.bgme.me/images/2021/anti-font-anti-crawler/jjwxc_font_table.png" alt="某一晋江字体的字符映射表"&gt;&lt;/p&gt;
&lt;p&gt;本文将重点讲解如何快速高效自动化地生成晋江自定义字体字符映射表。&lt;/p&gt;

&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id="cell-id=1e9dd895" class="cell border-box-sizing text_cell rendered"&gt;&lt;div class="prompt input_prompt"&gt;
&lt;/div&gt;&lt;div class="inner_cell"&gt;
&lt;div class="text_cell_render border-box-sizing rendered_html"&gt;
&lt;h2 id="%E8%8E%B7%E5%8F%96%E5%AD%97%E4%BD%93%E6%96%87%E4%BB%B6"&gt;获取字体文件&lt;a class="anchor-link" href="https://blog.bgme.me/posts/2021/shi-li-xiang-jie-zi-ding-yi-zi-ti-fan-pa-de-dui-kang/#%E8%8E%B7%E5%8F%96%E5%AD%97%E4%BD%93%E6%96%87%E4%BB%B6"&gt;¶&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;想要破解自定义字体，你首先需要将自定义字体下载下来，这部分工作虽然也很重要，但并不是今天的重点，因此不再赘述。&lt;/p&gt;
&lt;p&gt;如果你对这部分内容感兴趣，可以参考我另一个项目中&lt;a href="https://github.com/yingziwu/novel-downloader/blob/75470fd354e59977937dd769b2b0008e3eed6fa0/src/rules/jjwxc.ts#L268-L304"&gt;相关功能代码&lt;/a&gt;。&lt;/p&gt;

&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id="cell-id=b0932e50" class="cell border-box-sizing text_cell rendered"&gt;&lt;div class="prompt input_prompt"&gt;
&lt;/div&gt;&lt;div class="inner_cell"&gt;
&lt;div class="text_cell_render border-box-sizing rendered_html"&gt;
&lt;h2 id="%E5%A4%A7%E8%87%B4%E5%8D%B0%E8%B1%A1"&gt;大致印象&lt;a class="anchor-link" href="https://blog.bgme.me/posts/2021/shi-li-xiang-jie-zi-ding-yi-zi-ti-fan-pa-de-dui-kang/#%E5%A4%A7%E8%87%B4%E5%8D%B0%E8%B1%A1"&gt;¶&lt;/a&gt;&lt;/h2&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;mkdir&lt;span class="w"&gt; &lt;/span&gt;fonts
wget&lt;span class="w"&gt; &lt;/span&gt;http://static.jjwxc.net/tmp/fonts/jjwxcfont_0004v.woff2?h&lt;span class="o"&gt;=&lt;/span&gt;my.jjwxc.net&lt;span class="w"&gt; &lt;/span&gt;-O&lt;span class="w"&gt; &lt;/span&gt;fonts/jjwxcfont_0004v.woff2
wget&lt;span class="w"&gt; &lt;/span&gt;http://static.jjwxc.net/tmp/fonts/jjwxcfont_00rmg.woff2?h&lt;span class="o"&gt;=&lt;/span&gt;my.jjwxc.net&lt;span class="w"&gt; &lt;/span&gt;-O&lt;span class="w"&gt; &lt;/span&gt;fonts/jjwxcfont_00rmg.woff2
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;使用上述命令下载 &lt;code&gt;jjwxcfont_0004v.woff2&lt;/code&gt; 字体文件，之后本文将以该字体为例进行讲解。&lt;/p&gt;
&lt;p&gt;使用 &lt;a href="https://fontforge.github.io/"&gt;fontforge&lt;/a&gt; 打开该字体文件。&lt;/p&gt;
&lt;p&gt;选择选项：Encoding &amp;gt; Reencode &amp;gt; Glyph Order&lt;/p&gt;
&lt;p&gt;查看该字体文件，获得一个该字体文件的大致印象。&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.bgme.me/images/2021/anti-font-anti-crawler/jjwxcfont_0004v.png" alt="jjwxcfont_0004v"&gt;&lt;/p&gt;

&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id="cell-id=59ac247f" class="cell border-box-sizing text_cell rendered"&gt;&lt;div class="prompt input_prompt"&gt;
&lt;/div&gt;&lt;div class="inner_cell"&gt;
&lt;div class="text_cell_render border-box-sizing rendered_html"&gt;
&lt;h2 id="OCR%E6%B3%95"&gt;OCR法&lt;a class="anchor-link" href="https://blog.bgme.me/posts/2021/shi-li-xiang-jie-zi-ding-yi-zi-ti-fan-pa-de-dui-kang/#OCR%E6%B3%95"&gt;¶&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;OCR法即获取字体文件下所有字符，并将其转换为图片，通过OCR软件识别后进行标记，最终生成字符映射表。&lt;/p&gt;

&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id="cell-id=2c3bc482" class="cell border-box-sizing code_cell rendered"&gt;
&lt;div class="input"&gt;
&lt;div class="prompt input_prompt"&gt;In [1]:&lt;/div&gt;
&lt;div class="inner_cell"&gt;
    &lt;div class="input_area"&gt;
&lt;div class=" highlight hl-ipython3"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;os&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;shutil&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;tempfile&lt;/span&gt;

&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;fontTools.ttLib&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;woff2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;ttFont&lt;/span&gt;

&lt;span class="n"&gt;PWD&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;getcwd&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="n"&gt;TMP&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;tempfile&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;mkdtemp&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="n"&gt;FontsDir&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;join&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;PWD&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'fonts'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;clear&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="kc"&gt;None&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="sd"&gt;"""&lt;/span&gt;
&lt;span class="sd"&gt;    清除临时文件&lt;/span&gt;
&lt;span class="sd"&gt;    """&lt;/span&gt;
    &lt;span class="n"&gt;shutil&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;rmtree&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;TMP&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    
&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;listTTF&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ttf&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;ttFont&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;TTFont&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;list&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;]:&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="sd"&gt;"""&lt;/span&gt;
&lt;span class="sd"&gt;    输入字体文件，输出该字体文件下所有字符。&lt;/span&gt;
&lt;span class="sd"&gt;    """&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nb"&gt;list&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;set&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;map&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;lambda&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;chr&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="n"&gt;ttf&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;getBestCmap&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;keys&lt;/span&gt;&lt;span class="p"&gt;())))&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

    &lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;
&lt;div id="cell-id=51f27e5d" class="cell border-box-sizing text_cell rendered"&gt;&lt;div class="prompt input_prompt"&gt;
&lt;/div&gt;&lt;div class="inner_cell"&gt;
&lt;div class="text_cell_render border-box-sizing rendered_html"&gt;
&lt;p&gt;载入并解析字体&lt;/p&gt;

&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id="cell-id=066f1593" class="cell border-box-sizing code_cell rendered"&gt;
&lt;div class="input"&gt;
&lt;div class="prompt input_prompt"&gt;In [2]:&lt;/div&gt;
&lt;div class="inner_cell"&gt;
    &lt;div class="input_area"&gt;
&lt;div class=" highlight hl-ipython3"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="n"&gt;fontname&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'jjwxcfont_0004v'&lt;/span&gt;
&lt;span class="n"&gt;fontpath&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;join&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;FontsDir&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;fontname&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s1"&gt;.woff2'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;ttfpath&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;join&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;TMP&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;fontname&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s1"&gt;.ttf'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;woff2&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;decompress&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;fontpath&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;ttfpath&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;ttf&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;ttFont&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;TTFont&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ttfpath&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;chars&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;listTTF&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ttf&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

    &lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div class="output_wrapper"&gt;
&lt;div class="output"&gt;


&lt;div class="output_area"&gt;

    &lt;div class="prompt"&gt;&lt;/div&gt;


&lt;div class="output_subarea output_stream output_stderr output_text"&gt;
&lt;pre&gt;2 extra bytes in post.stringData array
&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;
&lt;div id="cell-id=29b7b8b4" class="cell border-box-sizing text_cell rendered"&gt;&lt;div class="prompt input_prompt"&gt;
&lt;/div&gt;&lt;div class="inner_cell"&gt;
&lt;div class="text_cell_render border-box-sizing rendered_html"&gt;
&lt;p&gt;共有201个字符&lt;/p&gt;

&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id="cell-id=a2cb1100" class="cell border-box-sizing code_cell rendered"&gt;
&lt;div class="input"&gt;
&lt;div class="prompt input_prompt"&gt;In [3]:&lt;/div&gt;
&lt;div class="inner_cell"&gt;
    &lt;div class="input_area"&gt;
&lt;div class=" highlight hl-ipython3"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;chars&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;chars&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

    &lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div class="output_wrapper"&gt;
&lt;div class="output"&gt;


&lt;div class="output_area"&gt;

    &lt;div class="prompt"&gt;&lt;/div&gt;


&lt;div class="output_subarea output_stream output_stdout output_text"&gt;
&lt;pre&gt;201
['\ue3ce', '\ued31', '\uea4a', '\ue2f0', '\ue707', '\ue949', '\ue452', '\ue8e6', '\ue33c', '\ue11c', '\ue79f', '\uecd2', '\ueb16', '\ue3d9', '\ued29', '\ue680', '\uea2f', '\ue876', '\ue188', '\ue8d2', '\ue9c9', '\ue76d', '\ue2ad', '\ue6ef', '\ue7f6', '\ue22f', '\ue1d7', '\uec78', '\ue768', '\uee4a', '\ueb0e', '\ue04e', '\uec7a', '\ue73a', '\uebf0', '\ue4fe', '\ue3c7', '\ue7d9', '\uefb6', '\uea48', '\uec38', '\ue428', '\uef6e', '\uefd2', '\ue7b0', '\ue86d', '\ue44d', '\ue50f', '\ue6c8', '\ue9cb', '\uedcf', '\ueef4', '\uef45', '\ue7ee', '\uebcc', '\ue2ea', '\uef78', '\ue1fa', '\ue5fb', '\ue5e1', '\ue6fa', '\ue89f', '\ue19b', '\ue98a', '\uedda', '\ue2e2', '\ue084', '\ue3a1', '\ue586', '\uea75', '\ue3ca', '\ue78d', '\ue11f', '\ue0d3', '\ue3aa', '\ue9a2', '\ue567', '\ue54d', '\ue72b', '\ue5c6', '\ue3e3', '\uee30', '\ue197', '\ue009', '\ue47d', '\ue490', '\ue0f4', '\ue005', '\ue055', '\uebfd', '\uec30', '\ue535', '\ue6c4', '\ue1ca', '\ue948', '\ue705', '\ue1e7', '\ued69', '\uee76', '\ue8de', '\ue7b4', '\uee6b', '\ue1a7', '\ue99b', '\ue3fe', '\ue52b', '\ue44c', '\uea63', '\uebe4', '\ue2df', '\ue774', '\ue57f', '\ue5ee', '\ue8a7', '\ue898', 'x', '\ue97d', '\ue6cb', '\ue801', '\uecd6', '\ue019', '\uebc4', '\ue999', '\uefaf', '\uec9c', '\ue1fb', '\ue085', '\ued5d', '\uee11', '\ue8dc', '\uea14', '\ue3ac', '\ue943', '\uee8b', '\ue08f', '\ue50a', '\ue5a3', '\ue803', '\ueaf1', '\uedf4', '\uebba', '\ue5c3', '\ue429', '\uecc8', '\uef7e', '\ue06a', '\ue804', '\ue0d6', '\ueff7', '\uefd5', '\uec84', '\ue36d', '\ue7cd', '\ued67', '\ue8a1', '\ue506', '\ue451', '\ue0a8', '\uead1', '\ue601', '\uebfe', '\ue4d0', '\ue076', '\ue087', '\ue9ab', '\ue8d6', '\ueb49', '\ue584', '\ue4df', '\ue98f', '\ue28b', '\ue42f', '\uede8', '\ue627', '\ue31a', '\ue4bb', '\ue4ad', '\ue530', '\uea6d', '\ue9ed', '\ue1eb', '\ue00d', '\uea17', '\ued4b', '\ueb9f', '\uef5e', '\ue613', '\ued80', '\ue44b', '\ue05a', '\ue150', '\ue218', '\ue1b2', '\ue7f3', '\uea35', '\ue1e1', '\uee44', '\ue5a2', '\uec17', '\uecca', '\uebf4']
&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;
&lt;div id="cell-id=ff7749ab" class="cell border-box-sizing text_cell rendered"&gt;&lt;div class="prompt input_prompt"&gt;
&lt;/div&gt;&lt;div class="inner_cell"&gt;
&lt;div class="text_cell_render border-box-sizing rendered_html"&gt;
&lt;p&gt;将自定义字体的字符列表生成为每行20个字的文本，用于后续识别工作。&lt;/p&gt;

&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id="cell-id=dc7d8c3d" class="cell border-box-sizing code_cell rendered"&gt;
&lt;div class="input"&gt;
&lt;div class="prompt input_prompt"&gt;In [4]:&lt;/div&gt;
&lt;div class="inner_cell"&gt;
    &lt;div class="input_area"&gt;
&lt;div class=" highlight hl-ipython3"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;itertools&lt;/span&gt;

&lt;span class="n"&gt;_chars&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;filter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;lambda&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="s1"&gt;'x'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;chars&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;_&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;iter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;_chars&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;chars_split&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;list&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;list&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;]]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;list&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;itertools&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;islice&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;_&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nb"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;)]&lt;/span&gt;
&lt;span class="n"&gt;ocr_txt&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;join&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="s1"&gt;''&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;join&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;cs&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;chars_split&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
&lt;span class="k"&gt;del&lt;/span&gt; &lt;span class="n"&gt;_&lt;/span&gt;
&lt;span class="k"&gt;del&lt;/span&gt; &lt;span class="n"&gt;_chars&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

    &lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;
&lt;div id="cell-id=048049d3" class="cell border-box-sizing code_cell rendered"&gt;
&lt;div class="input"&gt;
&lt;div class="prompt input_prompt"&gt;In [5]:&lt;/div&gt;
&lt;div class="inner_cell"&gt;
    &lt;div class="input_area"&gt;
&lt;div class=" highlight hl-ipython3"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ocr_txt&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

    &lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div class="output_wrapper"&gt;
&lt;div class="output"&gt;


&lt;div class="output_area"&gt;

    &lt;div class="prompt"&gt;&lt;/div&gt;


&lt;div class="output_subarea output_stream output_stdout output_text"&gt;
&lt;pre&gt;









&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;
&lt;div id="cell-id=2078c124" class="cell border-box-sizing text_cell rendered"&gt;&lt;div class="prompt input_prompt"&gt;
&lt;/div&gt;&lt;div class="inner_cell"&gt;
&lt;div class="text_cell_render border-box-sizing rendered_html"&gt;
&lt;p&gt;调用 &lt;a href="https://www.imagemagick.org/"&gt;imagemagick&lt;/a&gt; 所附带的 &lt;code&gt;convert&lt;/code&gt; 命令，将之前准备好的自定义字符文本绘制为图片。&lt;/p&gt;

&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id="cell-id=0c1df340" class="cell border-box-sizing code_cell rendered"&gt;
&lt;div class="input"&gt;
&lt;div class="prompt input_prompt"&gt;In [6]:&lt;/div&gt;
&lt;div class="inner_cell"&gt;
    &lt;div class="input_area"&gt;
&lt;div class=" highlight hl-ipython3"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;subprocess&lt;/span&gt;

&lt;span class="n"&gt;txt_path&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;join&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;TMP&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'ocr.txt'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;img_path&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;join&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;TMP&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'ocr.png'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;with&lt;/span&gt; &lt;span class="nb"&gt;open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;txt_path&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'w'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;write&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ocr_txt&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;subprocess&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="s2"&gt;"convert"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"-font"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;ttfpath&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"-pointsize"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"64"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"-background"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"rgba(255,255,255)"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s2"&gt;"label:@&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;txt_path&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;img_path&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

    &lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div class="output_wrapper"&gt;
&lt;div class="output"&gt;


&lt;div class="output_area"&gt;

    &lt;div class="prompt output_prompt"&gt;Out[6]:&lt;/div&gt;




&lt;div class="output_text output_subarea output_execute_result"&gt;
&lt;pre&gt;0&lt;/pre&gt;
&lt;/div&gt;

&lt;/div&gt;

&lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;
&lt;div id="cell-id=78d79251" class="cell border-box-sizing text_cell rendered"&gt;&lt;div class="prompt input_prompt"&gt;
&lt;/div&gt;&lt;div class="inner_cell"&gt;
&lt;div class="text_cell_render border-box-sizing rendered_html"&gt;
&lt;p&gt;结果如下：&lt;/p&gt;

&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id="cell-id=53975830" class="cell border-box-sizing code_cell rendered"&gt;
&lt;div class="input"&gt;
&lt;div class="prompt input_prompt"&gt;In [7]:&lt;/div&gt;
&lt;div class="inner_cell"&gt;
    &lt;div class="input_area"&gt;
&lt;div class=" highlight hl-ipython3"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;PIL&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Image&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;ImageDraw&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;ImageFont&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;IPython.display&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;display&lt;/span&gt;

&lt;span class="n"&gt;ocr_img&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Image&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;img_path&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;display&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ocr_img&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

    &lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div class="output_wrapper"&gt;
&lt;div class="output"&gt;


&lt;div class="output_area"&gt;

    &lt;div class="prompt"&gt;&lt;/div&gt;




&lt;div class="output_png output_subarea "&gt;
&lt;img src="data:image/png;base64,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"&gt;
&lt;/div&gt;

&lt;/div&gt;

&lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;
&lt;div id="cell-id=658ea6b4" class="cell border-box-sizing text_cell rendered"&gt;&lt;div class="prompt input_prompt"&gt;
&lt;/div&gt;&lt;div class="inner_cell"&gt;
&lt;div class="text_cell_render border-box-sizing rendered_html"&gt;
&lt;p&gt;调用 &lt;a href="https://github.com/tesseract-ocr/tesseract"&gt;tesseract&lt;/a&gt; 识别该图片。&lt;/p&gt;

&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id="cell-id=fec391ba" class="cell border-box-sizing code_cell rendered"&gt;
&lt;div class="input"&gt;
&lt;div class="prompt input_prompt"&gt;In [8]:&lt;/div&gt;
&lt;div class="inner_cell"&gt;
    &lt;div class="input_area"&gt;
&lt;div class=" highlight hl-ipython3"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="n"&gt;tesseract_result_name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;join&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;TMP&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'tesseract_result.txt'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;subprocess&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="s2"&gt;"tesseract"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;img_path&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;tesseract_result_name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"-l"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"chi_sim"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"--psm"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"6"&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

    &lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div class="output_wrapper"&gt;
&lt;div class="output"&gt;


&lt;div class="output_area"&gt;

    &lt;div class="prompt"&gt;&lt;/div&gt;


&lt;div class="output_subarea output_stream output_stderr output_text"&gt;
&lt;pre&gt;Tesseract Open Source OCR Engine v4.1.1 with Leptonica
Warning: Invalid resolution 0 dpi. Using 70 instead.
&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div class="output_area"&gt;

    &lt;div class="prompt output_prompt"&gt;Out[8]:&lt;/div&gt;




&lt;div class="output_text output_subarea output_execute_result"&gt;
&lt;pre&gt;0&lt;/pre&gt;
&lt;/div&gt;

&lt;/div&gt;

&lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;
&lt;div id="cell-id=a3623647" class="cell border-box-sizing text_cell rendered"&gt;&lt;div class="prompt input_prompt"&gt;
&lt;/div&gt;&lt;div class="inner_cell"&gt;
&lt;div class="text_cell_render border-box-sizing rendered_html"&gt;
&lt;p&gt;tesseract 识别结果如下：&lt;/p&gt;

&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id="cell-id=19db8dde" class="cell border-box-sizing code_cell rendered"&gt;
&lt;div class="input"&gt;
&lt;div class="prompt input_prompt"&gt;In [9]:&lt;/div&gt;
&lt;div class="inner_cell"&gt;
    &lt;div class="input_area"&gt;
&lt;div class=" highlight hl-ipython3"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="k"&gt;with&lt;/span&gt; &lt;span class="nb"&gt;open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;tesseract_result_name&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s1"&gt;.txt'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'r'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;tesseract_result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;read&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;tesseract_result&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

    &lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div class="output_wrapper"&gt;
&lt;div class="output"&gt;


&lt;div class="output_area"&gt;

    &lt;div class="prompt"&gt;&lt;/div&gt;


&lt;div class="output_subarea output_stream output_stdout output_text"&gt;
&lt;pre&gt;其 可 她 就 们 来 眼 这 所 何 者 化 作 问 意 没 道 果 样 重
如 然 听 中 相 子 本 四 己 方 被 多 感 心 出 太 小 会 笑 家
由 自 说 把 年 世 么 看 使 论 下 儿 到 从 事 打 口 现 便 回
要 代 丸 成 间 实 话 进 他 很 因 得 而 情 别 好 无 少 特 关
同 但 人 全 定 声 公 什 老 了 等 仁 明 先 学 再 你 分 动 门
还 给 上 以 力 十 体 身 又 与 国 的 之 将 那 与 几 三 书 过
物 时 死 第 想 两 生 文 思 后 社 二 一 理 名 并 长 行 当 新
着 前 在 起 真 教 种 走 民 能 天 于 美 此 神 手 和 外 面 主
才 些 经 里 法 大 女 头 用 都 是 个 地 不 知 白 发 见 性 也
已 西 更 日 部 开 对 我 正 只 向 为 点 最 气 史 高 却 去 有


&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;
&lt;div id="cell-id=19125b0b" class="cell border-box-sizing text_cell rendered"&gt;&lt;div class="prompt input_prompt"&gt;
&lt;/div&gt;&lt;div class="inner_cell"&gt;
&lt;div class="text_cell_render border-box-sizing rendered_html"&gt;
&lt;p&gt;识别结果相当不错。&lt;/p&gt;
&lt;p&gt;接下来就是生成字符映射表了。&lt;/p&gt;

&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id="cell-id=57ae17a5" class="cell border-box-sizing code_cell rendered"&gt;
&lt;div class="input"&gt;
&lt;div class="prompt input_prompt"&gt;In [10]:&lt;/div&gt;
&lt;div class="inner_cell"&gt;
    &lt;div class="input_area"&gt;
&lt;div class=" highlight hl-ipython3"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="n"&gt;table&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;dict&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;zip&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="nb"&gt;filter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;lambda&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;list&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ocr_txt&lt;/span&gt;&lt;span class="p"&gt;)),&lt;/span&gt;
    &lt;span class="nb"&gt;filter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;lambda&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;19967&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="nb"&gt;ord&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="mi"&gt;40870&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;list&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;tesseract_result&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

    &lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;
&lt;div id="cell-id=88cf42ac" class="cell border-box-sizing code_cell rendered"&gt;
&lt;div class="input"&gt;
&lt;div class="prompt input_prompt"&gt;In [11]:&lt;/div&gt;
&lt;div class="inner_cell"&gt;
    &lt;div class="input_area"&gt;
&lt;div class=" highlight hl-ipython3"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;table&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

    &lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div class="output_wrapper"&gt;
&lt;div class="output"&gt;


&lt;div class="output_area"&gt;

    &lt;div class="prompt"&gt;&lt;/div&gt;


&lt;div class="output_subarea output_stream output_stdout output_text"&gt;
&lt;pre&gt;{'\ue3ce': '其', '\ued31': '可', '\uea4a': '她', '\ue2f0': '就', '\ue707': '们', '\ue949': '来', '\ue452': '眼', '\ue8e6': '这', '\ue33c': '所', '\ue11c': '何', '\ue79f': '者', '\uecd2': '化', '\ueb16': '作', '\ue3d9': '问', '\ued29': '意', '\ue680': '没', '\uea2f': '道', '\ue876': '果', '\ue188': '样', '\ue8d2': '重', '\ue9c9': '如', '\ue76d': '然', '\ue2ad': '听', '\ue6ef': '中', '\ue7f6': '相', '\ue22f': '子', '\ue1d7': '本', '\uec78': '四', '\ue768': '己', '\uee4a': '方', '\ueb0e': '被', '\ue04e': '多', '\uec7a': '感', '\ue73a': '心', '\uebf0': '出', '\ue4fe': '太', '\ue3c7': '小', '\ue7d9': '会', '\uefb6': '笑', '\uea48': '家', '\uec38': '由', '\ue428': '自', '\uef6e': '说', '\uefd2': '把', '\ue7b0': '年', '\ue86d': '世', '\ue44d': '么', '\ue50f': '看', '\ue6c8': '使', '\ue9cb': '论', '\uedcf': '下', '\ueef4': '儿', '\uef45': '到', '\ue7ee': '从', '\uebcc': '事', '\ue2ea': '打', '\uef78': '口', '\ue1fa': '现', '\ue5fb': '便', '\ue5e1': '回', '\ue6fa': '要', '\ue89f': '代', '\ue19b': '丸', '\ue98a': '成', '\uedda': '间', '\ue2e2': '实', '\ue084': '话', '\ue3a1': '进', '\ue586': '他', '\uea75': '很', '\ue3ca': '因', '\ue78d': '得', '\ue11f': '而', '\ue0d3': '情', '\ue3aa': '别', '\ue9a2': '好', '\ue567': '无', '\ue54d': '少', '\ue72b': '特', '\ue5c6': '关', '\ue3e3': '同', '\uee30': '但', '\ue197': '人', '\ue009': '全', '\ue47d': '定', '\ue490': '声', '\ue0f4': '公', '\ue005': '什', '\ue055': '老', '\uebfd': '了', '\uec30': '等', '\ue535': '仁', '\ue6c4': '明', '\ue1ca': '先', '\ue948': '学', '\ue705': '再', '\ue1e7': '你', '\ued69': '分', '\uee76': '动', '\ue8de': '门', '\ue7b4': '还', '\uee6b': '给', '\ue1a7': '上', '\ue99b': '以', '\ue3fe': '力', '\ue52b': '十', '\ue44c': '体', '\uea63': '身', '\uebe4': '又', '\ue2df': '与', '\ue774': '国', '\ue57f': '的', '\ue5ee': '之', '\ue8a7': '将', '\ue898': '那', '\ue97d': '与', '\ue6cb': '几', '\ue801': '三', '\uecd6': '书', '\ue019': '过', '\uebc4': '物', '\ue999': '时', '\uefaf': '死', '\uec9c': '第', '\ue1fb': '想', '\ue085': '两', '\ued5d': '生', '\uee11': '文', '\ue8dc': '思', '\uea14': '后', '\ue3ac': '社', '\ue943': '二', '\uee8b': '一', '\ue08f': '理', '\ue50a': '名', '\ue5a3': '并', '\ue803': '长', '\ueaf1': '行', '\uedf4': '当', '\uebba': '新', '\ue5c3': '着', '\ue429': '前', '\uecc8': '在', '\uef7e': '起', '\ue06a': '真', '\ue804': '教', '\ue0d6': '种', '\ueff7': '走', '\uefd5': '民', '\uec84': '能', '\ue36d': '天', '\ue7cd': '于', '\ued67': '美', '\ue8a1': '此', '\ue506': '神', '\ue451': '手', '\ue0a8': '和', '\uead1': '外', '\ue601': '面', '\uebfe': '主', '\ue4d0': '才', '\ue076': '些', '\ue087': '经', '\ue9ab': '里', '\ue8d6': '法', '\ueb49': '大', '\ue584': '女', '\ue4df': '头', '\ue98f': '用', '\ue28b': '都', '\ue42f': '是', '\uede8': '个', '\ue627': '地', '\ue31a': '不', '\ue4bb': '知', '\ue4ad': '白', '\ue530': '发', '\uea6d': '见', '\ue9ed': '性', '\ue1eb': '也', '\ue00d': '已', '\uea17': '西', '\ued4b': '更', '\ueb9f': '日', '\uef5e': '部', '\ue613': '开', '\ued80': '对', '\ue44b': '我', '\ue05a': '正', '\ue150': '只', '\ue218': '向', '\ue1b2': '为', '\ue7f3': '点', '\uea35': '最', '\ue1e1': '气', '\uee44': '史', '\ue5a2': '高', '\uec17': '却', '\uecca': '去', '\uebf4': '有'}
&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;
&lt;div id="cell-id=110eeaba" class="cell border-box-sizing text_cell rendered"&gt;&lt;div class="prompt input_prompt"&gt;
&lt;/div&gt;&lt;div class="inner_cell"&gt;
&lt;div class="text_cell_render border-box-sizing rendered_html"&gt;
&lt;h2 id="OCR%E6%B3%95%EF%BC%88%E6%97%A0%E5%A4%96%E9%83%A8%E4%BE%9D%E8%B5%96%E7%89%88%EF%BC%89"&gt;OCR法（无外部依赖版）&lt;a class="anchor-link" href="https://blog.bgme.me/posts/2021/shi-li-xiang-jie-zi-ding-yi-zi-ti-fan-pa-de-dui-kang/#OCR%E6%B3%95%EF%BC%88%E6%97%A0%E5%A4%96%E9%83%A8%E4%BE%9D%E8%B5%96%E7%89%88%EF%BC%89"&gt;¶&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;上述方法除了python之外，还需要额外安装 imagemagick、tesseract以及tesseract中文训练数据，这三个部件加起来大概快有100MB。&lt;/p&gt;
&lt;p&gt;好像有一点臃肿，那么能不能精简一点呢？&lt;/p&gt;

&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id="cell-id=ec940c17" class="cell border-box-sizing text_cell rendered"&gt;&lt;div class="prompt input_prompt"&gt;
&lt;/div&gt;&lt;div class="inner_cell"&gt;
&lt;div class="text_cell_render border-box-sizing rendered_html"&gt;
&lt;p&gt;让我们再看一看晋江的自定义字体。&lt;/p&gt;
&lt;p&gt;我们很容易发现：晋江自定义字体与方正兰亭黑（微软雅黑）极其相似。&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.bgme.me/images/2021/anti-font-anti-crawler/font_compare.png" alt="晋江自定义字体与方正兰亭黑对比图"&gt;&lt;/p&gt;
&lt;p&gt;因此可以基于这点构建一个轻量级的识别程序。&lt;/p&gt;

&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id="cell-id=e1473a70" class="cell border-box-sizing text_cell rendered"&gt;&lt;div class="prompt input_prompt"&gt;
&lt;/div&gt;&lt;div class="inner_cell"&gt;
&lt;div class="text_cell_render border-box-sizing rendered_html"&gt;
&lt;p&gt;大致流程：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;绘制微软雅黑所有字符&lt;/li&gt;
&lt;li&gt;绘制晋江自定义字体所有字符&lt;/li&gt;
&lt;li&gt;使用已知的前者对未知的后者进行匹配，根据差异度找出最有可能的字符。&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;

&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id="cell-id=e88531bb" class="cell border-box-sizing text_cell rendered"&gt;&lt;div class="prompt input_prompt"&gt;
&lt;/div&gt;&lt;div class="inner_cell"&gt;
&lt;div class="text_cell_render border-box-sizing rendered_html"&gt;
&lt;p&gt;载入双方字体&lt;/p&gt;

&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id="cell-id=e30633ff" class="cell border-box-sizing code_cell rendered"&gt;
&lt;div class="input"&gt;
&lt;div class="prompt input_prompt"&gt;In [12]:&lt;/div&gt;
&lt;div class="inner_cell"&gt;
    &lt;div class="input_area"&gt;
&lt;div class=" highlight hl-ipython3"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="n"&gt;SIZE&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;int&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;228&lt;/span&gt;

&lt;span class="n"&gt;FZfont&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;ImageFont&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;FreeTypeFont&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;None&lt;/span&gt;
&lt;span class="k"&gt;try&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="c1"&gt;# Windows平台直接调用系统字体即可&lt;/span&gt;
    &lt;span class="n"&gt;FZfont&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;ImageFont&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;truetype&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;font&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;'Microsoft YaHei'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;size&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;SIZE&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;except&lt;/span&gt; &lt;span class="ne"&gt;Exception&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="c1"&gt;# 其他平台需手动将字体文件放入 fonts 目录&lt;/span&gt;
    &lt;span class="n"&gt;FZfont&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;ImageFont&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;truetype&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;font&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;join&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;FontsDir&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'FZLanTingHei-M-GBK.ttf'&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="n"&gt;size&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;SIZE&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    
&lt;span class="n"&gt;JJfont&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;ImageFont&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;FreeTypeFont&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;ImageFont&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;truetype&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;font&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;join&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ttfpath&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="n"&gt;size&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;SIZE&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

    &lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;
&lt;div id="cell-id=fcbf60eb" class="cell border-box-sizing text_cell rendered"&gt;&lt;div class="prompt input_prompt"&gt;
&lt;/div&gt;&lt;div class="inner_cell"&gt;
&lt;div class="text_cell_render border-box-sizing rendered_html"&gt;
&lt;p&gt;建构基本函数&lt;/p&gt;

&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id="cell-id=c4f557f8" class="cell border-box-sizing code_cell rendered"&gt;
&lt;div class="input"&gt;
&lt;div class="prompt input_prompt"&gt;In [13]:&lt;/div&gt;
&lt;div class="inner_cell"&gt;
    &lt;div class="input_area"&gt;
&lt;div class=" highlight hl-ipython3"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="n"&gt;W&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;H&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;SIZE&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;SIZE&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;draw&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;character&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;fontTTF&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;ImageFont&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;FreeTypeFont&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;ImageDraw&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="sd"&gt;"""&lt;/span&gt;
&lt;span class="sd"&gt;    输入字符以及字体文件，输出绘制结果。&lt;/span&gt;
&lt;span class="sd"&gt;    """&lt;/span&gt;
    &lt;span class="n"&gt;image&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Image&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;new&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"RGB"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;W&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;H&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="s2"&gt;"white"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;d&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;ImageDraw&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Draw&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;image&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;offset_w&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;offset_h&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;fontTTF&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;getoffset&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;character&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;w&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;h&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;d&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;textsize&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;character&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;font&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;fontTTF&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;pos&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="n"&gt;W&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;w&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;offset_w&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;H&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;h&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;offset_h&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;d&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;pos&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;character&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"black"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;font&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;fontTTF&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;image&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;drawFZ&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;character&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;ImageDraw&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="sd"&gt;"""&lt;/span&gt;
&lt;span class="sd"&gt;    输入字符，输出方正兰亭黑字体绘制结果。&lt;/span&gt;
&lt;span class="sd"&gt;    """&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;draw&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;character&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;FZfont&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;drawJJ&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;character&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;ImageDraw&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="sd"&gt;"""&lt;/span&gt;
&lt;span class="sd"&gt;    输入字符，输出晋江自定义字体绘制结果。&lt;/span&gt;
&lt;span class="sd"&gt;    """&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;draw&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;character&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;JJfont&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

    &lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;
&lt;div id="cell-id=94927ad7" class="cell border-box-sizing code_cell rendered"&gt;
&lt;div class="input"&gt;
&lt;div class="prompt input_prompt"&gt;In [14]:&lt;/div&gt;
&lt;div class="inner_cell"&gt;
    &lt;div class="input_area"&gt;
&lt;div class=" highlight hl-ipython3"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;numpy&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="nn"&gt;np&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;compare&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;image1&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;ImageDraw&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;image2&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;ImageDraw&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;float&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="sd"&gt;"""&lt;/span&gt;
&lt;span class="sd"&gt;    输入两字体图像，输出差异度。&lt;/span&gt;
&lt;span class="sd"&gt;    """&lt;/span&gt;
    &lt;span class="n"&gt;array1&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;np&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;asarray&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;image1&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;convert&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'1'&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
    &lt;span class="n"&gt;array2&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;np&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;asarray&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;image2&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;convert&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'1'&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
    &lt;span class="n"&gt;diff_array&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;np&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ndarray&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;array1&lt;/span&gt; &lt;span class="o"&gt;^&lt;/span&gt; &lt;span class="n"&gt;array2&lt;/span&gt;
    &lt;span class="n"&gt;diff&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;np&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;count_nonzero&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;diff_array&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="n"&gt;np&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;multiply&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;diff_array&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;shape&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;diff&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

    &lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;
&lt;div id="cell-id=a727a46e" class="cell border-box-sizing text_cell rendered"&gt;&lt;div class="prompt input_prompt"&gt;
&lt;/div&gt;&lt;div class="inner_cell"&gt;
&lt;div class="text_cell_render border-box-sizing rendered_html"&gt;
&lt;p&gt;绘制方正字体所有字符，本步骤需花费大量时间以及大量内存。&lt;/p&gt;

&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id="cell-id=60e14ac2" class="cell border-box-sizing code_cell rendered"&gt;
&lt;div class="input"&gt;
&lt;div class="prompt input_prompt"&gt;In [15]:&lt;/div&gt;
&lt;div class="inner_cell"&gt;
    &lt;div class="input_area"&gt;
&lt;div class=" highlight hl-ipython3"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="n"&gt;FZttf&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;ttFont&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;TTFont&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;join&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;FontsDir&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'FZLanTingHei-M-GBK.ttf'&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;span class="n"&gt;FZkeys&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;list&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;filter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;lambda&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;19967&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="nb"&gt;ord&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="mi"&gt;40870&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;listTTF&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;FZttf&lt;/span&gt;&lt;span class="p"&gt;)))&lt;/span&gt;
&lt;span class="n"&gt;FZimgs&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;map&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;lambda&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;drawFZ&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="n"&gt;FZkeys&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;FZtable&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;dict&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;zip&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;FZkeys&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;FZimgs&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;span class="k"&gt;del&lt;/span&gt; &lt;span class="n"&gt;FZkeys&lt;/span&gt;
&lt;span class="k"&gt;del&lt;/span&gt; &lt;span class="n"&gt;FZimgs&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

    &lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;
&lt;div id="cell-id=96b39190" class="cell border-box-sizing text_cell rendered"&gt;&lt;div class="prompt input_prompt"&gt;
&lt;/div&gt;&lt;div class="inner_cell"&gt;
&lt;div class="text_cell_render border-box-sizing rendered_html"&gt;
&lt;p&gt;绘制晋江字体&lt;/p&gt;

&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id="cell-id=caf6b50c" class="cell border-box-sizing code_cell rendered"&gt;
&lt;div class="input"&gt;
&lt;div class="prompt input_prompt"&gt;In [16]:&lt;/div&gt;
&lt;div class="inner_cell"&gt;
    &lt;div class="input_area"&gt;
&lt;div class=" highlight hl-ipython3"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="n"&gt;JJkeys&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;list&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;filter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;lambda&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="s1"&gt;'x'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;chars&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;span class="n"&gt;JJimgs&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;list&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;map&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;lambda&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;drawJJ&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="n"&gt;JJkeys&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;span class="n"&gt;JJtable&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;dict&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;zip&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;JJkeys&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;JJimgs&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

    &lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;
&lt;div id="cell-id=11cf0b0b" class="cell border-box-sizing text_cell rendered"&gt;&lt;div class="prompt input_prompt"&gt;
&lt;/div&gt;&lt;div class="inner_cell"&gt;
&lt;div class="text_cell_render border-box-sizing rendered_html"&gt;
&lt;p&gt;比较两字体&lt;/p&gt;

&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id="cell-id=9ab904bf" class="cell border-box-sizing code_cell rendered"&gt;
&lt;div class="input"&gt;
&lt;div class="prompt input_prompt"&gt;In [17]:&lt;/div&gt;
&lt;div class="inner_cell"&gt;
    &lt;div class="input_area"&gt;
&lt;div class=" highlight hl-ipython3"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;match&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;jjimg&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;ImageDraw&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;tuple&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;float&lt;/span&gt;&lt;span class="p"&gt;]:&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="sd"&gt;"""&lt;/span&gt;
&lt;span class="sd"&gt;    将晋江字符绘制结果与方正字体进行匹配&lt;/span&gt;
&lt;span class="sd"&gt;    """&lt;/span&gt;
    &lt;span class="n"&gt;m&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nb"&gt;str&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;None&lt;/span&gt;
    &lt;span class="n"&gt;d&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nb"&gt;float&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;None&lt;/span&gt;
    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;fzkey&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;FZtable&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;fzimg&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;FZtable&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;fzkey&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
        &lt;span class="n"&gt;diff&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;compare&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;jjimg&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;fzimg&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;d&lt;/span&gt; &lt;span class="ow"&gt;is&lt;/span&gt; &lt;span class="kc"&gt;None&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="n"&gt;m&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;fzkey&lt;/span&gt;
            &lt;span class="n"&gt;d&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;diff&lt;/span&gt;
        &lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;diff&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="n"&gt;d&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
                &lt;span class="n"&gt;m&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;fzkey&lt;/span&gt;
                &lt;span class="n"&gt;d&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;diff&lt;/span&gt;    
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;m&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;d&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

    &lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;
&lt;div id="cell-id=fd701a68" class="cell border-box-sizing code_cell rendered"&gt;
&lt;div class="input"&gt;
&lt;div class="prompt input_prompt"&gt;In [18]:&lt;/div&gt;
&lt;div class="inner_cell"&gt;
    &lt;div class="input_area"&gt;
&lt;div class=" highlight hl-ipython3"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;
&lt;span class="n"&gt;jjkey&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;JJkeys&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="n"&gt;jjimg&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;JJimgs&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="n"&gt;jjmatch&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;match&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;jjimg&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

    &lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;
&lt;div id="cell-id=d24be70c" class="cell border-box-sizing code_cell rendered"&gt;
&lt;div class="input"&gt;
&lt;div class="prompt input_prompt"&gt;In [19]:&lt;/div&gt;
&lt;div class="inner_cell"&gt;
    &lt;div class="input_area"&gt;
&lt;div class=" highlight hl-ipython3"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="n"&gt;jjmatch&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

    &lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div class="output_wrapper"&gt;
&lt;div class="output"&gt;


&lt;div class="output_area"&gt;

    &lt;div class="prompt output_prompt"&gt;Out[19]:&lt;/div&gt;




&lt;div class="output_text output_subarea output_execute_result"&gt;
&lt;pre&gt;('可', 0.07107956294244383)&lt;/pre&gt;
&lt;/div&gt;

&lt;/div&gt;

&lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;
&lt;div id="cell-id=c27fb6d6" class="cell border-box-sizing code_cell rendered"&gt;
&lt;div class="input"&gt;
&lt;div class="prompt input_prompt"&gt;In [20]:&lt;/div&gt;
&lt;div class="inner_cell"&gt;
    &lt;div class="input_area"&gt;
&lt;div class=" highlight hl-ipython3"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="n"&gt;jjkey&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

    &lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div class="output_wrapper"&gt;
&lt;div class="output"&gt;


&lt;div class="output_area"&gt;

    &lt;div class="prompt output_prompt"&gt;Out[20]:&lt;/div&gt;




&lt;div class="output_text output_subarea output_execute_result"&gt;
&lt;pre&gt;'\ued31'&lt;/pre&gt;
&lt;/div&gt;

&lt;/div&gt;

&lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;
&lt;div id="cell-id=ff8046d8" class="cell border-box-sizing code_cell rendered"&gt;
&lt;div class="input"&gt;
&lt;div class="prompt input_prompt"&gt;In [21]:&lt;/div&gt;
&lt;div class="inner_cell"&gt;
    &lt;div class="input_area"&gt;
&lt;div class=" highlight hl-ipython3"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="n"&gt;jjimg&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

    &lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div class="output_wrapper"&gt;
&lt;div class="output"&gt;


&lt;div class="output_area"&gt;

    &lt;div class="prompt output_prompt"&gt;Out[21]:&lt;/div&gt;




&lt;div class="output_png output_subarea output_execute_result"&gt;
&lt;img src="data:image/png;base64,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"&gt;
&lt;/div&gt;

&lt;/div&gt;

&lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;
&lt;div id="cell-id=122580bc" class="cell border-box-sizing text_cell rendered"&gt;&lt;div class="prompt input_prompt"&gt;
&lt;/div&gt;&lt;div class="inner_cell"&gt;
&lt;div class="text_cell_render border-box-sizing rendered_html"&gt;
&lt;p&gt;可以看出识别成功。&lt;/p&gt;
&lt;p&gt;如需识别所有晋江字符，&lt;code&gt;for i in range(len(JJkeys))&lt;/code&gt; 跑一个循环即可。&lt;/p&gt;
&lt;hr&gt;

&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id="cell-id=52b1896a" class="cell border-box-sizing text_cell rendered"&gt;&lt;div class="prompt input_prompt"&gt;
&lt;/div&gt;&lt;div class="inner_cell"&gt;
&lt;div class="text_cell_render border-box-sizing rendered_html"&gt;
&lt;p&gt;比较一下方正字体以及晋江字体&lt;/p&gt;

&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id="cell-id=7e8f8339" class="cell border-box-sizing code_cell rendered"&gt;
&lt;div class="input"&gt;
&lt;div class="prompt input_prompt"&gt;In [22]:&lt;/div&gt;
&lt;div class="inner_cell"&gt;
    &lt;div class="input_area"&gt;
&lt;div class=" highlight hl-ipython3"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;PIL&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;ImageChops&lt;/span&gt;

&lt;span class="n"&gt;i0&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;drawJJ&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;jjkey&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;i1&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;drawFZ&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;jjmatch&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
&lt;span class="n"&gt;img_diff&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;ImageChops&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;difference&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;i0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;i1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;display&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;img_diff&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;del&lt;/span&gt; &lt;span class="n"&gt;i0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;i1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;img_diff&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

    &lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div class="output_wrapper"&gt;
&lt;div class="output"&gt;


&lt;div class="output_area"&gt;

    &lt;div class="prompt"&gt;&lt;/div&gt;




&lt;div class="output_png output_subarea "&gt;
&lt;img src="data:image/png;base64,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"&gt;
&lt;/div&gt;

&lt;/div&gt;

&lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;
&lt;div id="cell-id=85c02a66" class="cell border-box-sizing text_cell rendered"&gt;&lt;div class="prompt input_prompt"&gt;
&lt;/div&gt;&lt;div class="inner_cell"&gt;
&lt;div class="text_cell_render border-box-sizing rendered_html"&gt;
&lt;hr&gt;
&lt;p&gt;当然每次这样跑，速度有一些慢。&lt;/p&gt;
&lt;p&gt;因此可以先使用 imagehash 先筛选一下，只对 imagehash 相近的字符进行精细比较。这样可以节省大量时间。&lt;/p&gt;
&lt;p&gt;具体代码就不在这里列了，详细代码可以参见&lt;a href="https://github.com/yingziwu/jjwxcFontTables/blob/5ac26e4facfcf418c4bb8dbedbf576c63fcc3fd5/main.py#L287-L310"&gt;此处&lt;/a&gt;。&lt;/p&gt;

&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id="cell-id=3d722a7f" class="cell border-box-sizing text_cell rendered"&gt;&lt;div class="prompt input_prompt"&gt;
&lt;/div&gt;&lt;div class="inner_cell"&gt;
&lt;div class="text_cell_render border-box-sizing rendered_html"&gt;
&lt;h2 id="%E7%9B%B4%E6%8E%A5%E6%AF%94%E8%BE%83%E5%AD%97%E4%BD%93%E6%B3%95"&gt;直接比较字体法&lt;a class="anchor-link" href="https://blog.bgme.me/posts/2021/shi-li-xiang-jie-zi-ding-yi-zi-ti-fan-pa-de-dui-kang/#%E7%9B%B4%E6%8E%A5%E6%AF%94%E8%BE%83%E5%AD%97%E4%BD%93%E6%B3%95"&gt;¶&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;img src="https://blog.bgme.me/images/2021/anti-font-anti-crawler/font_compare_2.png" alt="不同晋江字体比较图"&gt;&lt;/p&gt;
&lt;p&gt;如同许多网站一样，晋江的自定义字体并不是只有一套，而是有很多套。&lt;/p&gt;
&lt;p&gt;但比较不同自定义字体，可以很容易发现：虽然每种字体的字符排序不同，但对于同一个汉字，不同之字体之间好像都长得一样呀!&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.bgme.me/images/2021/anti-font-anti-crawler/font_compare_3.png" alt="不同晋江字体同一汉字比较图"&gt;&lt;/p&gt;
&lt;p&gt;打开编辑界面，果然是一样的（注意左上角被选择的点的坐标值）。&lt;/p&gt;
&lt;p&gt;因此，可以根据这一点，通过直接比较字体快速识别。&lt;/p&gt;

&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id="cell-id=8180f6e4" class="cell border-box-sizing code_cell rendered"&gt;
&lt;div class="input"&gt;
&lt;div class="prompt input_prompt"&gt;In [23]:&lt;/div&gt;
&lt;div class="inner_cell"&gt;
    &lt;div class="input_area"&gt;
&lt;div class=" highlight hl-ipython3"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;getCoord&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;char&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;ttf&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;ttFont&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;TTFont&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;list&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;tuple&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;int&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;int&lt;/span&gt;&lt;span class="p"&gt;]]:&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="sd"&gt;"""&lt;/span&gt;
&lt;span class="sd"&gt;    获取特定字体，指定字符的 coord&lt;/span&gt;
&lt;span class="sd"&gt;    """&lt;/span&gt;
    &lt;span class="n"&gt;cmap&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;ttf&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;getBestCmap&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="n"&gt;glyf_name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;cmap&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;ord&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;char&lt;/span&gt;&lt;span class="p"&gt;)]&lt;/span&gt;
    &lt;span class="n"&gt;coord&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;ttf&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'glyf'&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="n"&gt;glyf_name&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;coordinates&lt;/span&gt;
    &lt;span class="n"&gt;coord_list&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;list&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;coord&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;coord_list&lt;/span&gt;


&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;getCoorTable&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;fontTable&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;dict&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;fontttf&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;ttFont&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;TTFont&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;dict&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;list&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;tuple&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;int&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;int&lt;/span&gt;&lt;span class="p"&gt;]]]:&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="sd"&gt;"""&lt;/span&gt;
&lt;span class="sd"&gt;    获取指定字体的 coordTable&lt;/span&gt;
&lt;span class="sd"&gt;    """&lt;/span&gt;
    &lt;span class="n"&gt;fontTableR&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;dict&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;zip&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;fontTable&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;values&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt; &lt;span class="n"&gt;fontTable&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;keys&lt;/span&gt;&lt;span class="p"&gt;()))&lt;/span&gt;
    &lt;span class="n"&gt;coordTable&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;dict&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="nb"&gt;zip&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
            &lt;span class="n"&gt;fontTableR&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;keys&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt;
            &lt;span class="nb"&gt;map&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;lambda&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;getCoord&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;fontttf&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="n"&gt;fontTableR&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;values&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
        &lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;coordTable&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

    &lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;
&lt;div id="cell-id=fbf09a23" class="cell border-box-sizing text_cell rendered"&gt;&lt;div class="prompt input_prompt"&gt;
&lt;/div&gt;&lt;div class="inner_cell"&gt;
&lt;div class="text_cell_render border-box-sizing rendered_html"&gt;
&lt;p&gt;本法要求一套已经识别完毕并且没有错识的字体作为标本，这里使用第一部分识别产生的 &lt;code&gt;table&lt;/code&gt;。&lt;/p&gt;

&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id="cell-id=8c35ad6c" class="cell border-box-sizing code_cell rendered"&gt;
&lt;div class="input"&gt;
&lt;div class="prompt input_prompt"&gt;In [24]:&lt;/div&gt;
&lt;div class="inner_cell"&gt;
    &lt;div class="input_area"&gt;
&lt;div class=" highlight hl-ipython3"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;table&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

    &lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div class="output_wrapper"&gt;
&lt;div class="output"&gt;


&lt;div class="output_area"&gt;

    &lt;div class="prompt"&gt;&lt;/div&gt;


&lt;div class="output_subarea output_stream output_stdout output_text"&gt;
&lt;pre&gt;{'\ue3ce': '其', '\ued31': '可', '\uea4a': '她', '\ue2f0': '就', '\ue707': '们', '\ue949': '来', '\ue452': '眼', '\ue8e6': '这', '\ue33c': '所', '\ue11c': '何', '\ue79f': '者', '\uecd2': '化', '\ueb16': '作', '\ue3d9': '问', '\ued29': '意', '\ue680': '没', '\uea2f': '道', '\ue876': '果', '\ue188': '样', '\ue8d2': '重', '\ue9c9': '如', '\ue76d': '然', '\ue2ad': '听', '\ue6ef': '中', '\ue7f6': '相', '\ue22f': '子', '\ue1d7': '本', '\uec78': '四', '\ue768': '己', '\uee4a': '方', '\ueb0e': '被', '\ue04e': '多', '\uec7a': '感', '\ue73a': '心', '\uebf0': '出', '\ue4fe': '太', '\ue3c7': '小', '\ue7d9': '会', '\uefb6': '笑', '\uea48': '家', '\uec38': '由', '\ue428': '自', '\uef6e': '说', '\uefd2': '把', '\ue7b0': '年', '\ue86d': '世', '\ue44d': '么', '\ue50f': '看', '\ue6c8': '使', '\ue9cb': '论', '\uedcf': '下', '\ueef4': '儿', '\uef45': '到', '\ue7ee': '从', '\uebcc': '事', '\ue2ea': '打', '\uef78': '口', '\ue1fa': '现', '\ue5fb': '便', '\ue5e1': '回', '\ue6fa': '要', '\ue89f': '代', '\ue19b': '丸', '\ue98a': '成', '\uedda': '间', '\ue2e2': '实', '\ue084': '话', '\ue3a1': '进', '\ue586': '他', '\uea75': '很', '\ue3ca': '因', '\ue78d': '得', '\ue11f': '而', '\ue0d3': '情', '\ue3aa': '别', '\ue9a2': '好', '\ue567': '无', '\ue54d': '少', '\ue72b': '特', '\ue5c6': '关', '\ue3e3': '同', '\uee30': '但', '\ue197': '人', '\ue009': '全', '\ue47d': '定', '\ue490': '声', '\ue0f4': '公', '\ue005': '什', '\ue055': '老', '\uebfd': '了', '\uec30': '等', '\ue535': '仁', '\ue6c4': '明', '\ue1ca': '先', '\ue948': '学', '\ue705': '再', '\ue1e7': '你', '\ued69': '分', '\uee76': '动', '\ue8de': '门', '\ue7b4': '还', '\uee6b': '给', '\ue1a7': '上', '\ue99b': '以', '\ue3fe': '力', '\ue52b': '十', '\ue44c': '体', '\uea63': '身', '\uebe4': '又', '\ue2df': '与', '\ue774': '国', '\ue57f': '的', '\ue5ee': '之', '\ue8a7': '将', '\ue898': '那', '\ue97d': '与', '\ue6cb': '几', '\ue801': '三', '\uecd6': '书', '\ue019': '过', '\uebc4': '物', '\ue999': '时', '\uefaf': '死', '\uec9c': '第', '\ue1fb': '想', '\ue085': '两', '\ued5d': '生', '\uee11': '文', '\ue8dc': '思', '\uea14': '后', '\ue3ac': '社', '\ue943': '二', '\uee8b': '一', '\ue08f': '理', '\ue50a': '名', '\ue5a3': '并', '\ue803': '长', '\ueaf1': '行', '\uedf4': '当', '\uebba': '新', '\ue5c3': '着', '\ue429': '前', '\uecc8': '在', '\uef7e': '起', '\ue06a': '真', '\ue804': '教', '\ue0d6': '种', '\ueff7': '走', '\uefd5': '民', '\uec84': '能', '\ue36d': '天', '\ue7cd': '于', '\ued67': '美', '\ue8a1': '此', '\ue506': '神', '\ue451': '手', '\ue0a8': '和', '\uead1': '外', '\ue601': '面', '\uebfe': '主', '\ue4d0': '才', '\ue076': '些', '\ue087': '经', '\ue9ab': '里', '\ue8d6': '法', '\ueb49': '大', '\ue584': '女', '\ue4df': '头', '\ue98f': '用', '\ue28b': '都', '\ue42f': '是', '\uede8': '个', '\ue627': '地', '\ue31a': '不', '\ue4bb': '知', '\ue4ad': '白', '\ue530': '发', '\uea6d': '见', '\ue9ed': '性', '\ue1eb': '也', '\ue00d': '已', '\uea17': '西', '\ued4b': '更', '\ueb9f': '日', '\uef5e': '部', '\ue613': '开', '\ued80': '对', '\ue44b': '我', '\ue05a': '正', '\ue150': '只', '\ue218': '向', '\ue1b2': '为', '\ue7f3': '点', '\uea35': '最', '\ue1e1': '气', '\uee44': '史', '\ue5a2': '高', '\uec17': '却', '\uecca': '去', '\uebf4': '有'}
&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;
&lt;div id="cell-id=b30494ec" class="cell border-box-sizing code_cell rendered"&gt;
&lt;div class="input"&gt;
&lt;div class="prompt input_prompt"&gt;In [25]:&lt;/div&gt;
&lt;div class="inner_cell"&gt;
    &lt;div class="input_area"&gt;
&lt;div class=" highlight hl-ipython3"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="n"&gt;coorTable&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;getCoorTable&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;table&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;ttf&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

    &lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;
&lt;div id="cell-id=e9374b9b" class="cell border-box-sizing code_cell rendered"&gt;
&lt;div class="input"&gt;
&lt;div class="prompt input_prompt"&gt;In [26]:&lt;/div&gt;
&lt;div class="inner_cell"&gt;
    &lt;div class="input_area"&gt;
&lt;div class=" highlight hl-ipython3"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;coorTable&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'见'&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

    &lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div class="output_wrapper"&gt;
&lt;div class="output"&gt;


&lt;div class="output_area"&gt;

    &lt;div class="prompt"&gt;&lt;/div&gt;


&lt;div class="output_subarea output_stream output_stdout output_text"&gt;
&lt;pre&gt;[(934, 1119), (934, 1119), (934, 1321), (1100, 1321), (1100, 1117), (1100, 846), (1060, 643), (1210, 643), (1210, 57), (1210, -69), (1348, -69), (1666, -69), (1800, -69), (1820, 61), (1820, 61), (1820, 61), (1840, 187), (1852, 371), (1852, 371), (1852, 371), (1932, 339), (2016, 313), (2016, 313), (2016, 313), (1998, 129), (1972, -5), (1972, -5), (1972, -5), (1936, -215), (1688, -215), (1308, -215), (1046, -215), (1046, 29), (1046, 575), (999, 378), (910, 251), (910, 251), (910, 251), (720, -41), (158, -277), (158, -277), (158, -277), (114, -217), (42, -133), (42, -133), (42, -133), (570, 75), (756, 341), (756, 341), (756, 341), (934, 575), (934, 1119), (456, 365), (292, 365), (292, 1623), (1764, 1623), (1764, 377), (1600, 377), (1600, 1475), (456, 1475)]
&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;
&lt;div id="cell-id=c110bdc0" class="cell border-box-sizing text_cell rendered"&gt;&lt;div class="prompt input_prompt"&gt;
&lt;/div&gt;&lt;div class="inner_cell"&gt;
&lt;div class="text_cell_render border-box-sizing rendered_html"&gt;
&lt;p&gt;接下来，便可以直接通过比较字体而进行识别了。&lt;/p&gt;

&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id="cell-id=de8116e2" class="cell border-box-sizing text_cell rendered"&gt;&lt;div class="prompt input_prompt"&gt;
&lt;/div&gt;&lt;div class="inner_cell"&gt;
&lt;div class="text_cell_render border-box-sizing rendered_html"&gt;
&lt;p&gt;加载并识别另外一个字体 jjwxcfont_00rmg.woff2&lt;/p&gt;

&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id="cell-id=4f04dec2" class="cell border-box-sizing code_cell rendered"&gt;
&lt;div class="input"&gt;
&lt;div class="prompt input_prompt"&gt;In [27]:&lt;/div&gt;
&lt;div class="inner_cell"&gt;
    &lt;div class="input_area"&gt;
&lt;div class=" highlight hl-ipython3"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;is_glpyh_similar&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;list&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;tuple&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;int&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;int&lt;/span&gt;&lt;span class="p"&gt;]],&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;list&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;tuple&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;int&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;int&lt;/span&gt;&lt;span class="p"&gt;]],&lt;/span&gt; &lt;span class="n"&gt;fuzz&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;int&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="sd"&gt;"""&lt;/span&gt;
&lt;span class="sd"&gt;    比较两字符 coor 是否相似。&lt;/span&gt;
&lt;span class="sd"&gt;    """&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="nb"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="nb"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;False&lt;/span&gt;
    &lt;span class="n"&gt;found&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;True&lt;/span&gt;
    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nb"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;)):&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="nb"&gt;abs&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;fuzz&lt;/span&gt; &lt;span class="ow"&gt;or&lt;/span&gt; &lt;span class="nb"&gt;abs&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;fuzz&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="n"&gt;found&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;False&lt;/span&gt;
            &lt;span class="k"&gt;break&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;found&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;quickMatch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;jj&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;ttf&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;ttFont&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;TTFont&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;stdCoorTable&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;dict&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;list&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;list&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;int&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;int&lt;/span&gt;&lt;span class="p"&gt;]]])&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="sd"&gt;"""&lt;/span&gt;
&lt;span class="sd"&gt;    通过直接比较字体快速匹配&lt;/span&gt;
&lt;span class="sd"&gt;    """&lt;/span&gt;
    &lt;span class="n"&gt;FUZZ&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;20&lt;/span&gt;

    &lt;span class="n"&gt;jjCoord&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;getCoord&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;jj&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;ttf&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;stdKey&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;stdCoorTable&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;stdCoord&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;stdCoorTable&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;stdKey&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;is_glpyh_similar&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;jjCoord&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;stdCoord&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;FUZZ&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
            &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;stdKey&lt;/span&gt;


&lt;span class="c1"&gt;#加载字体 jjwxcfont_00rmg&lt;/span&gt;
&lt;span class="n"&gt;font2path&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;join&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;FontsDir&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'jjwxcfont_00rmg.woff2'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;with&lt;/span&gt; &lt;span class="n"&gt;tempfile&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;TemporaryFile&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;tmp&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;woff2&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;decompress&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;font2path&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;tmp&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;tmp&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;seek&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;ttf2&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;ttFont&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;TTFont&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;tmp&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    
&lt;span class="c1"&gt;#比较字体 jjwxcfont_00rmg&lt;/span&gt;
&lt;span class="n"&gt;results&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{}&lt;/span&gt;
&lt;span class="n"&gt;jj2Keys&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;listTTF&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ttf2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;jj2&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;jj2Keys&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;mchar&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;quickMatch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;jj2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;ttf2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;coorTable&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;results&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;jj2&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;mchar&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

    &lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div class="output_wrapper"&gt;
&lt;div class="output"&gt;


&lt;div class="output_area"&gt;

    &lt;div class="prompt"&gt;&lt;/div&gt;


&lt;div class="output_subarea output_stream output_stderr output_text"&gt;
&lt;pre&gt;2 extra bytes in post.stringData array
&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;
&lt;div id="cell-id=d6f7ac45" class="cell border-box-sizing code_cell rendered"&gt;
&lt;div class="input"&gt;
&lt;div class="prompt input_prompt"&gt;In [28]:&lt;/div&gt;
&lt;div class="inner_cell"&gt;
    &lt;div class="input_area"&gt;
&lt;div class=" highlight hl-ipython3"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;results&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

    &lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div class="output_wrapper"&gt;
&lt;div class="output"&gt;


&lt;div class="output_area"&gt;

    &lt;div class="prompt"&gt;&lt;/div&gt;


&lt;div class="output_subarea output_stream output_stdout output_text"&gt;
&lt;pre&gt;{'\ue944': '行', '\ue0c2': '也', '\ue5b2': '便', '\ue395': '又', '\ue278': '就', '\ue0ec': '动', '\ue0de': '仁', '\ue00b': '主', '\ue79f': '而', '\ue901': '与', '\ue4f3': '要', '\ue187': '已', '\ue4c6': '和', '\ue8f8': '这', '\ue289': '外', '\uef76': '什', '\ue470': '很', '\ue710': '知', '\ue293': '身', '\ue729': '起', '\uebd3': '物', '\ueae9': '情', '\uebb7': '特', '\ue2ab': '开', '\ue5bd': '教', '\uece5': '下', '\uec02': '进', '\ue18b': '论', '\ue768': '第', '\ue52f': '好', '\uec64': '儿', '\ue1b1': '所', '\uefb2': '两', '\ue357': '手', '\ue9b0': '部', '\uebf0': '时', '\uedd2': '等', '\uea2d': '新', '\ue020': '西', '\ue4fe': '人', '\uec7c': '在', '\uee82': '发', '\ue1f6': '名', '\uebed': '都', '\ued25': '几', '\uec38': '太', '\ue964': '别', '\uea80': '长', '\ue176': '笑', '\ue917': '何', '\ue24a': '的', '\uece7': '体', '\ue9ac': '上', '\ue579': '打', '\ue7b0': '作', '\ueabf': '以', '\ueb0f': '生', '\uef3a': '眼', '\ue5f8': '事', '\ue0fc': '民', '\ueec3': '学', '\ue86b': '才', '\ue233': '自', '\ue4c1': '其', '\ue7ee': '还', '\ue1aa': '感', '\uee4b': '公', '\uea95': '家', '\ue6d1': '法', '\ueeb9': '问', '\ued61': '十', '\ue216': '点', '\ue195': '二', '\ue25e': '成', '\ue3f1': '后', '\uea9a': '子', '\ue77c': '经', '\ueda2': '但', '\ue5e1': '相', '\ueac6': '门', '\ue10e': '大', '\uef27': '从', '\ue4a2': '如', '\ue371': '理', '\uebd9': '史', '\ue455': '力', '\ue53f': '三', '\ue159': '去', '\ue4ed': '当', '\uec73': '她', '\ue255': '正', '\ue39a': '代', '\ue18a': '重', '\ue41c': '话', '\uef80': '使', '\uefa4': '由', '\uefec': '年', '\ue3e3': '我', '\uee30': '过', '\ue197': '么', '\ue294': '社', '\ueab2': '只', '\ue91d': '小', '\ue151': '更', '\ue6b9': '一', '\ue9fb': '没', '\uea85': None, '\ueae1': '最', '\ueaf6': '现', '\uea64': '将', '\ue449': '会', '\ue619': '全', '\ue10f': '口', '\ue1ca': '被', '\ue092': '世', '\ue9ad': '回', '\uee0d': '于', '\uec35': '里', '\ue907': '意', '\ue563': '明', '\uecc5': '真', '\ue24b': '向', '\ue52a': '道', '\ued16': '定', '\ueee5': '头', '\ue8ee': '气', '\ue592': '实', '\uecaf': '样', '\ue12b': '因', '\ue2bf': '无', '\ue16d': '之', 'x': None, '\ue27c': '四', '\ue25a': '文', '\ue13a': '说', '\ue6e3': '前', '\uecd6': '国', '\ue5ed': '那', '\ue8d0': '中', '\uebe3': '高', '\ueaf3': '来', '\ue372': '种', '\ue8dc': '给', '\ue6a7': '本', '\ue7da': '并', '\uec59': '却', '\ue990': '性', '\ue99d': '用', '\ueb41': '不', '\ue69b': '思', '\uebb0': '再', '\ue4f4': '为', '\ue265': '见', '\ued8e': '了', '\ue0db': '出', '\uee6f': '少', '\ue094': '己', '\ue913': '分', '\ue06f': '日', '\ue08a': '关', '\ue903': '能', '\ueb9b': '听', '\uebf8': '想', '\ue0a8': '白', '\uead1': '是', '\uef8d': '同', '\ue889': '看', '\ue182': '多', '\ueae3': '对', '\ue23e': '心', '\ue5d3': '然', '\uec97': '们', '\uefcf': '者', '\ue9f7': '美', '\ueec1': '老', '\ue690': '丸', '\ue6da': '声', '\ue7df': '女', '\uebd5': '书', '\ue1e6': '把', '\ue2b5': '方', '\uea3d': '着', '\ue467': '你', '\ue006': '到', '\ue05a': '他', '\ue74c': '天', '\ue6bc': '得', '\ue8e1': '间', '\ueb1d': '走', '\ue7f3': '此', '\uee72': '地', '\ue16e': '个', '\uefb4': '先', '\ue0b7': '死', '\ue40f': '面', '\ue472': '果', '\uec17': '神', '\ue341': '有', '\ued8a': '化', '\ue101': '些', '\ue950': '可'}
&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;
&lt;div id="cell-id=9cf9e38c" class="cell border-box-sizing text_cell rendered"&gt;&lt;div class="prompt input_prompt"&gt;
&lt;/div&gt;&lt;div class="inner_cell"&gt;
&lt;div class="text_cell_render border-box-sizing rendered_html"&gt;
&lt;h2 id="%E7%BB%93%E8%AF%AD"&gt;结语&lt;a class="anchor-link" href="https://blog.bgme.me/posts/2021/shi-li-xiang-jie-zi-ding-yi-zi-ti-fan-pa-de-dui-kang/#%E7%BB%93%E8%AF%AD"&gt;¶&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;全文内容到这里就结束了。&lt;/p&gt;
&lt;p&gt;本文是编写程序&lt;a href="https://github.com/yingziwu/jjwxcFontTables"&gt;晋江自定义字体破解辅助工具&lt;/a&gt;的副产品，具体应用可以参见项目代码。&lt;/p&gt;

&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;</description><category>反爬虫</category><category>爬虫</category><category>自定义字体反爬</category><guid>https://blog.bgme.me/posts/2021/shi-li-xiang-jie-zi-ding-yi-zi-ti-fan-pa-de-dui-kang/</guid><pubDate>Sun, 29 Aug 2021 13:33:03 GMT</pubDate></item><item><title>从其它长毛象实例复制表情包</title><link>https://blog.bgme.me/posts/2019/copy-custom-emojis-from-other-mastodon-instance/</link><dc:creator>无影人</dc:creator><description>&lt;div class="cell border-box-sizing text_cell rendered"&gt;&lt;div class="prompt input_prompt"&gt;
&lt;/div&gt;&lt;div class="inner_cell"&gt;
&lt;div class="text_cell_render border-box-sizing rendered_html"&gt;
&lt;p&gt;自定义表情包是长毛象的一大特色，本文将介绍如何从其它长毛象实例复制表情包。&lt;/p&gt;
&lt;!-- TEASER_END --&gt;


&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="cell border-box-sizing text_cell rendered"&gt;&lt;div class="prompt input_prompt"&gt;
&lt;/div&gt;&lt;div class="inner_cell"&gt;
&lt;div class="text_cell_render border-box-sizing rendered_html"&gt;
&lt;p&gt;所需材料：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;有管理权的长毛象实例一个&lt;/li&gt;
&lt;li&gt;目标实例账号一枚&lt;/li&gt;
&lt;/ul&gt;

&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="cell border-box-sizing text_cell rendered"&gt;&lt;div class="prompt input_prompt"&gt;
&lt;/div&gt;&lt;div class="inner_cell"&gt;
&lt;div class="text_cell_render border-box-sizing rendered_html"&gt;
&lt;h3 id="%E4%BD%BF%E7%94%A8-API-%E8%8E%B7%E5%8F%96%E8%A1%A8%E6%83%85%E5%8C%85%E6%95%B0%E6%8D%AE"&gt;使用 API 获取表情包数据&lt;a class="anchor-link" href="https://blog.bgme.me/posts/2019/copy-custom-emojis-from-other-mastodon-instance/#%E4%BD%BF%E7%94%A8-API-%E8%8E%B7%E5%8F%96%E8%A1%A8%E6%83%85%E5%8C%85%E6%95%B0%E6%8D%AE"&gt;¶&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;使用 &lt;a href="https://docs.joinmastodon.org/api/rest/custom-emojis/"&gt;Custom emoji&lt;/a&gt; API 获取目标实例表情包数据。&lt;/p&gt;

&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="cell border-box-sizing code_cell rendered"&gt;
&lt;div class="input"&gt;
&lt;div class="prompt input_prompt"&gt;In [1]:&lt;/div&gt;
&lt;div class="inner_cell"&gt;
    &lt;div class="input_area"&gt;
&lt;div class=" highlight hl-ipython3"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;requests&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;json&lt;/span&gt;

&lt;span class="c1"&gt;# base_url = "https://cmx.im"&lt;/span&gt;
&lt;span class="n"&gt;base_url&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"https://nebula.moe"&lt;/span&gt;
&lt;span class="n"&gt;custom_emojis_api&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;base_url&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="s2"&gt;"/api/v1/custom_emojis"&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

    &lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;
&lt;div class="cell border-box-sizing code_cell rendered"&gt;
&lt;div class="input"&gt;
&lt;div class="prompt input_prompt"&gt;In [2]:&lt;/div&gt;
&lt;div class="inner_cell"&gt;
    &lt;div class="input_area"&gt;
&lt;div class=" highlight hl-ipython3"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="n"&gt;custom_emojis_api&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

    &lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div class="output_wrapper"&gt;
&lt;div class="output"&gt;


&lt;div class="output_area"&gt;

    &lt;div class="prompt output_prompt"&gt;Out[2]:&lt;/div&gt;




&lt;div class="output_text output_subarea output_execute_result"&gt;
&lt;pre&gt;'https://nebula.moe/api/v1/custom_emojis'&lt;/pre&gt;
&lt;/div&gt;

&lt;/div&gt;

&lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;
&lt;div class="cell border-box-sizing code_cell rendered"&gt;
&lt;div class="input"&gt;
&lt;div class="prompt input_prompt"&gt;In [3]:&lt;/div&gt;
&lt;div class="inner_cell"&gt;
    &lt;div class="input_area"&gt;
&lt;div class=" highlight hl-ipython3"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="n"&gt;resp&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;custom_emojis_api&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;timeout&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;15&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;emojis&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;resp&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

    &lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;
&lt;div class="cell border-box-sizing text_cell rendered"&gt;&lt;div class="prompt input_prompt"&gt;
&lt;/div&gt;&lt;div class="inner_cell"&gt;
&lt;div class="text_cell_render border-box-sizing rendered_html"&gt;
&lt;h3 id="%E6%95%B4%E7%90%86%E8%A1%A8%E6%83%85%E5%8C%85%E6%95%B0%E6%8D%AE"&gt;整理表情包数据&lt;a class="anchor-link" href="https://blog.bgme.me/posts/2019/copy-custom-emojis-from-other-mastodon-instance/#%E6%95%B4%E7%90%86%E8%A1%A8%E6%83%85%E5%8C%85%E6%95%B0%E6%8D%AE"&gt;¶&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;整理 API 返回的数据，将其整理为长毛象发布使用的格式（&lt;code&gt;:shortcode:&lt;/code&gt;）。&lt;/p&gt;

&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="cell border-box-sizing code_cell rendered"&gt;
&lt;div class="input"&gt;
&lt;div class="prompt input_prompt"&gt;In [5]:&lt;/div&gt;
&lt;div class="inner_cell"&gt;
    &lt;div class="input_area"&gt;
&lt;div class=" highlight hl-ipython3"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="n"&gt;output&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;''&lt;/span&gt;
&lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;
&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;emoji&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;emojis&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;%&lt;/span&gt; &lt;span class="mi"&gt;7&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; 
        &lt;span class="n"&gt;output&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;output&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="s1"&gt;':'&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;emoji&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'shortcode'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="s1"&gt;':'&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="s1"&gt;' '&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s1"&gt;'&lt;/span&gt;
    &lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;output&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;output&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="s1"&gt;':'&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;emoji&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'shortcode'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="s1"&gt;':'&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="s1"&gt;' '&lt;/span&gt;
    &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;
&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;output&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

    &lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div class="output_wrapper"&gt;
&lt;div class="output"&gt;


&lt;div class="output_area"&gt;

    &lt;div class="prompt"&gt;&lt;/div&gt;


&lt;div class="output_subarea output_stream output_stdout output_text"&gt;
&lt;pre&gt;:huaji7: :0510: :0520: :0530: :0540: :0560: :0580: 
:0590: :1020: :2010: :weibo_v_2: :0610: :2040: :2020: 
:2030: :2060: :2100: :2110: :2145: :3010: :3020: 
:4010: :4030: :4041: :5030: :5060: :6061: :6530: 
:7012: :7021: :2050: :2080: :2090: :rainbowthink: :blobrainbow: 
:blobcatrainbow: :2101: :2152: :4120: :4310: :5000: :5150: 
:5160: :3030: :3040: :3060: :4021: :4040: :4100: 
:4110: :5161: :6060: :6070: :6121: :6500: :6520: 
:7000: :0140: :0150: :0160: :0170: :0171: :0180: 
:0181: :0190: :0200: :0241: :0220: :0230: :0240: 
:0350: :0330: :0260: :0250: :0270: :0280: :0290: 
:0300: :0310: :0320: :0331: :0340: :0360: :0390: 
:0400: :0430: :0370: :0391: :0410: :0450: :0460: 
:0120: :0431: :0451: :0490: :0600: :0461: :0462: 
:0470: :0130: :0480: :huaji: :facepalm: :doge: :weibo_v_4: 
:0000: :0010: :0020: :0030: :0040: :0050: :0060: 
:0070: :0080: :0090: :0100: :0110: :0500: :7045: 
:7046: :7050: :7080: :7081: :7200: :7230: :8010: 
:8020: :8040: :8051: :8060: :8080: :8081: :8082: 
:8083: :8090: :8091: :8100: :8111: :huaji2: :huaji3: 
:huaji4: :huaji5: :huaji6: :huaji8: :verified: :thinking_very_hard: :weibo_v_1: 
:wb_mem: :weibo_v_3: :patcat: :blobcat: :blobcatsurprised: :blobcatpeek: :blobcatthink: 
:nyan_cat: :verifinking: :owi: :thinkhappy: :night: 
&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;
&lt;div class="cell border-box-sizing text_cell rendered"&gt;&lt;div class="prompt input_prompt"&gt;
&lt;/div&gt;&lt;div class="inner_cell"&gt;
&lt;div class="text_cell_render border-box-sizing rendered_html"&gt;
&lt;h3 id="%E5%8F%91%E5%B8%83%E5%98%9F%E5%98%9F"&gt;发布嘟嘟&lt;a class="anchor-link" href="https://blog.bgme.me/posts/2019/copy-custom-emojis-from-other-mastodon-instance/#%E5%8F%91%E5%B8%83%E5%98%9F%E5%98%9F"&gt;¶&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;进行此步前，请确认你所管理的实例已经关注目标实例的账号。&lt;/p&gt;
&lt;p&gt;比如说，我打算将&lt;a href="https://nebula.moe/"&gt;嘟嘟星云&lt;/a&gt;的自定义表情复制至&lt;a href="https://bgme.me/"&gt;本人的实例&lt;/a&gt;，那么我需要一个嘟嘟星云上的&lt;a href="https://nebula.moe/@bgme"&gt;账号&lt;/a&gt;，而且本人实例已经关注此账号。&lt;br&gt;
发布嘟嘟前，确保目标实例账号（嘟嘟星云账号）所发的嘟嘟，你所管理的实例（本人的实例）能够接收的到。&lt;/p&gt;
&lt;p&gt;&lt;img src="https://s3.us-west-1.wasabisys.com/bgme-mstdn-media/media_attachments/files/000/002/420/small/47a6256f989519cc.png" alt="发布嘟嘟"&gt;&lt;/p&gt;
&lt;p&gt;将上一步中得到的发布文本分次使用目标实例账号（嘟嘟星云账号）发布。&lt;/p&gt;
&lt;p&gt;你所管理的实例（本人实例）如果已经收到目标实例账号（嘟嘟星云账号）所发的全部嘟嘟，那么本步完成。&lt;/p&gt;

&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="cell border-box-sizing text_cell rendered"&gt;&lt;div class="prompt input_prompt"&gt;
&lt;/div&gt;&lt;div class="inner_cell"&gt;
&lt;div class="text_cell_render border-box-sizing rendered_html"&gt;
&lt;h3 id="%E7%AE%A1%E7%90%86%E5%90%8E%E5%8F%B0%E4%B8%80%E9%94%AE%E5%A4%8D%E5%88%B6"&gt;管理后台一键复制&lt;a class="anchor-link" href="https://blog.bgme.me/posts/2019/copy-custom-emojis-from-other-mastodon-instance/#%E7%AE%A1%E7%90%86%E5%90%8E%E5%8F%B0%E4%B8%80%E9%94%AE%E5%A4%8D%E5%88%B6"&gt;¶&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;a class="reference external image-reference" href="https://s3.us-west-1.wasabisys.com/bgme-mstdn-media/media_attachments/files/000/000/831/original/ed88394d507b85e5.png"&gt;&lt;img src="https://s3.us-west-1.wasabisys.com/bgme-mstdn-media/media_attachments/files/000/000/831/original/ed88394d507b85e5.png" alt="管理后台"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;进入管理后台，打开 &lt;code&gt;Custom emojis&lt;/code&gt; 选项卡，点击自己喜欢表情的 &lt;strong&gt;Copy&lt;/strong&gt; 按钮，一键复制。&lt;/p&gt;

&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;</description><category>emoji</category><category>Mastodon</category><guid>https://blog.bgme.me/posts/2019/copy-custom-emojis-from-other-mastodon-instance/</guid><pubDate>Fri, 15 Feb 2019 07:07:50 GMT</pubDate></item></channel></rss>