<?xml version="1.0" encoding="UTF-8"?><?xml-stylesheet type="text/xsl" href="/wp-content/plugins/rss-beauty/pink.xsl"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>网站镜像 Archives - obaby 𝐢‍𝐧⃝ void</title>
	<atom:link href="https://zhongxiaojie.com/tag/%e7%bd%91%e7%ab%99%e9%95%9c%e5%83%8f/feed/" rel="self" type="application/rss+xml" />
	<link>https://zhongxiaojie.com/tag/网站镜像/</link>
	<description>程序媛 / 独立开发者 / 智商不稳定的女神经</description>
	<lastBuildDate>Wed, 01 Apr 2026 13:34:28 +0000</lastBuildDate>
	<language>zh-Hans</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>

<image>
	<url>https://zhongxiaojie.com/wp-content/uploads/2026/01/uugai.com-166111691272754-100x100.png</url>
	<title>网站镜像 Archives - obaby 𝐢‍𝐧⃝ void</title>
	<link>https://zhongxiaojie.com/tag/网站镜像/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>弱弱的问一下，我的网站怎么被镜像了嗫？</title>
		<link>https://zhongxiaojie.com/2026/04/768/</link>
					<comments>https://zhongxiaojie.com/2026/04/768/#comments</comments>
		
		<dc:creator><![CDATA[obaby]]></dc:creator>
		<pubDate>Wed, 01 Apr 2026 03:18:37 +0000</pubDate>
				<category><![CDATA[程序媛]]></category>
		<category><![CDATA[nginx]]></category>
		<category><![CDATA[openresty]]></category>
		<category><![CDATA[网站镜像]]></category>
		<guid isPermaLink="false">https://zhongxiaojie.cn/?p=768</guid>

					<description><![CDATA[其实网站被镜像这件事情，本身没什么稀奇的，如果想搭建一个镜像网站，从零开始也不过个吧小时的时间。 之所以写这个 [&#8230;]]]></description>
										<content:encoded><![CDATA[<p><a href="https://zhongxiaojie.cn/wp-content/uploads/2026/04/330A0374-scaled.jpg" data-lbwps-width="1671" data-lbwps-height="2560" data-lbwps-srcsmall="https://zhongxiaojie.cn/wp-content/uploads/2026/04/330A0374-scaled.jpg" data-lightbox="gal[768]"><img fetchpriority="high" decoding="async" class="alignnone size-full wp-image-771" src="https://zhongxiaojie.cn/wp-content/uploads/2026/04/330A0374-scaled.jpg" alt="" width="1671" height="2560" srcset="https://zhongxiaojie.com/wp-content/uploads/2026/04/330A0374-scaled.jpg?v=1775013505 1671w, https://zhongxiaojie.com/wp-content/uploads/2026/04/330A0374-196x300.jpg?v=1775013505 196w, https://zhongxiaojie.com/wp-content/uploads/2026/04/330A0374-668x1024.jpg?v=1775013505 668w, https://zhongxiaojie.com/wp-content/uploads/2026/04/330A0374-98x150.jpg?v=1775013505 98w, https://zhongxiaojie.com/wp-content/uploads/2026/04/330A0374-768x1177.jpg?v=1775013505 768w, https://zhongxiaojie.com/wp-content/uploads/2026/04/330A0374-1002x1536.jpg?v=1775013505 1002w, https://zhongxiaojie.com/wp-content/uploads/2026/04/330A0374-1337x2048.jpg?v=1775013505 1337w, https://zhongxiaojie.com/wp-content/uploads/2026/04/330A0374-665x1019.jpg?v=1775013505 665w, https://zhongxiaojie.com/wp-content/uploads/2026/04/330A0374-170x260.jpg?v=1775013505 170w" sizes="(max-width: 1671px) 100vw, 1671px" /></a></p>
<p>其实网站被镜像这件事情，本身没什么稀奇的，如果想搭建一个镜像网站，从零开始也不过个吧小时的时间。</p>
<p><span id="more-768"></span></p>
<p>之所以写这个东西，是因为最近有看到好几个人被镜像的，<a href="https://www.aiwazi.com/2986.html" target="_blank" rel="noopener">这一个（爱娃子）</a>，还有 <a href="https://me.xu19.com/mirror-blog/" target="_blank" rel="noopener">这一个</a>（我是军爸）。</p>
<p><a href="https://zhongxiaojie.cn/wp-content/uploads/2026/04/Jietu20260401-110831.jpg" data-lbwps-width="1718" data-lbwps-height="882" data-lbwps-srcsmall="https://zhongxiaojie.cn/wp-content/uploads/2026/04/Jietu20260401-110831.jpg" data-lightbox="gal[768]"><img decoding="async" class="alignnone size-full wp-image-769" src="https://zhongxiaojie.cn/wp-content/uploads/2026/04/Jietu20260401-110831.jpg" alt="" width="1718" height="882" srcset="https://zhongxiaojie.com/wp-content/uploads/2026/04/Jietu20260401-110831.jpg?v=1775012949 1718w, https://zhongxiaojie.com/wp-content/uploads/2026/04/Jietu20260401-110831-300x154.jpg?v=1775012949 300w, https://zhongxiaojie.com/wp-content/uploads/2026/04/Jietu20260401-110831-1024x526.jpg?v=1775012949 1024w, https://zhongxiaojie.com/wp-content/uploads/2026/04/Jietu20260401-110831-150x77.jpg?v=1775012949 150w, https://zhongxiaojie.com/wp-content/uploads/2026/04/Jietu20260401-110831-768x394.jpg?v=1775012949 768w, https://zhongxiaojie.com/wp-content/uploads/2026/04/Jietu20260401-110831-1536x789.jpg?v=1775012949 1536w, https://zhongxiaojie.com/wp-content/uploads/2026/04/Jietu20260401-110831-665x341.jpg?v=1775012949 665w, https://zhongxiaojie.com/wp-content/uploads/2026/04/Jietu20260401-110831-506x260.jpg?v=1775012949 506w" sizes="(max-width: 1718px) 100vw, 1718px" /></a></p>
<p>不过，既然还有人有疑惑，那就简单的教一下大家怎么来镜像个网站吧。</p>
<p>为此，我创建了一个开源项目：</p>
<h3>OpenResty + OpenCC 反向代理简繁转换</h3>
<hr />
<p>基于 <strong>OpenResty</strong> 反向代理上游站点，对 <strong>HTML 正文</strong> 做 <strong>OpenCC</strong> 简繁转换（默认：<strong>简体 → 繁体</strong>，配置文件为 <code>s2t.json</code>）。适合在不改源站的情况下，为访客提供另一种字体习惯版本。</p>
<h2><a id="user-content-功能概览" class="anchor" href="https://gitee.com/obaby/baby-website-mirroring-tool#%E5%8A%9F%E8%83%BD%E6%A6%82%E8%A7%88"></a>功能概览</h2>
<table>
<thead>
<tr>
<th>能力</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>反向代理</strong></td>
<td>HTTPS 回源（示例站点：<code>zhongxiaojie.cn</code>），客户端走本机证书与域名。</td>
</tr>
<tr>
<td><strong>HTML 简繁转换</strong></td>
<td>仅当 <code>Content-Type</code> 含 <code>text/html</code> 时对整页做 OpenCC UTF-8 转换。</td>
</tr>
<tr>
<td><strong>gzip 解压</strong></td>
<td>通过 Lua <code>zlib</code> 尝试解压响应体（与去掉 <code>Content-Encoding</code> 的配合视上游行为而定）。</td>
</tr>
<tr>
<td><strong>链接与图片 URL 保护</strong></td>
<td>转换前将 <code>href</code> / <code>src</code> / <code>poster</code> / <code>data-src</code> / <code>srcset</code> 及裸 <code>http(s)://</code> 链接替换为占位符，转换后还原，<strong>避免路径或查询串中的汉字被改写导致 404</strong>。</td>
</tr>
<tr>
<td><strong>IPv4 优先解析</strong></td>
<td><code>resolver … ipv6=off</code> + 变量 <code>proxy_pass</code>，减轻云主机无 IPv6 时对 AAAA 连接失败的问题。</td>
</tr>
<tr>
<td><strong>静态资源直过</strong></td>
<td>图片、CSS、JS、字体等扩展名单独 <code>location</code>，<strong>不做</strong> OpenCC，减轻负担、避免误伤二进制。</td>
</tr>
<tr>
<td><strong>动态库加载</strong></td>
<td>对 <code>libopencc.so</code> 按常见路径依次尝试 <code>ffi.load</code>，降低找不到共享库的概率。</td>
</tr>
</tbody>
</table>
<h3><a id="user-content-限制与说明" class="anchor" href="https://gitee.com/obaby/baby-website-mirroring-tool#%E9%99%90%E5%88%B6%E4%B8%8E%E8%AF%B4%E6%98%8E"></a>限制与说明</h3>
<ul>
<li><strong>JSON / JS / CSS 内嵌字符串</strong>若不在上述保护规则内，仍可能被转换；重要数据建议不要用全文 HTML OpenCC 硬转。</li>
<li><strong>内联样式</strong> <code>style="background:url(...)"</code> 未单独做保护，若遇少数破图可再扩展规则。</li>
<li>转换配置在 <code>nginx/opencc/opencc-filter.lua</code> 中的 <code>OPENCC_CONFIG</code>（默认 <code>/usr/share/opencc/s2t.json</code>）；若需 <strong>繁体 → 简体</strong> 可改为 <code>t2s.json</code> 等（需系统已安装对应 OpenCC 数据文件）。</li>
</ul>
<h2><a id="user-content-部署要求" class="anchor" href="https://gitee.com/obaby/baby-website-mirroring-tool#%E9%83%A8%E7%BD%B2%E8%A6%81%E6%B1%82"></a>部署要求</h2>
<ul>
<li><strong>OpenResty</strong>（带 <code>lua-nginx-module</code>）。</li>
<li><strong>OpenCC</strong> 运行时：系统安装 <code>libopencc.so</code> 与词典数据（如 <code>/usr/share/opencc/*.json</code>），并保证 <strong>worker 进程能加载到 <code>.so</code></strong>（见下文「共享库」）。</li>
<li><strong>Lua</strong> 可 <code>require('zlib')</code> 的模块（用于 <code>zlib.inflate</code>，若无 gzip 体则 <code>pcall</code> 失败会跳过解压，不影响后续逻辑）。</li>
<li>上游为 HTTPS 时，本机需能解析并访问该域名（已用 <code>resolver</code> 时 VARIABLE 形式 <code>proxy_pass</code> 才会走指定 resolver）。</li>
</ul>
<h2><a id="user-content-部署步骤" class="anchor" href="https://gitee.com/obaby/baby-website-mirroring-tool#%E9%83%A8%E7%BD%B2%E6%AD%A5%E9%AA%A4"></a>部署步骤</h2>
<h3><a id="user-content-1-安装-opencc-与数据文件" class="anchor" href="https://gitee.com/obaby/baby-website-mirroring-tool#1-%E5%AE%89%E8%A3%85-opencc-%E4%B8%8E%E6%95%B0%E6%8D%AE%E6%96%87%E4%BB%B6"></a>1. 安装 OpenCC 与数据文件</h3>
<p>以 Debian / Ubuntu 为例（包名因发行版略有差异）：</p>
<div class="markdown-code-block">
<pre class="EnlighterJSRAW" data-enlighter-language="generic">sudo apt update 
sudo apt install -y libopencc1.1 opencc # 或 libopencc2 等，以仓库为准 
或者手工复制 lib64目录下的文件到 脚本对应的路径就是这个 /usr/lib64</pre>
<p>&nbsp;</p>
</div>
<p>确认存在词典，例如：</p>
<div class="markdown-code-block">
<pre class="EnlighterJSRAW" data-enlighter-language="generic">ls /usr/share/opencc/s2t.json</pre>
<p>&nbsp;</p>
</div>
<h3><a id="user-content-2-确保能找到-libopenccso" class="anchor" href="https://gitee.com/obaby/baby-website-mirroring-tool#2-%E7%A1%AE%E4%BF%9D%E8%83%BD%E6%89%BE%E5%88%B0-libopenccso"></a>2. 确保能找到 <code>libopencc.so</code></h3>
<p>若日志出现 <code>libopencc.so: cannot open shared object file</code>：</p>
<ul>
<li>将库放在系统默认搜索路径，例如 Ubuntu amd64：</li>
<li>
<pre class="EnlighterJSRAW" data-enlighter-language="generic">ldconfig -p | grep opencc</pre>
<p>&nbsp;</li>
<li>若库仅在 <code>/usr/lib64</code> 等非默认路径，可执行（与仓库 <code>fix.md</code> 一致）：</li>
<li>
<pre class="EnlighterJSRAW" data-enlighter-language="generic">echo '/usr/lib64' | sudo tee /etc/ld.so.conf.d/usr-lib64.conf sudo ldconfig</pre>
<p>&nbsp;</li>
<li>或在 <strong>OpenResty 的 systemd 单元</strong> 中设置 <code class="EnlighterJSRAW" data-enlighter-language="generic">Environment="LD_LIBRARY_PATH=/usr/lib64:/usr/local/lib"</code>  后重启。</li>
</ul>
<p>脚本内已对多路径做了 <code>ffi.load</code> 尝试；仍失败时请对照 <code>ldd</code> 与 <code>opencc</code> 包实际安装位置排查。</p>
<h3><a id="user-content-3-部署-lua-脚本" class="anchor" href="https://gitee.com/obaby/baby-website-mirroring-tool#3-%E9%83%A8%E7%BD%B2-lua-%E8%84%9A%E6%9C%AC"></a>3. 部署 Lua 脚本</h3>
<p>将 <code>nginx/opencc/opencc-filter.lua</code> 复制到服务端约定路径（与 nginx 配置一致），例如：</p>
<pre class="EnlighterJSRAW" data-enlighter-language="generic">sudo mkdir -p /usr/local/openresty/lua 
sudo cp nginx/opencc/opencc-filter.lua /usr/local/openresty/lua/opencc-filter.lua</pre>
<p>按需修改脚本顶部 <code>OPENCC_CONFIG</code> 指向本机实际的 JSON 配置。</p>
<h3><a id="user-content-4-合并-nginx--openresty-配置" class="anchor" href="https://gitee.com/obaby/baby-website-mirroring-tool#4-%E5%90%88%E5%B9%B6-nginx--openresty-%E9%85%8D%E7%BD%AE"></a>4. 合并 Nginx / OpenResty 配置</h3>
<ul>
<li>将 <code>zero.zhongxiaojie.cn.conf</code> 中的 <code>server</code> 块纳入主配置（<code>include</code> 或粘贴到 <code>nginx.conf</code> 的 <code>http {}</code> 下）。</li>
<li>修改 <strong>证书路径</strong>、<strong>日志路径</strong>、<strong>上游域名</strong> <code>zhongxiaojie.cn</code>、以及 <strong><code>body_filter_by_lua_file</code></strong> 的路径，使其与当前环境一致。</li>
<li><code>header_filter_by_lua</code> 中去除 <code>Content-Encoding</code>，便于对明文 HTML 做处理；若上游与解压逻辑不匹配，需自行观察是否需要调整。</li>
</ul>
<h3><a id="user-content-5-校验并重载" class="anchor" href="https://gitee.com/obaby/baby-website-mirroring-tool#5-%E6%A0%A1%E9%AA%8C%E5%B9%B6%E9%87%8D%E8%BD%BD"></a>5. 校验并重载</h3>
<div class="markdown-code-block">
<div class="markdown-code-block-copy-btn">
<pre class="EnlighterJSRAW" data-enlighter-language="generic">sudo /usr/local/openresty/nginx/sbin/nginx -t 
sudo /usr/local/openresty/nginx/sbin/nginx -s reload 
# 或 systemctl reload openresty</pre>
<p>&nbsp;</p>
</div>
</div>
<h3><a id="user-content-6-验证" class="anchor" href="https://gitee.com/obaby/baby-website-mirroring-tool#6-%E9%AA%8C%E8%AF%81"></a>6. 验证</h3>
<ul>
<li>浏览器访问你的站点，查看页面简繁是否符合预期。</li>
<li>检查 <strong>图片与站内链接</strong>是否正常（尤其含中文或 <code>%</code> 编码的路径）。</li>
<li><code>error.log</code> 中不应再出现 OpenCC 库加载失败或大量 IPv6 unreachable（在无 IPv6 环境）。</li>
</ul>
<h2><a id="user-content-配置项速查" class="anchor" href="https://gitee.com/obaby/baby-website-mirroring-tool#%E9%85%8D%E7%BD%AE%E9%A1%B9%E9%80%9F%E6%9F%A5"></a>配置项速查</h2>
<table>
<thead>
<tr>
<th>项目</th>
<th>位置</th>
</tr>
</thead>
<tbody>
<tr>
<td>OpenCC 配置 JSON</td>
<td><code>opencc-filter.lua</code> → <code>OPENCC_CONFIG</code></td>
</tr>
<tr>
<td>Lua 脚本路径</td>
<td><code>zero.zhongxiaojie.cn.conf</code> → <code>body_filter_by_lua_file</code></td>
</tr>
<tr>
<td>上游站点</td>
<td><code>set $upstream_host …</code> 与 <code>proxy_pass https://$upstream_host$request_uri</code></td>
</tr>
<tr>
<td>DNS / 仅 IPv4</td>
<td><code>resolver 223.5.5.5 8.8.8.8 valid=300s ipv6=off</code></td>
</tr>
<tr>
<td>不参与转换的静态文件</td>
<td>`location ~* .(gif</td>
</tr>
</tbody>
</table>
<h2><a id="user-content-故障排查" class="anchor" href="https://gitee.com/obaby/baby-website-mirroring-tool#%E6%95%85%E9%9A%9C%E6%8E%92%E6%9F%A5"></a>故障排查</h2>
<table>
<thead>
<tr>
<th>现象</th>
<th>可能原因</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>libopencc.so</code> 找不到</td>
<td>未安装包、<code>ldconfig</code> 未包含库目录，或需 <code>LD_LIBRARY_PATH</code></td>
</tr>
<tr>
<td>body_filter 报错、栈指向 <code>ffi.load</code></td>
<td>同上；或架构不一致（如 32/64 位混用）</td>
</tr>
<tr>
<td>上游连接 IPv6 失败</td>
<td>已用 <code>ipv6=off</code> + 变量 <code>proxy_pass</code>；仍失败则检查防火墙与 DNS</td>
</tr>
<tr>
<td>图片 404</td>
<td>历史上多为 OpenCC 改了 URL 内汉字；当前脚本对常见属性已做保护，若仍有个别，检查是否来自 CSS <code>url()</code> 或 JS 动态拼接</td>
</tr>
</tbody>
</table>
<hr />
<p>如需改为其他域名、证书路径或 <code>t2s</code> 转换方向，只需改配置文件与 <code>OPENCC_CONFIG</code>，无需改 OpenResty 核心。</p>
<p>实际效果：</p>
<p><a href="https://zhongxiaojie.cn/wp-content/uploads/2026/04/2026-04-01-11.13.33-zero.zhongxiaojie.cn-5e3a0545c205-scaled.jpg" data-lbwps-width="571" data-lbwps-height="2560" data-lbwps-srcsmall="https://zhongxiaojie.cn/wp-content/uploads/2026/04/2026-04-01-11.13.33-zero.zhongxiaojie.cn-5e3a0545c205-scaled.jpg" data-lightbox="gal[768]"><img decoding="async" class="alignnone size-full wp-image-770" src="https://zhongxiaojie.cn/wp-content/uploads/2026/04/2026-04-01-11.13.33-zero.zhongxiaojie.cn-5e3a0545c205-scaled.jpg" alt="" width="571" height="2560" srcset="https://zhongxiaojie.com/wp-content/uploads/2026/04/2026-04-01-11.13.33-zero.zhongxiaojie.cn-5e3a0545c205-scaled.jpg?v=1775013228 571w, https://zhongxiaojie.com/wp-content/uploads/2026/04/2026-04-01-11.13.33-zero.zhongxiaojie.cn-5e3a0545c205-67x300.jpg?v=1775013228 67w, https://zhongxiaojie.com/wp-content/uploads/2026/04/2026-04-01-11.13.33-zero.zhongxiaojie.cn-5e3a0545c205-457x2048.jpg?v=1775013228 457w, https://zhongxiaojie.com/wp-content/uploads/2026/04/2026-04-01-11.13.33-zero.zhongxiaojie.cn-5e3a0545c205-665x2983.jpg?v=1775013228 665w, https://zhongxiaojie.com/wp-content/uploads/2026/04/2026-04-01-11.13.33-zero.zhongxiaojie.cn-5e3a0545c205-58x260.jpg?v=1775013228 58w" sizes="(max-width: 571px) 100vw, 571px" /></a></p>
<p>开源项目地址：<a href="https://gitee.com/obaby/baby-website-mirroring-tool" target="_blank" rel="noopener">https://gitee.com/obaby/baby-website-mirroring-tool</a></p>
<p>参考链接：https://blog.csdn.net/wzj_110/article/details/127758020</p>
<p>https://blog.rexskz.info/support-traditional-chinese-using-openresty-and-opencc.html</p>
]]></content:encoded>
					
					<wfw:commentRss>https://zhongxiaojie.com/2026/04/768/feed/</wfw:commentRss>
			<slash:comments>93</slash:comments>
		
		
			</item>
	</channel>
</rss>
