<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:atom="http://www.w3.org/2005/Atom"
>
<channel>
<title><![CDATA[刘小猪--博客]]></title> 
<atom:link href="https://blog.liuxiaozhu.cn/rss.php" rel="self" type="application/rss+xml" />
<description><![CDATA[]]></description>
<link>https://blog.liuxiaozhu.cn/</link>
<language>zh-cn</language>

<item>
    <title>Django、Flask、FastAPI 深度对比：Python Web 框架到底怎么选？</title>
    <link>https://blog.liuxiaozhu.cn/?post=9</link>
    <description><![CDATA[<h2>前言</h2>
<p>在当今 Python Web 开发生态中，选择一个合适的基础框架往往决定了项目的开发效率、代码架构规范和后期的维护成本。目前最主流的三个选择无疑是：</p>
<ol>
<li><strong>Django</strong> —— 全功能、开箱即用的“电池内置（Batteries-Included）”全栈重型框架；</li>
<li><strong>Flask</strong> —— 极简主义、高自由度、轻量微型（Micro-framework）框架；</li>
<li><strong>FastAPI</strong> —— 现代、高性能、基于类型提示与 ASGI 的现代化异步 API 框架。</li>
</ol>
<p>很多开发者在技术选型时常感到困惑：究竟是选成熟稳健的 Django，还是自由小巧的 Flask，亦或是新一代性能怪兽 FastAPI？本文将从核心架构、异步能力、开发效率、性能表现等多维度展开深度剖析。</p>
<hr />
<h2>一、三大框架核心概览</h2>
<h3>1. Django：“全包宴”式巨无霸</h3>
<ul>
<li><strong>诞生背景</strong>：诞生于 2005 年，最初为新闻内容发布平台量身打造，主打快速开发与“开箱即用”。</li>
<li><strong>核心哲学</strong>：不要重复造轮子（DRY，Don't Repeat Yourself）。Django 自带了完善的 ORM、后台管理系统（Admin）、用户认证系统（Auth）、表单验证（Forms）、迁移系统（Migrations）和安全防护机制（CSRF/XSS 防御）。</li>
<li><strong>适用感受</strong>：就像买了一套精装修带全套家电的豪宅，拎包入住，但墙壁承重结构很难随意改动。</li>
</ul>
<h3>2. Flask：“毛坯房”式微框架</h3>
<ul>
<li><strong>诞生背景</strong>：诞生于 2010 年，基于 Werkzeug WSGI 工具箱和 Jinja2 模板引擎构建。</li>
<li><strong>核心哲学</strong>：内核极其轻简，核心代码仅保留请求路由和模板渲染，其余功能（如数据库 ORM、用户鉴权、表单处理）均通过社区扩展（如 Flask-SQLAlchemy、Flask-Login 等）按需拼装。</li>
<li><strong>适用感受</strong>：就像买了一套毛坯房，所有的软装、水电布线都由你全权设计，极具灵活性，但对开发者的架构设计能力提出了更高要求。</li>
</ul>
<h3>3. FastAPI：“高性能跑车”式新锐</h3>
<ul>
<li><strong>诞生背景</strong>：诞生于 2018 年，基于 Starlette（ASGI 引擎）和 Pydantic（数据校验）构建，专为构建现代 RESTful API 设计。</li>
<li><strong>核心哲学</strong>：利用 Python 3.6+ 的类型注解（Type Hints），实现自动数据校验、序列化、自动化生成交互式 Swagger/ReDoc API 文档，原生全面支持 <code>async/await</code> 异步高并发。</li>
<li><strong>适用感受</strong>：就像一辆流线型现代电跑，不仅速度飞快、自带智能辅助驾驶（类型安全与文档），而且操作体验极佳。</li>
</ul>
<hr />
<h2>二、核心维度深度横向对比</h2>
<table>
<thead>
<tr>
<th style="text-align: left;">对比维度</th>
<th style="text-align: left;">Django</th>
<th style="text-align: left;">Flask</th>
<th style="text-align: left;">FastAPI</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left;"><strong>框架类型</strong></td>
<td style="text-align: left;">全功能全栈框架 (Full-Stack)</td>
<td style="text-align: left;">微框架 (Micro-framework)</td>
<td style="text-align: left;">现代 API 微框架 (API-first)</td>
</tr>
<tr>
<td style="text-align: left;"><strong>网络底层协议</strong></td>
<td style="text-align: left;">传统 WSGI（逐步支持 ASGI）</td>
<td style="text-align: left;">WSGI（同步为主）</td>
<td style="text-align: left;">原生 ASGI（全异步支持）</td>
</tr>
<tr>
<td style="text-align: left;"><strong>性能与并发</strong></td>
<td style="text-align: left;">中等（同步 I/O 阻断）</td>
<td style="text-align: left;">中等（标准同步性能）</td>
<td style="text-align: left;"><strong>极高</strong>（与 NodeJS、Go 逼近）</td>
</tr>
<tr>
<td style="text-align: left;"><strong>内置功能</strong></td>
<td style="text-align: left;">极其丰富（ORM/Admin/Auth/缓存）</td>
<td style="text-align: left;">极少（仅路由、上下文与模板）</td>
<td style="text-align: left;">适中（专注参数校验、安全与文档）</td>
</tr>
<tr>
<td style="text-align: left;"><strong>数据验证/序列化</strong></td>
<td style="text-align: left;">Django Forms / DRF Serializers</td>
<td style="text-align: left;">需依赖 Marshmallow / Pydantic 等</td>
<td style="text-align: left;"><strong>原生集成 Pydantic</strong></td>
</tr>
<tr>
<td style="text-align: left;"><strong>API 文档生成</strong></td>
<td style="text-align: left;">需第三方插件（drf-spectacular 等）</td>
<td style="text-align: left;">需第三方扩展（apispec/flasgger）</td>
<td style="text-align: left;"><strong>开箱即用（Swagger/ReDoc）</strong></td>
</tr>
<tr>
<td style="text-align: left;"><strong>学习曲线</strong></td>
<td style="text-align: left;">陡峭（概念繁多，体系庞大）</td>
<td style="text-align: left;">平缓（几行代码即可跑通）</td>
<td style="text-align: left;">中等（需熟悉 Python 类型注解与异步）</td>
</tr>
<tr>
<td style="text-align: left;"><strong>生态成熟度</strong></td>
<td style="text-align: left;"><strong>顶级</strong>（近20年积累，社区资源极庞大）</td>
<td style="text-align: left;"><strong>顶级</strong>（大量成熟插件与案例）</td>
<td style="text-align: left;"><strong>快速爆发</strong>（现已成为顶流，生态日趋完善）</td>
</tr>
</tbody>
</table>
<hr />
<h2>三、深入技术细节剖析</h2>
<h3>1. 异步编程（Async/Await）与性能表现</h3>
<ul>
<li><strong>FastAPI</strong> 原生基于 ASGI 规范构建，在处理 I/O 密集型任务（如外部 API 调用、高并发数据库查询、长轮询、WebSocket）时，单实例吞吐量远远领先于基于 WSGI 的 Django 和 Flask。在业内主流的 TechEmpower 性能基准测试中，FastAPI 的成绩通常比传统 Django/Flask 高出一个数量级。</li>
<li><strong>Flask</strong> 本质上是同步的，尽管 Flask 2.0+ 增加了 <code>async</code> 视图支持，但底层依然受制于传统的 WSGI 设计，并非彻底的原生 ASGI 异步栈。</li>
<li><strong>Django</strong> 从 3.0 开始引入 ASGI，支持异步视图，并在 4.x/5.x 持续完善异步 ORM。但由于庞大的历史包袱和复杂的中间件机制，全面异步化仍需时日。</li>
</ul>
<h3>2. API 接口开发体验与文档自动化</h3>
<p>如果你的核心需求是开发 <strong>前后端分离架构的后端接口</strong> 或 <strong>移动端后台</strong>：</p>
<ul>
<li><strong>FastAPI</strong> 具有压倒性优势。通过定义 Pydantic 数据模型，请求体解析、类型转换、错误提示全部自动完成；服务启动后直接访问 <code>/docs</code> 就能获得现成的交互式 Swagger UI，前后端联调效率提升明显。</li>
<li><strong>Django</strong> 需要引入重型的 <code>Django REST framework (DRF)</code>，虽然功能极其强大（视图集、序列化器、过滤器应有尽有），但编写大量类和样板代码有时显得偏重。</li>
<li><strong>Flask</strong> 则需要自己手动组装校验库和文档库，团队规模一旦扩大，容易因为风格不统一导致维护困难。</li>
</ul>
<h3>3. 项目规范与团队协作</h3>
<ul>
<li><strong>Django</strong> 拥有极严格的约定优于配置（Convention over Configuration）标准。任何熟练的 Django 开发者接手新项目时，都能在两分钟内找到模型、视图、路由和配置的所在。这使得大型团队和长期维护的企业级系统极具可控性。</li>
<li><strong>Flask</strong> 由于太自由，每个开发者架构项目目录、分发路由的方式都可能截然不同，缺乏强约束可能导致技术债务迅速累积。</li>
</ul>
<hr />
<h2>四、总结与框架选型指南</h2>
<p>那么，在实际项目中到底该如何做选择？</p>
<h3>💡 选 Django 的场景：</h3>
<ol>
<li><strong>项目需求宽泛、追求快速交付</strong>：需要后台管理系统、用户权限体系、数据管理系统；</li>
<li><strong>传统全栈 Web 应用</strong>：需要服务端模板渲染（SSR）或成熟的 CMS、内部 ERP、电商管理后台；</li>
<li><strong>大型团队协作</strong>：需要统一的代码结构规范和稳健久经考验的技术体系。</li>
</ol>
<h3>💡 选 Flask 的场景：</h3>
<ol>
<li><strong>小型轻量项目或原型验证（MVP）</strong>：写几个简单的轻量级脚本服务、工具类 Web 工具；</li>
<li><strong>需要极致自定义</strong>：不想被任何特定 ORM 或模板引擎绑架，想完全根据自身需求选配技术栈；</li>
<li><strong>学习 Python Web 原理</strong>：代码量小、结构透明，非常适合初学者阅读源码理解 Web 请求处理本质。</li>
</ol>
<h3>💡 选 FastAPI 的场景：</h3>
<ol>
<li><strong>前后端分离 / 现代微服务体系</strong>：开发高性能 RESTful API、GraphQL API 服务；</li>
<li><strong>高并发与 I/O 密集型应用</strong>：聊天室、实时推送、IoT 数据收集、大模型（LLM）API 网关与推理服务；</li>
<li><strong>追求开发幸福度</strong>：喜欢现代 Python 类型提示、渴望彻底告别手动写接口文档和参数校验的开发者。</li>
</ol>
<p><strong>结语</strong>：没有最好的框架，只有最契合业务场景的武器。了解它们的长短板，才能在系统架构中做到游刃有余！</p>]]></description>
    <pubDate>Wed, 21 Oct 2026 10:53:21 +0800</pubDate>
    <dc:creator>刘小猪</dc:creator>
    <guid>https://blog.liuxiaozhu.cn/?post=9</guid>
</item>
<item>
    <title>Linux高阶运维与性能调优核心命令深度解析</title>
    <link>https://blog.liuxiaozhu.cn/?post=8</link>
    <description><![CDATA[<h2>前言</h2><p>在掌握了 <code>cd</code>、<code>ls</code>、<code>grep</code> 等基础命令之后，面对线上高并发环境下的性能瓶颈、内存泄漏、网络丢包或海量日志分析时，我们需要更加深入、底层的 Linux 高阶工具。本文将系统梳理生产环境中资深运维与研发人员必备的 Linux 高阶命令。</p><h3>一、文本三剑客进阶与批处理工具</h3><ul><li><code>awk</code>：强大的流式文本格式化与处理语言。<ul><li>统计日志中访问频次最高的 IP：<br/><code>awk '{print $1}' access.log | sort | uniq -c | sort -nr | head -n 10</code></li><li>按条件汇总数值：<br/><code>awk -F',' '$3 > 100 {sum+=$3} END {print "Total:", sum}' data.csv</code></li></ul></li><li><code>sed</code>：流编辑器，擅长正则替换与流式过滤。<ul><li>全局替换并直接修改文件：<code>sed -i 's/old_text/new_text/g' config.conf</code></li><li>删除空白行或注释行：<code>sed -i '/^#/d; /^$/d' nginx.conf</code></li></ul></li><li><code>xargs</code>：参数转换与并发执行。<ul><li>安全删除匹配文件（避免参数过长错误）：<br/><code>find /tmp -name "*.log" -print0 | xargs -0 rm -f</code></li><li>多进程并发任务：<br/><code>cat url_list.txt | xargs -n 1 -P 4 curl -s -O</code></li></ul></li></ul><h3>二、系统性能瓶颈排查与深度监控</h3><ul><li><code>vmstat</code>：综合查看虚拟内存、进程、CPU 活动与系统上下文切换。<ul><li>监控周期 1 秒，输出 5 次：<code>vmstat 1 5</code></li><li>重点指标：<code>r</code>（就绪队列进程数）、<code>cs</code>（上下文切换次数）、<code>si/so</code>（Swap换入换出，非0通常预示内存严重不足）。</li></ul></li><li><code>iostat</code>：深度磁盘 I/O 吞吐与等待分析。<ul><li>查看扩展指标：<code>iostat -xz 1</code></li><li>重点指标：<code>%util</code>（磁盘忙碌比例接近100%说明I/O瓶颈）、<code>await</code>（平均等待响应时间）。</li></ul></li><li><code>pidstat</code>：多维度分析指定进程的 CPU、内存、I/O 细粒度资源。<ul><li>排查哪个进程在疯狂写入磁盘：<code>pidstat -d 1</code></li><li>监控进程上下文切换：<code>pidstat -w -p &lt;PID&gt; 1</code></li></ul></li><li><code>mpstat</code>：多核 CPU 负载均衡情况追踪。<ul><li>查看各核使用率：<code>mpstat -P ALL 1</code></li></ul></li></ul><h3>三、系统调用追踪与故障诊断</h3><ul><li><code>strace</code>：跟踪进程与 Linux 内核交互的系统调用与信号。<ul><li>定位进程卡死在哪个系统调用：<code>strace -p &lt;PID&gt; -T -tt</code></li><li>统计系统调用耗时排行：<code>strace -c -p &lt;PID&gt;</code></li></ul></li><li><code>lsof</code>：列出当前系统打开的所有文件及套接字。<ul><li>排查特定端口被谁占用：<code>lsof -i :8080</code></li><li>排查已删除但未释放磁盘空间的大文件：<code>lsof | grep deleted</code></li><li>查看某个目录正在被哪些进程占用：<code>lsof +D /var/log</code></li></ul></li><li><code>journalctl</code>：现代 systemd 日志检索利器。<ul><li>实时追踪特定服务日志：<code>journalctl -u nginx.service -f</code></li><li>查看本次启动以来的致命错误：<code>journalctl -p err..emerg -b</code></li></ul></li></ul><h3>四、网络高阶调试与抓包分析</h3><ul><li><code>tcpdump</code>：底层网络抓包与协议分析。<ul><li>抓取指定网卡、特定端口的 TCP 数据包：<br/><code>tcpdump -i eth0 -nn -A 'tcp port 80 and host 192.168.1.50'</code></li><li>抓包保存为 pcap 文件供 Wireshark 分析：<br/><code>tcpdump -i any -w trace.pcap -c 1000</code></li></ul></li><li><code>ss</code>：替代 netstat 的高性能套接字统计。<ul><li>排查处于 TIME-WAIT 或 CLOSE-WAIT 的连接数：<br/><code>ss -s</code> 或 <code>ss -ant state close-wait</code></li></ul></li><li><code>nc</code> (netcat)：瑞士军刀级网络调试工具。<ul><li>快速测试远程端口是否开放：<code>nc -zv 192.168.1.100 3306</code></li><li>在服务器之间建立简易数据传输通道或临时监听端口。</li></ul></li></ul><h2>结语</h2><p>熟练运用 <code>awk/sed</code> 结合 <code>vmstat</code>、<code>iostat</code>、<code>strace</code>、<code>tcpdump</code> 等命令，可以让你在面对线上生产事故、服务突发异常或高并发性能调优时，快速定位系统瓶颈与代码根因。</p>]]></description>
    <pubDate>Mon, 12 Oct 2026 09:51:15 +0800</pubDate>
    <dc:creator>刘小猪</dc:creator>
    <guid>https://blog.liuxiaozhu.cn/?post=8</guid>
</item>
<item>
    <title>Linux常用基础命令全指南</title>
    <link>https://blog.liuxiaozhu.cn/?post=7</link>
    <description><![CDATA[<h2>前言</h2><p>Linux 是目前服务器、云计算及开发领域最常用的操作系统之一。掌握 Linux 的常用基础命令，能够大幅提升开发与运维效率。本文将系统性地整理 Linux 中高频实用的命令，供大家学习与查阅。</p><h3>一、文件与目录操作</h3><ul><li><code>ls</code>：列出目录内容。常用参数：<code>ls -l</code>（详细列表）、<code>ls -a</code>（显示隐藏文件）、<code>ls -lh</code>（以人类可读方式显示文件大小）。</li><li><code>cd</code>：切换工作目录。例如：<code>cd /var/log</code>、<code>cd ..</code>（返回上一级目录）、<code>cd ~</code>（返回用户主目录）。</li><li><code>pwd</code>：显示当前所在的工作目录的绝对路径。</li><li><code>mkdir</code>：创建新目录。例如：<code>mkdir -p project/src</code>（递归创建多级目录）。</li><li><code>rm</code>：删除文件或目录。例如：<code>rm file.txt</code>，递归强制删除目录使用 <code>rm -rf dir_name</code>（<strong>请谨慎使用</strong>）。</li><li><code>cp</code>：复制文件或目录。例如：<code>cp file1.txt file2.txt</code>，复制目录加 <code>-r</code> 参数。</li><li><code>mv</code>：移动文件或重命名。例如：<code>mv old.txt new.txt</code>。</li></ul><h3>二、文本查看与编辑</h3><ul><li><code>cat</code>：查看文件内容。例如：<code>cat file.txt</code>。</li><li><code>less</code> / <code>more</code>：分页查看大文件内容，支持上下翻页与搜索。</li><li><code>head</code> / <code>tail</code>：查看文件开头或结尾内容。常用：<code>tail -f access.log</code>（实时查看日志更新）。</li><li><code>grep</code>：在文本中搜索指定模式。例如：<code>grep "error" app.log</code>。</li><li><code>vim</code> / <code>nano</code>：终端常用的文本编辑器。</li></ul><h3>三、系统状态与进程管理</h3><ul><li><code>ps</code>：查看当前进程快照。常用：<code>ps aux | grep nginx</code>。</li><li><code>top</code> / <code>htop</code>：动态查看系统资源占用情况（CPU、内存、进程等）。</li><li><code>kill</code>：终止进程。例如：<code>kill -9 <PID></code>（强制杀死指定PID的进程）。</li><li><code>df -h</code>：查看磁盘分区使用情况。</li><li><code>free -h</code>：查看系统内存使用情况。</li><li><code>systemctl</code>：系统服务管理工具。例如：<code>systemctl status nginx</code>（查看服务状态）、<code>systemctl restart nginx</code>（重启服务）。</li></ul><h3>四、网络与远程连接</h3><ul><li><code>ping</code>：测试网络连通性。例如：<code>ping google.com</code>。</li><li><code>curl</code> / <code>wget</code>：网络请求与文件下载工具。例如：<code>curl -I https://example.com</code>。</li><li><code>netstat</code> / <code>ss</code>：查看网络端口监听情况。常用：<code>ss -tulpn</code>。</li><li><code>ssh</code>：远程安全登录。例如：<code>ssh user@192.168.1.100</code>。</li></ul><h3>五、权限与用户管理</h3><ul><li><code>chmod</code>：修改文件或目录权限。例如：<code>chmod 755 script.sh</code>。</li><li><code>chown</code>：修改文件所有者与所属组。例如：<code>chown www:www -R /var/www/html</code>。</li><li><code>sudo</code>：以超级管理员权限执行命令。</li></ul><p>熟练使用这些基本命令是开启 Linux 之旅的第一步，建议在日常开发中多加练习与积累！</p>]]></description>
    <pubDate>Mon, 12 Oct 2026 09:49:31 +0800</pubDate>
    <dc:creator>刘小猪</dc:creator>
    <guid>https://blog.liuxiaozhu.cn/?post=7</guid>
</item>
<item>
    <title>告别后台常驻：Telegram 专属轻量代理 MTProxy 搭建与应用指南</title>
    <link>https://blog.liuxiaozhu.cn/?post=6</link>
    <description><![CDATA[<p>在日常使用即时通讯工具时，网络连接的便捷度往往决定了使用体验。对于 Telegram 用户而言，传统的全流量代理方案虽然通用，但在移动端却显得有些繁重。专为 Telegram 协议量身定制的 <strong>MTProxy（MTProto Proxy）</strong>，为轻量化、无缝接入提供了一个优雅的解法。</p>
<hr />
<h2>为什么选择 MTProxy？</h2>
<p>MTProxy 的核心特点在于“专款专用”：它在服务端做了严格限制，仅允许客户端与 Telegram 官方服务器之间建立通信。相比于全局代理工具，它的优势主要体现在以下两个场景：</p>
<h3>1. 移动端即开即用，体验媲美本土 IM</h3>
<p>在桌面端，许多人习惯让网络代理开机自启并长期驻留后台；但对移动端用户来说，频繁开启或后台常驻代理软件不仅消耗额外电量，还容易打乱其他应用的直连网络环境。<br />
配置 MTProxy 后，Telegram 客户端本身即可直接维持独立代理通道。无需在系统层面开启任何辅助软件，点开即聊，收发消息就像使用常规 IM 工具一样顺滑。</p>
<h3>2. 极简的“零门槛”分享体验</h3>
<p>如果你曾试图向朋友推荐 Telegram，往往会卡在第一步：“先下载这个代理工具，配置这个节点，再打开 TG……”。<br />
而使用 MTProxy，只需给好友发送一条 <code>tg://proxy?...</code> 格式的专用链接，对方在应用内一键点击即可完成配置，大幅降低了跨平台交流的门槛。</p>
<p>此外，作为官方协议支持的解决方案，MTProxy 占用的系统资源极低，在低配置 VPS 上也能游刃有余地稳定运行。</p>
<hr />
<h2>服务端安装部署</h2>
<p>借助开源管理脚本，可以在 Linux 服务器上快速部署 MTProxy 服务。</p>
<h3>1. 获取并执行安装脚本</h3>
<p>在终端中执行以下命令下载并运行安装向导：</p>
<pre><code class="language-bash">wget -N --no-check-certificate https://raw.githubusercontent.com/ToyoDAdoubi/doubi/master/mtproxy.sh &amp;&amp; chmod +x mtproxy.sh &amp;&amp; bash mtproxy.sh</code></pre>
<h3>2. 交互式安装</h3>
<p>脚本启动后会显示功能菜单，输入 <code>1</code> 并按回车，按照提示配置端口和密钥即可自动完成编译与部署。</p>
<hr />
<h2>日常管理与维护</h2>
<p>后续如需管理服务，可随时在脚本目录下执行：</p>
<pre><code class="language-bash">./mtproxy.sh</code></pre>
<p>管理菜单涵盖了常用的运维功能：</p>
<ul>
<li><strong>查看账号信息</strong>：获取供客户端连接的配置参数或一键导入链接。</li>
<li><strong>启停与重启</strong>：管理后台服务运行状态。</li>
<li><strong>查看连接与日志</strong>：排查连接异常与性能状况。</li>
</ul>
<h3>常用系统命令与文件路径</h3>
<p>如果你更习惯使用标准服务管理命令，可以直接通过系统服务进行操作：</p>
<table>
<thead>
<tr>
<th style="text-align: left;">操作</th>
<th style="text-align: left;">命令</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left;"><strong>启动服务</strong></td>
<td style="text-align: left;"><code>/etc/init.d/mtproxy start</code></td>
</tr>
<tr>
<td style="text-align: left;"><strong>停止服务</strong></td>
<td style="text-align: left;"><code>/etc/init.d/mtproxy stop</code></td>
</tr>
<tr>
<td style="text-align: left;"><strong>重启服务</strong></td>
<td style="text-align: left;"><code>/etc/init.d/mtproxy restart</code></td>
</tr>
<tr>
<td style="text-align: left;"><strong>运行状态</strong></td>
<td style="text-align: left;"><code>/etc/init.d/mtproxy status</code></td>
</tr>
</tbody>
</table>
<ul>
<li><strong>安装目录</strong>：<code>/usr/local/mtproxy</code></li>
<li><strong>配置文件</strong>：<code>/usr/local/mtproxy/mtproxy.conf</code></li>
<li><strong>日志文件</strong>：<code>/usr/local/mtproxy/mtproxy.log</code></li>
</ul>
<hr />
<h2>客户端接入方式</h2>
<p>确保 Telegram 客户端已更新至支持 MTProto 代理的现代版本后：</p>
<ol>
<li><strong>一键导入</strong>：通过脚本菜单选择“查看 账号信息”，复制生成的形如 <code>tg://proxy?server=...&amp;port=...&amp;secret=...</code> 链接，直接在 Telegram 内发送并点击，应用将自动弹出配置确认窗口。</li>
<li><strong>手动配置</strong>：进入客户端的 <strong>设置（Settings）</strong> -&gt; <strong>数据与存储（Data and Storage）</strong> -&gt; <strong>代理设置（Proxy Settings）</strong>，添加代理类型为 <strong>MTProto Proxy</strong>，填入对应的服务器 IP、端口及密钥（Secret）即可。</li>
</ol>]]></description>
    <pubDate>Sun, 11 Oct 2026 01:10:52 +0800</pubDate>
    <dc:creator>刘小猪</dc:creator>
    <guid>https://blog.liuxiaozhu.cn/?post=6</guid>
</item>
<item>
    <title>OpenClaw：经典游戏 Captain Claw 的开源重生</title>
    <link>https://blog.liuxiaozhu.cn/?post=5</link>
    <description><![CDATA[<h2>什么是 OpenClaw？</h2><p>OpenClaw 是一个开源项目，旨在重新实现经典横版动作游戏 Captain Claw（1997 年 Monolith Productions 出品的海盗题材平台游戏）。它的目标不是重做游戏资源，而是用现代开源引擎复刻原版游戏的运行逻辑，让开发者可以在 Windows、Linux 和 macOS 等现代平台上运行原始游戏文件。</p><h2>为什么要玩 Captain Claw？</h2><p>Captain Claw 曾是许多玩家童年的回忆：一只名为 William Morgan 的海盗猫，为了争夺黄金鸡腿而踏上冒险旅程。游戏以其流畅的动作、丰富的关卡和独特的氛围著称。但随着技术演进，原版程序越来越难以在新系统上运行，这正是 OpenClaw 存在的意义。</p><h2>OpenClaw 的核心价值</h2><ul><li>开源免费：任何人都可以查看代码、参与贡献。</li><li>跨平台支持：让经典游戏摆脱对老旧 Windows 的依赖。</li><li>保留原版体验：使用原版资源文件，关卡、音乐和画面保持原貌。</li><li>可扩展性：为 MOD、关卡编辑和引擎改进提供了基础。</li></ul><h2>如何开始使用</h2><p>要运行 OpenClaw，你通常需要：1）获取 OpenClaw 源码或编译好的版本；2）准备 Captain Claw 原版的资源文件；3）按照官方说明进行配置和启动。由于涉及原版游戏版权，资源文件需要合法获取。</p><h2>结语</h2><p>OpenClaw 是经典游戏保存与传承的典范。通过开源社区的努力，老游戏不仅得以在新技术环境下延续生命，也为后来的开发者提供了学习平台游戏实现与 C++ 项目架构的宝贵样本。</p>]]></description>
    <pubDate>Fri, 09 Oct 2026 07:59:44 +0800</pubDate>
    <dc:creator>刘小猪</dc:creator>
    <guid>https://blog.liuxiaozhu.cn/?post=5</guid>
</item>
<item>
    <title>Linux 系统安装部署 Docker 完全指南</title>
    <link>https://blog.liuxiaozhu.cn/?post=4</link>
    <description><![CDATA[<h1>Linux 系统安装部署 Docker 完全指南</h1>
<p>Docker 是目前最主流的容器化技术，基于 Linux 内核的命名空间与控制组（cgroups）实现轻量级虚拟化，让应用及其依赖打包为镜像，秒级启动、跨环境一致运行。本指南覆盖从安装、配置、运行到安全加固与故障排查的全流程。</p>
<hr />
<h2>一、Docker 核心概念</h2>
<ul>
<li><strong>镜像（Image）</strong>：只读模板，包含运行应用所需的文件系统、依赖与配置。</li>
<li><strong>容器（Container）</strong>：镜像的运行实例，拥有独立网络、进程空间与文件系统视图。</li>
<li><strong>仓库（Registry）</strong>：集中存放和分发镜像，如 Docker Hub、私有 Harbor。</li>
<li><strong>Docker Engine</strong>：运行时核心，包含 <code>dockerd</code> 守护进程与 <code>containerd</code>、<code>runc</code> 容器运行时。</li>
</ul>
<hr />
<h2>二、安装前检查</h2>
<pre><code class="language-bash"># 1. 确认内核版本需 &gt;= 3.10
uname -r

# 2. 确认发行版与架构
cat /etc/os-release
arch

# 3. 卸载旧版本（CentOS/RHEL）
sudo yum remove -y docker docker-client docker-common docker-engine docker-selinux docker-ce containerd.io podman

# 4. 卸载旧版本（Ubuntu/Debian）
sudo apt remove -y docker docker.io containerd runc</code></pre>
<hr />
<h2>三、安装方式</h2>
<h3>3.1 官方一键脚本（推荐新手快速体验）</h3>
<pre><code class="language-bash">curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh</code></pre>
<h3>3.2 通过发行版仓库安装</h3>
<h4>CentOS / RHEL / Rocky / AlmaLinux</h4>
<pre><code class="language-bash"># 安装 yum 工具
sudo yum install -y yum-utils device-mapper-persistent-data lvm2

# 添加 Docker 官方仓库
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

# 安装 Docker Engine 全家桶
sudo yum install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin</code></pre>
<h4>Ubuntu / Debian</h4>
<pre><code class="language-bash"># 安装依赖
sudo apt update
sudo apt install -y ca-certificates curl gnupg lsb-release

# 添加 Docker 官方 GPG 密钥
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/$(lsb_release -is | tr '[:upper:]' '[:lower:]')/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

# 添加源
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/$(lsb_release -is | tr '[:upper:]' '[:lower:]') $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list

# 安装
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin</code></pre>
<hr />
<h2>四、启动服务并验证</h2>
<pre><code class="language-bash"># 启动并设置开机自启
sudo systemctl enable --now docker

# 检查状态
sudo systemctl status docker

# 查看版本信息
docker version

# 运行测试容器
docker run --rm hello-world</code></pre>
<p>输出 <code>Hello from Docker!</code> 即表示安装与网络正常。</p>
<hr />
<h2>五、配置镜像加速与守护进程</h2>
<p>国内访问 Docker Hub 较慢，建议配置镜像加速。</p>
<pre><code class="language-bash">sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json &lt;&lt;'EOF'
{
  "registry-mirrors": [
    "https://docker.m.daocloud.io",
    "https://docker.1panel.live"
  ],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m",
    "max-file": "3"
  },
  "storage-driver": "overlay2",
  "live-restore": true
}
EOF

# 重启生效
sudo systemctl daemon-reload
sudo systemctl restart docker</code></pre>
<blockquote>
<p><code>live-restore: true</code> 允许守护进程重启时容器继续运行，生产环境强烈建议开启。</p>
</blockquote>
<hr />
<h2>六、免 sudo 运行 Docker</h2>
<pre><code class="language-bash"># 将当前用户加入 docker 组
sudo usermod -aG docker $USER

# 重新登录会话生效
newgrp docker

# 验证
docker ps</code></pre>
<blockquote>
<p>安全提示：加入 docker 组等价于获得 root 权限，共享主机需谨慎。</p>
</blockquote>
<hr />
<h2>七、常用命令速查</h2>
<pre><code class="language-bash"># 拉取与镜像
docker pull nginx:latest
docker images
docker rmi nginx:latest

# 容器生命周期
docker run -d --name web -p 80:80 nginx
docker ps          # 查看运行中的容器
docker ps -a       # 查看所有容器
docker stop web
docker rm web

# 进入容器
docker exec -it web /bin/sh

# 查看日志
docker logs -f --tail=100 web

# 复制文件
docker cp web:/var/log/nginx/error.log ./error.log
docker cp ./index.html web:/usr/share/nginx/html/index.html

# 清理未使用的资源
docker system prune -a</code></pre>
<hr />
<h2>八、数据卷与持久化</h2>
<p>容器文件系统是临时的，删除即丢失。使用数据卷（volume）持久化数据。</p>
<pre><code class="language-bash"># 创建命名卷
docker volume create nginx-data

# 运行容器并挂载卷
docker run -d --name web -p 80:80 -v nginx-data:/usr/share/nginx/html nginx

# 绑定挂载宿主机目录（适合开发）
docker run -d --name dev -p 8080:80 -v $(pwd)/html:/usr/share/nginx/html nginx

# 查看与管理卷
docker volume ls
docker volume inspect nginx-data
docker volume rm nginx-data</code></pre>
<hr />
<h2>九、网络模型</h2>
<p>Docker 默认桥接网络实现容器互联。</p>
<pre><code class="language-bash"># 查看内置网络
docker network ls

# 创建自定义网络
docker network create --driver bridge mynet

# 容器加入网络后可通过容器名互访
docker run -d --name app --network mynet nginx:alpine
docker exec -it app ping web</code></pre>
<p>驱动类型：</p>
<ul>
<li><code>bridge</code>：单机默认，隔离性好。</li>
<li><code>host</code>：使用宿主机网络栈，性能高但无隔离。</li>
<li><code>overlay</code>：Swarm 多主机互联。</li>
<li><code>macvlan</code>：容器直接获得二层物理网 IP。</li>
</ul>
<hr />
<h2>十、Dockerfile 构建自定义镜像</h2>
<p>以构建一个静态站点为例：</p>
<pre><code class="language-bash">mkdir mysite &amp;&amp; cd mysite</code></pre>
<p>创建 <code>index.html</code>：</p>
<pre><code class="language-html">&lt;h1&gt;Hello Docker&lt;/h1&gt;</code></pre>
<p>创建 <code>Dockerfile</code>：</p>
<pre><code class="language-dockerfile">FROM nginx:alpine
LABEL maintainer="you@example.com"
COPY index.html /usr/share/nginx/html/index.html
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]</code></pre>
<p>构建与运行：</p>
<pre><code class="language-bash">docker build -t mysite:1.0 .
docker run -d -p 8000:80 mysite:1.0</code></pre>
<p><strong>多阶段构建</strong>（减小体积）：</p>
<pre><code class="language-dockerfile"># 编译阶段
FROM golang:1.22 AS builder
WORKDIR /app
COPY go.mod go.sum ./
RUN go mod download
COPY . .
RUN CGO_ENABLED=0 GOOS=linux go build -o myapp .

# 运行阶段
FROM alpine:3.19
WORKDIR /root/
COPY --from=builder /app/myapp .
ENTRYPOINT ["./myapp"]</code></pre>
<hr />
<h2>十一、Docker Compose 多容器编排</h2>
<p>现代版本集成在 <code>docker compose</code> 命令中，无需单独安装 <code>docker-compose</code>。</p>
<pre><code class="language-bash"># 验证
docker compose version</code></pre>
<p>示例 <code>compose.yml</code> 部署 Web + 数据库：</p>
<pre><code class="language-yaml">services:
  web:
    image: nginx:alpine
    ports:
      - "80:80"
    volumes:
      - ./html:/usr/share/nginx/html
    depends_on:
      - db
    networks:
      - backend

  db:
    image: postgres:16-alpine
    environment:
      POSTGRES_USER: app
      POSTGRES_PASSWORD: secret
      POSTGRES_DB: myapp
    volumes:
      - pgdata:/var/lib/postgresql/data
    networks:
      - backend

networks:
  backend:
    driver: bridge

volumes:
  pgdata:</code></pre>
<p>常用命令：</p>
<pre><code class="language-bash">docker compose up -d        # 后台启动
docker compose ps
docker compose logs -f web
docker compose exec db psql -U app
docker compose down -v      # 停止并删除数据卷</code></pre>
<hr />
<h2>十二、资源限制与性能</h2>
<pre><code class="language-bash"># 限制内存 512MB、CPU 1 核
docker run -d --name cgroup --memory=512m --memory-swap=512m --cpus=1 nginx

# 限制进程数
docker run --ulimit nproc=100:200 --ulimit nofile=1024:2048 nginx

# 查看实时资源
docker stats</code></pre>
<hr />
<h2>十三、安全加固建议</h2>
<ul>
<li><strong>最小镜像原则</strong>：优先使用 <code>alpine</code>、<code>distroless</code>、<code>slim</code> 变体。</li>
<li><strong>非 root 用户运行容器</strong>：
<pre><code class="language-dockerfile">FROM node:20-alpine
RUN addgroup -S app &amp;&amp; adduser -S app -G app
USER app</code></pre></li>
<li><strong>不挂载危险路径</strong>：避免 <code>-v /var/run/docker.sock:/var/run/docker.sock</code>、<code>/</code>、<code>/proc</code> 等。</li>
<li><strong>只读根文件系统</strong>：<code>docker run --read-only --tmpfs /tmp nginx</code>。</li>
<li><strong>镜像扫描</strong>：集成 <code>trivy</code> 等扫描工具。</li>
<li><strong>使用 rootless 模式</strong>：让 <code>dockerd</code> 以非特权用户运行，降低内核攻击面。</li>
<li><strong>网络隔离</strong>：仅暴露必要端口，敏感服务使用内部网络，不映射宿主机端口。</li>
</ul>
<hr />
<h2>十四、故障排查</h2>
<h3>1. 服务无法启动，日志查看位置</h3>
<pre><code class="language-bash">journalctl -u docker.service --since "10 min ago"</code></pre>
<h3>2. overlay2 挂载失败</h3>
<p>确认内核模块加载：</p>
<pre><code class="language-bash">lsmod | grep overlay
modprobe overlay</code></pre>
<h3>3. 端口未放行</h3>
<pre><code class="language-bash">sudo firewall-cmd --permanent --add-port=80/tcp &amp;&amp; sudo firewall-cmd --reload
# 或
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT</code></pre>
<h3>4. 容器访问外网失败</h3>
<p>检查 <code>dockerd</code> 是否开启 IPv4 转发：</p>
<pre><code class="language-bash">sysctl net.ipv4.ip_forward</code></pre>
<h3>5. 存储目录权限或空间不足</h3>
<pre><code class="language-bash">docker system df
sudo du -sh /var/lib/docker</code></pre>
<p>迁移数据目录：</p>
<pre><code class="language-bash"># 编辑 /etc/docker/daemon.json
{
  "data-root": "/data/docker"
}
# 重启并迁移旧数据</code></pre>
<hr />
<h2>十五、卸载 Docker</h2>
<pre><code class="language-bash"># 停止服务
sudo systemctl stop docker
sudo systemctl disable docker

# 卸载包（Ubuntu/Debian）
sudo apt purge -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

# 清理数据与配置
sudo rm -rf /var/lib/docker /var/lib/containerd /etc/docker
sudo apt autoremove</code></pre>
<hr />
<h2>十六、总结</h2>
<p>Docker 让应用打包、部署与扩容变得简单一致。生产部署建议：</p>
<ol>
<li>使用官方仓库安装并保持版本可控；</li>
<li>配置镜像加速与日志轮转；</li>
<li>优先使用 <code>Dockerfile</code> + <code>compose.yml</code> 固化环境；</li>
<li>重视安全，采用最小权限与镜像扫描；</li>
<li>配合 <code>healthcheck</code>、重启策略与资源限制提升稳定性。</li>
</ol>
<p>进一步可学习 <code>docker context</code>、<code>Docker Swarm</code>、Kubernetes、Podman 与 BuildKit 等进阶主题。</p>
<blockquote>
<p>参考：<a href="https://docs.docker.com/">Docker 官方文档</a></p>
</blockquote>]]></description>
    <pubDate>Tue, 29 Sep 2026 11:35:11 +0800</pubDate>
    <dc:creator>刘小猪</dc:creator>
    <guid>https://blog.liuxiaozhu.cn/?post=4</guid>
</item>
<item>
    <title>Linux 系统安装部署 Nginx 完全指南</title>
    <link>https://blog.liuxiaozhu.cn/?post=3</link>
    <description><![CDATA[<h1>Linux 系统安装部署 Nginx 完全指南</h1>
<p>Nginx（发音同 engine x）是一款高性能的 HTTP 和反向代理服务，同时也支持 IMAP/POP3/SMTP 协议。它以<strong>轻量、高并发、低内存</strong>著称，被广泛应用于 Web 服务器、负载均衡、静态资源服务、SSL 终结等场景。本指南将以实操方式带你从零完成 Nginx 的安装、配置、启动、优化与排错。</p>
<hr />
<h2>一、Nginx 核心特性概览</h2>
<ul>
<li><strong>事件驱动架构</strong>：基于 epoll/kqueue 的高并发模型，单机可承载数万连接。</li>
<li><strong>模块化设计</strong>：HTTP、Stream、Mail 模块灵活组合。</li>
<li><strong>反向代理与负载均衡</strong>：内置 round-robin、ip_hash、least_conn、weighted 等策略。</li>
<li><strong>高可用</strong>：支持 Master-Worker 多进程模型，热加载配置不中断服务。</li>
<li><strong>丰富的生态</strong>：OpenResty、Nginx Unit、Tengine 等衍生方案。</li>
</ul>
<hr />
<h2>二、安装方式选择</h2>
<p>Linux 上安装 Nginx 主要有三种方式：</p>
<table>
<thead>
<tr>
<th>方式</th>
<th>适用场景</th>
<th>优点</th>
<th>缺点</th>
</tr>
</thead>
<tbody>
<tr>
<td>发行版官方仓库</td>
<td>生产环境首选</td>
<td>稳定、易维护</td>
<td>版本偏旧</td>
</tr>
<tr>
<td>Nginx 官方仓库</td>
<td>需要较新版本</td>
<td>版本新、文档全</td>
<td>需额外配置源</td>
</tr>
<tr>
<td>源码编译</td>
<td>需要自定义模块/最小化</td>
<td>灵活可控</td>
<td>维护成本高</td>
</tr>
</tbody>
</table>
<hr />
<h2>三、基于发行版仓库安装</h2>
<h3>3.1 CentOS / RHEL / Rocky / AlmaLinux</h3>
<pre><code class="language-bash"># 安装 EPEL 源（Nginx 在 EPEL 中）
sudo yum install -y epel-release
sudo yum install -y nginx

# 启动并设置开机自启
sudo systemctl enable --now nginx

# 检查状态
sudo systemctl status nginx</code></pre>
<h3>3.2 Ubuntu / Debian</h3>
<pre><code class="language-bash">sudo apt update
sudo apt install -y nginx

sudo systemctl enable --now nginx
sudo systemctl status nginx</code></pre>
<blockquote>
<p>验证安装：浏览器访问 <code>http://服务器IP</code>，看到 Nginx 欢迎页即成功。</p>
</blockquote>
<hr />
<h2>四、基于 Nginx 官方仓库安装（较新版本）</h2>
<h3>CentOS/RHEL</h3>
<pre><code class="language-bash">sudo tee /etc/yum.repos.d/nginx.repo &lt;&lt;'EOF'
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
EOF

sudo yum install -y nginx</code></pre>
<h3>Ubuntu/Debian</h3>
<pre><code class="language-bash"># 添加 GPG 密钥
sudo curl -fsSL https://nginx.org/keys/nginx_signing.key | gpg --dearmor \
    | sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg &gt;/dev/null

# 添加源（以 Ubuntu 22.04 为例）
echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] http://nginx.org/packages/ubuntu jammy nginx" \
    | sudo tee /etc/apt/sources.list.d/nginx.list

sudo apt update
sudo apt install -y nginx</code></pre>
<hr />
<h2>五、源码编译安装（进阶）</h2>
<pre><code class="language-bash"># 安装依赖
sudo yum install -y gcc pcre-devel zlib-devel openssl-devel   # CentOS
# sudo apt install -y build-essential libpcre3 libpcre3-dev zlib1g zlib1g-dev libssl-dev  # Ubuntu

# 下载源码
wget https://nginx.org/download/nginx-1.24.0.tar.gz
tar -xzvf nginx-1.24.0.tar.gz
cd nginx-1.24.0

# 配置编译选项
./configure --prefix=/etc/nginx \
            --sbin-path=/usr/sbin/nginx \
            --conf-path=/etc/nginx/nginx.conf \
            --pid-path=/var/run/nginx.pid \
            --error-log-path=/var/log/nginx/error.log \
            --http-log-path=/var/log/nginx/access.log \
            --with-http_ssl_module \
            --with-http_v2_module \
            --with-http_gzip_static_module \
            --with-http_stub_status_module

make &amp;&amp; sudo make install

# 创建 systemd 服务
sudo tee /etc/systemd/system/nginx.service &lt;&lt;'EOF'
[Unit]
Description=nginx - high performance web server
After=network.target

[Service]
Type=forking
PIDFile=/var/run/nginx.pid
ExecStart=/usr/sbin/nginx -c /etc/nginx/nginx.conf
ExecReload=/bin/kill -s HUP $(cat /var/run/nginx.pid)
ExecStop=/bin/kill -s TERM $(cat /var/run/nginx.pid)

[Install]
WantedBy=multi-user.target
EOF

sudo systemctl daemon-reload
sudo systemctl enable --now nginx</code></pre>
<hr />
<h2>六、目录结构与配置文件解析</h2>
<pre><code class="language-text">/etc/nginx/
├── nginx.conf            # 主配置
├── mime.types            # MIME 类型映射
├── conf.d/               # 站点配置目录
├── sites-available/      # 站点配置（Debian 系）
├── sites-enabled/        # 启用的站点软链接
└── ssl/                  # SSL 证书目录（自建）

/var/log/nginx/           # 日志目录
├── access.log            # 访问日志
└── error.log             # 错误日志

/usr/share/nginx/html/    # 默认 Web 根目录</code></pre>
<h3>主配置 nginx.conf 示例</h3>
<pre><code class="language-nginx">user  nginx;
worker_processes  auto;            # 根据 CPU 核心自动设置
error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;

events {
    worker_connections  10240;     # 单 worker 最大并发
    use epoll;
    multi_accept  on;
}

http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile      on;
    tcp_nopush    on;
    tcp_nodelay   on;
    keepalive_timeout  65;
    server_tokens  off;            # 隐藏版本号

    # 日志格式
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';
    access_log  /var/log/nginx/access.log main;

    # gzip 压缩
    gzip  on;
    gzip_min_length 1k;
    gzip_comp_level 5;
    gzip_types text/plain text/css application/json application/javascript text/xml;

    include /etc/nginx/conf.d/*.conf;
}</code></pre>
<hr />
<h2>七、配置一个站点（反向代理 + SSL）</h2>
<pre><code class="language-nginx"># /etc/nginx/conf.d/example.conf
server {
    listen 80;
    server_name example.com www.example.com;
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl http2;
    server_name example.com www.example.com;

    ssl_certificate     /etc/ssl/example.com/fullchain.pem;
    ssl_certificate_key /etc/ssl/example.com/privkey.pem;
    ssl_protocols       TLSv1.2 TLSv1.3;
    ssl_ciphers         HIGH:!aNULL:!MD5;
    ssl_session_cache   shared:SSL:10m;
    ssl_session_timeout 10m;

    location / {
        proxy_pass http://127.0.0.1:8080;
        proxy_set_header Host              $host;
        proxy_set_header X-Real-IP         $remote_addr;
        proxy_set_header X-Forwarded-For   $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_connect_timeout 5s;
        proxy_read_timeout   30s;
    }

    # 静态资源缓存
    location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg|woff2?)$ {
        root /var/www/static;
        expires 30d;
        add_header Cache-Control "public, immutable";
    }

    # 状态页（仅内网访问）
    location /nginx_status {
        stub_status;
        access_log off;
        allow 127.0.0.1;
        deny all;
    }
}</code></pre>
<h3>负载均衡示例</h3>
<pre><code class="language-nginx">upstream backend {
    least_conn;                     # 最少连接策略
    server 10.0.0.11:8080 weight=3;
    server 10.0.0.12:8080;
    server 10.0.0.13:8080 backup;
    keepalive 32;
}

server {
    listen 80;
    server_name api.example.com;

    location / {
        proxy_pass http://backend;
        proxy_http_version 1.1;
        proxy_set_header Connection "";
    }
}</code></pre>
<hr />
<h2>八、常用运维命令</h2>
<pre><code class="language-bash"># 语法检查（强烈推荐每次修改后执行）
sudo nginx -t

# 重新加载配置（热加载，不中断服务）
sudo nginx -s reload
# 或：sudo systemctl reload nginx

# 平滑关闭
sudo nginx -s quit

# 立即关闭
sudo nginx -s stop

# 查看版本与编译参数
nginx -V

# 实时分析访问日志
sudo tail -f /var/log/nginx/access.log | awk '{print $7}' | sort | uniq -c | sort -rn | head -20</code></pre>
<hr />
<h2>九、性能优化关键参数</h2>
<table>
<thead>
<tr>
<th>参数</th>
<th>说明</th>
<th>推荐值</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>worker_processes</code></td>
<td>工作进程数</td>
<td><code>auto</code></td>
</tr>
<tr>
<td><code>worker_connections</code></td>
<td>单 worker 连接数</td>
<td>10240+</td>
</tr>
<tr>
<td><code>sendfile on;</code></td>
<td>零拷贝发送文件</td>
<td><code>on</code></td>
</tr>
<tr>
<td><code>tcp_nopush on;</code></td>
<td>等待数据包满再发送</td>
<td><code>on</code></td>
</tr>
<tr>
<td><code>keepalive_timeout</code></td>
<td>长连接超时</td>
<td>65</td>
</tr>
<tr>
<td><code>open_file_cache</code></td>
<td>文件描述符缓存</td>
<td><code>max=10000 inactive=20s;</code></td>
</tr>
<tr>
<td><code>client_max_body_size</code></td>
<td>上传最大体</td>
<td>视业务</td>
</tr>
<tr>
<td><code>gzip</code></td>
<td>压缩</td>
<td><code>on</code>, level 4-6</td>
</tr>
</tbody>
</table>
<p>系统层面配合优化：</p>
<pre><code class="language-bash"># 文件描述符上限
ulimit -n 65535
echo "* soft nofile 65535" &gt;&gt; /etc/security/limits.conf

# TCP 参数
sysctl -w net.core.somaxconn=65535
sysctl -w net.ipv4.tcp_max_syn_backlog=65535
sysctl -w net.ipv4.tcp_tw_reuse=1
sysctl -w net.ipv4.ip_local_port_range="1024 65535"</code></pre>
<hr />
<h2>十、常见问题排错</h2>
<h3>1. <code>nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)</code></h3>
<p>说明 80 端口被占用：</p>
<pre><code class="language-bash">sudo lsof -i :80
sudo systemctl stop httpd   # 若 Apache 冲突</code></pre>
<h3>2. SELinux 拦截导致 502</h3>
<pre><code class="language-bash">sudo getenforce
sudo setsebool -P httpd_can_network_connect 1
# 或为特定端口
sudo semanage port -a -t http_port_t -p tcp 8080</code></pre>
<h3>3. <code>Permission denied</code> 写日志/文件</h3>
<p>确保 nginx 用户对 <code>/var/log/nginx</code> 与 Web 根目录有读写权限：</p>
<pre><code class="language-bash">sudo chown -R nginx:nginx /var/www
sudo chmod 755 /var/www</code></pre>
<h3>4. 防火墙未放行</h3>
<pre><code class="language-bash"># CentOS
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --reload

# Ubuntu
sudo ufw allow 'Nginx Full'</code></pre>
<h3>5. 413 Request Entity Too Large</h3>
<p>上传文件过大：</p>
<pre><code class="language-nginx">client_max_body_size 100m;</code></pre>
<hr />
<h2>十一、安全加固建议</h2>
<ul>
<li>关闭版本号：<code>server_tokens off;</code></li>
<li>限制请求方法：
<pre><code class="language-nginx">if ($request_method !~ ^(GET|HEAD|POST)$) { return 405; }</code></pre></li>
<li>防止目录穿越：避免使用 <code>root</code> 配合用户输入。</li>
<li>启用 HSTS：<code>add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;</code></li>
<li>隐藏敏感路径：
<pre><code class="language-nginx">location ~ /\.\(git|svn|env) { deny all; }</code></pre></li>
<li>限制并发与速率：
<pre><code class="language-nginx">limit_req_zone $binary_remote_addr zone=one:10m rate=10r/s;
limit_conn_zone $binary_remote_addr zone=addr:10m;
location / { limit_req zone=one burst=20 nodelay; limit_conn addr 10; }</code></pre></li>
</ul>
<hr />
<h2>十二、总结</h2>
<p>至此，你已经掌握了在主流 Linux 发行版上安装、配置、优化与排错 Nginx 的完整流程。建议在生产环境使用前：</p>
<ol>
<li>始终运行 <code>nginx -t</code> 检查配置；</li>
<li>使用 Let's Encrypt 或商业 CA 部署 HTTPS；</li>
<li>监控 access/error 日志与 <code>/nginx_status</code>；</li>
<li>定期备份 <code>/etc/nginx/</code> 目录。</li>
</ol>
<p>后续可进一步探索 OpenResty（Lua 扩展）、Nginx Unit、Tengine、Ingress-Nginx（Kubernetes）等生态，构建更复杂的流量治理体系。</p>
<blockquote>
<p>参考资料：<a href="https://nginx.org/en/docs/">Nginx 官方文档</a>、各发行版官方仓库。</p>
</blockquote>]]></description>
    <pubDate>Tue, 29 Sep 2026 11:32:39 +0800</pubDate>
    <dc:creator>刘小猪</dc:creator>
    <guid>https://blog.liuxiaozhu.cn/?post=3</guid>
</item>
<item>
    <title>Linux 系统安装部署 MariaDB 数据库教程</title>
    <link>https://blog.liuxiaozhu.cn/?post=2</link>
    <description><![CDATA[<p>MariaDB 是 MySQL 的一个高性能、开源的分支，它以兼容 MySQL 著称，同时提供了更高的稳定性和功能扩展性。在 Linux 服务器环境中部署 MariaDB 是许多 Web 开发人员和运维人员的基础技能。本文将手把手教你在主流的 Linux 发行版（如 Ubuntu/Debian 和 CentOS/RHEL）上安装、初始化配置 MariaDB，并创建数据库和用户。</p>
<h2>一、环境准备</h2>
<p>本教程以 Ubuntu Server 20.04/22.04 和 CentOS 8/Stream 9 为例。操作前请确保你拥有 root 权限或 sudo 权限。</p>
<h2>二、安装 MariaDB</h2>
<h3>1. Ubuntu/Debian 系统</h3>
<p>Ubuntu 源中通常已包含 MariaDB，可直接通过 APT 包管理器安装。</p>
<pre><code>sudo apt update
sudo apt install mariadb-server mariadb-client</code></pre>
<h3>2. CentOS/RHEL 系统</h3>
<p>CentOS 可以使用 YUM/DNF 包管理器安装。较新的 RHEL 9/CentOS Stream 9 默认源已提供 MariaDB。</p>
<pre><code>sudo dnf update
sudo dnf install mariadb-server mariadb-client</code></pre>
<h2>三、启动并设置开机自启</h2>
<p>大多数现代 Linux 发行版安装完成后会自动启动 MariaDB 服务，但我们可以手动确认并设置开机自启。</p>
<pre><code># 启动服务
sudo systemctl start mariadb

# 设置开机自启
sudo systemctl enable mariadb

# 查看服务状态
sudo systemctl status mariadb</code></pre>
<h2>四、安全初始化配置</h2>
<p>MariaDB 提供了一个交互式的安全脚本，用于设置 root 密码、移除匿名用户、禁用远程 root 登录等，强烈建议执行。</p>
<pre><code>sudo mysql_secure_installation</code></pre>
<p>脚本会依次询问几个问题：</p>
<ul>
<li><strong>Set root password?</strong> 设置 root 密码。选择 Y，然后输入新密码。</li>
<li><strong>Remove anonymous users?</strong> 移除匿名用户。选择 Y。</li>
<li><strong>Disallow root login remotely?</strong> 禁止 root 远程登录。选择 Y。</li>
<li><strong>Remove test database?</strong> 移除测试数据库。选择 Y。</li>
<li><strong>Reload privilege tables now?</strong> 重新加载权限表。选择 Y。</li>
</ul>
<h2>五、连接数据库</h2>
<p>使用 mysql 客户端连接 MariaDB。如果是系统本地的 root 用户，通常可以使用 socket 认证直接登录；如果是远程用户或密码认证，则需提供密码。</p>
<pre><code># 本地 root 登录
sudo mysql -u root

# 或使用密码登录
mysql -u root -p</code></pre>
<h2>六、创建数据库和用户</h2>
<p>登录后，我们可以创建一个新的数据库和一个权限受限的应用用户。</p>
<pre><code># 创建数据库
CREATE DATABASE mydb CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

# 创建用户，并限制其只能从 localhost 或特定 IP 访问
CREATE USER 'myuser'@'localhost' IDENTIFIED BY 'your_password';
CREATE USER 'myuser'@'192.168.1.%' IDENTIFIED BY 'your_password';

# 授予用户对该数据库的特定权限（如全部权限，生产环境建议最小化）
GRANT ALL PRIVILEGES ON mydb.* TO 'myuser'@'localhost';
GRANT ALL PRIVILEGES ON mydb.* TO 'myuser'@'192.168.1.%';

# 刷新权限
FLUSH PRIVILEGES;</code></pre>
<h2>七、验证配置</h2>
<p>退出 root 会话，使用新创建的用户连接数据库，验证是否成功。</p>
<pre><code>mysql -u myuser -p mydb</code></pre>
<h2>八、可选：配置防火墙</h2>
<p>如果你需要远程访问 MariaDB（默认端口 3306），请确保防火墙开放该端口。但请注意，生产环境中开放数据库端口存在安全风险，建议通过 VPN 或堡垒机访问，或仅对可信 IP 开放。</p>
<pre><code># 使用 ufw 为例（Ubuntu）
sudo ufw allow 3306/tcp
sudo ufw reload

# 使用 firewalld 为例（CentOS）
sudo firewall-cmd --zone=public --add-port=3306/tcp --permanent
sudo firewall-cmd --reload</code></pre>
<h2>九、总结</h2>
<p>通过以上步骤，你已成功在 Linux 服务器上安装并部署了 MariaDB，完成了基本的安全加固和用户管理。接下来，你就可以在你的 Web 应用（如 PHP、Python、Java）中连接并使用这个数据库了。建议定期更新 MariaDB 包，并监控服务状态，以确保数据库的安全与稳定运行。</p>]]></description>
    <pubDate>Tue, 29 Sep 2026 00:17:16 +0800</pubDate>
    <dc:creator>刘小猪</dc:creator>
    <guid>https://blog.liuxiaozhu.cn/?post=2</guid>
</item>
</channel>
</rss>