<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <author>
    <name>net06</name>
  </author>
  <generator uri="https://hexo.io/">Hexo</generator>
  <id>https://netguy6.github.io/</id>
  <link href="https://netguy6.github.io/" rel="alternate"/>
  <link href="https://netguy6.github.io/atom.xml" rel="self"/>
  <rights>All rights reserved 2026, net06</rights>
  <subtitle>记录学习的每一点</subtitle>
  <title>net06</title>
  <updated>2026-08-12T10:54:03.692Z</updated>
  <entry>
    <author>
      <name>net06</name>
    </author>
    <category term="博客维护" scheme="https://netguy6.github.io/categories/%E5%8D%9A%E5%AE%A2%E7%BB%B4%E6%8A%A4/"/>
    <category term="Hexo" scheme="https://netguy6.github.io/tags/Hexo/"/>
    <category term="GitHub Pages" scheme="https://netguy6.github.io/tags/GitHub-Pages/"/>
    <category term="测试" scheme="https://netguy6.github.io/tags/%E6%B5%8B%E8%AF%95/"/>
    <content>
      <![CDATA[<h1 id="发布流程测试"><a href="#发布流程测试" class="headerlink" title="发布流程测试"></a>发布流程测试</h1><p>这篇文章用于验证博客从 Markdown 源文件到 GitHub Pages 的完整发布流程。</p><h2 id="本地图片"><a href="#本地图片" class="headerlink" title="本地图片"></a>本地图片</h2><p><img src="/2026/08/12/Hexo%E5%8F%91%E5%B8%83%E6%B5%81%E7%A8%8B%E6%B5%8B%E8%AF%95/deploy-flow.svg" alt="Hexo 到 GitHub Pages 的发布流程图"></p><p>图片保存在与文章同名的资源目录中，并通过相对路径引用。</p><h2 id="检查项"><a href="#检查项" class="headerlink" title="检查项"></a>检查项</h2><ul><li>Front Matter：标题、日期、标签和分类。</li><li>Markdown：标题、列表、表格、引用和链接。</li><li>代码块：Shell 命令高亮与复制按钮。</li><li>本地图片：文章资源目录中的 SVG 文件。</li><li>发布：生成静态页面并推送到 GitHub Pages。</li></ul><blockquote><p>这是一次发布链路验证文章，可在确认结果后由站点维护者决定是否保留。</p></blockquote><h2 id="常用命令"><a href="#常用命令" class="headerlink" title="常用命令"></a>常用命令</h2><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><code class="hljs bash">npm run build<br>npm run deploy<br></code></pre></td></tr></table></figure><table><thead><tr><th>阶段</th><th>预期结果</th></tr></thead><tbody><tr><td>构建</td><td>在 <code>public/</code> 中生成文章及本地图片资源</td></tr><tr><td>部署</td><td>将生成结果推送至 GitHub Pages 仓库的 <code>main</code> 分支</td></tr></tbody></table><p>相关说明见 <a href="https://hexo.io/zh-cn/docs/">Hexo 官方文档</a>。</p>]]>
    </content>
    <id>https://netguy6.github.io/2026/08/12/Hexo%E5%8F%91%E5%B8%83%E6%B5%81%E7%A8%8B%E6%B5%8B%E8%AF%95/</id>
    <link href="https://netguy6.github.io/2026/08/12/Hexo%E5%8F%91%E5%B8%83%E6%B5%81%E7%A8%8B%E6%B5%8B%E8%AF%95/"/>
    <published>2026-08-12T02:00:00.000Z</published>
    <summary>用于验证 Hexo 本地图片、Markdown 渲染和 GitHub Pages 部署的测试文章。</summary>
    <title>Hexo 发布流程测试</title>
    <updated>2026-08-12T10:54:03.692Z</updated>
  </entry>
  <entry>
    <author>
      <name>net06</name>
    </author>
    <category term="linux" scheme="https://netguy6.github.io/categories/linux/"/>
    <category term="CentOS 7" scheme="https://netguy6.github.io/tags/CentOS-7/"/>
    <category term="Apache(httpd)" scheme="https://netguy6.github.io/tags/Apache-httpd/"/>
    <content>
      <![CDATA[<h2 id="一、Apache-概述"><a href="#一、Apache-概述" class="headerlink" title="一、Apache 概述"></a>一、Apache 概述</h2><h3 id="Apache-核心特性"><a href="#Apache-核心特性" class="headerlink" title="Apache 核心特性"></a>Apache 核心特性</h3><ul><li><strong>跨平台</strong>：支持 Linux、Windows、BSD 等，CentOS 7 中默认以 <code>httpd</code> 服务运行；</li><li><strong>虚拟主机</strong>：支持基于域名、IP、端口的多站点部署，一台服务器可托管多个网站；</li><li><strong>模块扩展</strong>：通过动态模块（如 <code>mod_rewrite</code> 重写、<code>mod_ssl</code> 加密）扩展功能；</li><li><strong>安全稳定</strong>：运行于低权限 <code>apache</code> 用户，支持 SELinux 权限控制，减少系统风险。</li></ul><h2 id="二、安装-Apache（httpd）"><a href="#二、安装-Apache（httpd）" class="headerlink" title="二、安装 Apache（httpd）"></a>二、安装 Apache（httpd）</h2><p>CentOS 7 的官方软件仓库已包含 <code>httpd</code>，通过 <code>yum</code> 可一键安装，自动处理依赖关系。</p><h3 id="1-安装-httpd-包"><a href="#1-安装-httpd-包" class="headerlink" title="1. 安装 httpd 包"></a>1. 安装 httpd 包</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-comment"># 1. 更新本地软件包索引（可选，确保安装最新版本）</span><br><span class="hljs-built_in">sudo</span> yum update -y httpd<br><br><span class="hljs-comment"># 2. 安装 httpd 及依赖（包含 Apache 核心服务）</span><br><span class="hljs-built_in">sudo</span> yum install -y httpd<br></code></pre></td></tr></table></figure><h3 id="2-验证安装结果"><a href="#2-验证安装结果" class="headerlink" title="2. 验证安装结果"></a>2. 验证安装结果</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-comment"># 查看 httpd 版本</span><br>httpd -v<br><span class="hljs-comment"># 输出示例：Server version: Apache/2.4.6 (CentOS)</span><br><br><span class="hljs-comment"># 查看 Apache 运行用户与组（安装后自动创建 `apache` 用户/组）</span><br>grep apache /etc/passwd  <span class="hljs-comment"># 输出：apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin</span><br>grep apache /etc/group   <span class="hljs-comment"># 输出：apache:x:48:</span><br></code></pre></td></tr></table></figure><ul><li><code>apache</code> 用户的 shell 为 <code>/sbin/nologin</code>，仅用于运行服务，无法登录系统，提升安全性。</li></ul><h2 id="三、Apache-服务管理"><a href="#三、Apache-服务管理" class="headerlink" title="三、Apache 服务管理"></a>三、Apache 服务管理</h2><p>通过 <code>systemctl</code> 命令管理 httpd 服务，核心操作包括启动、停止、重启、设置开机自启等，需区分“重启”与“重载”的差异（重载不中断现有连接）。</p><h3 id="1-基础服务命令"><a href="#1-基础服务命令" class="headerlink" title="1. 基础服务命令"></a>1. 基础服务命令</h3><table><thead><tr><th>功能描述</th><th>命令</th><th>说明</th></tr></thead><tbody><tr><td>启动服务</td><td><code>sudo systemctl start httpd</code></td><td>首次启动或服务停止后启动</td></tr><tr><td>停止服务</td><td><code>sudo systemctl stop httpd</code></td><td>停止服务，中断所有连接</td></tr><tr><td>重启服务</td><td><code>sudo systemctl restart httpd</code></td><td>停止后重新启动，会中断现有连接（配置文件重大修改时使用）</td></tr><tr><td>重载配置</td><td><code>sudo systemctl reload httpd</code></td><td>不中断连接，仅加载新配置（如虚拟主机、日志路径修改，推荐优先使用）</td></tr><tr><td>开机自启</td><td><code>sudo systemctl enable httpd --now</code></td><td><code>--now</code> 表示立即启动并设置开机自启</td></tr><tr><td>禁止开机自启</td><td><code>sudo systemctl disable httpd</code></td><td>取消开机自启，需手动启动服务</td></tr><tr><td>查看服务状态</td><td><code>sudo systemctl status httpd</code></td><td>查看是否运行（<code>active (running)</code> 为正常）、PID、启动日志</td></tr></tbody></table><h3 id="2-测试配置语法（关键！）"><a href="#2-测试配置语法（关键！）" class="headerlink" title="2. 测试配置语法（关键！）"></a>2. 测试配置语法（关键！）</h3><p>修改任何配置文件后，<strong>必须先测试语法</strong>，避免错误导致服务启动失败：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-comment"># 测试 Apache 配置语法</span><br><span class="hljs-built_in">sudo</span> apachectl configtest<br><span class="hljs-comment"># 输出 `Syntax OK` 表示配置无错；若报错，按提示修改对应文件（如行号、指令错误）</span><br></code></pre></td></tr></table></figure><h2 id="四、Apache-核心配置文件详解"><a href="#四、Apache-核心配置文件详解" class="headerlink" title="四、Apache 核心配置文件详解"></a>四、Apache 核心配置文件详解</h2><p>Apache 的配置文件采用“主配置+分文件”结构，核心目录与文件如下：</p><table><thead><tr><th>路径</th><th>作用描述</th></tr></thead><tbody><tr><td><code>/etc/httpd/conf/httpd.conf</code></td><td>主配置文件，定义全局参数（如监听端口、运行用户、默认根目录）</td></tr><tr><td><code>/etc/httpd/conf.d/</code></td><td>额外配置目录，存放虚拟主机、模块加载等 <code>.conf</code> 文件（自动加载所有 <code>.conf</code>）</td></tr><tr><td><code>/etc/httpd/conf.modules.d/</code></td><td>模块配置目录，定义加载的 Apache 模块（如 <code>mod_php</code>、<code>mod_ssl</code>）</td></tr><tr><td><code>/var/www/html/</code></td><td>默认网站根目录（DocumentRoot），存放静态页面（如 <code>index.html</code>）</td></tr><tr><td><code>/var/log/httpd/</code></td><td>日志目录，包含 <code>access_log</code>（访问日志）和 <code>error_log</code>（错误日志）</td></tr></tbody></table><h3 id="1-主配置文件-httpd-conf-核心指令"><a href="#1-主配置文件-httpd-conf-核心指令" class="headerlink" title="1. 主配置文件 httpd.conf 核心指令"></a>1. 主配置文件 <code>httpd.conf</code> 核心指令</h3><p>先备份默认配置文件，避免修改错误后无法恢复：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-built_in">sudo</span> <span class="hljs-built_in">cp</span> /etc/httpd/conf/httpd.conf /etc/httpd/conf/httpd.conf.bak<br></code></pre></td></tr></table></figure><p>编辑主配置文件 <code>sudo vi /etc/httpd/conf/httpd.conf</code>，关键指令及解释如下：</p><figure class="highlight apache"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br></pre></td><td class="code"><pre><code class="hljs apache"><span class="hljs-comment"># -------------------------- 1. 全局基础配置 --------------------------</span><br><span class="hljs-comment"># Apache 安装根目录（所有配置文件的相对路径基于此）</span><br><span class="hljs-attribute">ServerRoot</span> <span class="hljs-string">&quot;/etc/httpd&quot;</span><br><br><span class="hljs-comment"># 监听端口（默认 80，HTTP 协议；HTTPS 需后续配置 443 端口）</span><br><span class="hljs-attribute">Listen</span> <span class="hljs-number">80</span><br><br><span class="hljs-comment"># Apache 运行的用户与组（低权限用户，避免系统风险）</span><br><span class="hljs-attribute">User</span> apache<br><span class="hljs-attribute">Group</span> apache<br><br><span class="hljs-comment"># 管理员邮箱（错误页面会显示此邮箱，便于用户反馈）</span><br><span class="hljs-attribute">ServerAdmin</span> webmaster@example.com<br><br><span class="hljs-comment"># 服务器名称（消除启动时的“无法确定域名”警告，填写域名或服务器 IP）</span><br><span class="hljs-attribute">ServerName</span> www.example.com:<span class="hljs-number">80</span>  # 若无域名，可填服务器 IP:<span class="hljs-number">80</span>（如 <span class="hljs-number">192.168.1.100:80</span>）<br><br><br><span class="hljs-comment"># -------------------------- 2. 目录权限控制（&lt;Directory&gt; 块） --------------------------</span><br><span class="hljs-comment"># 根目录（/）权限：拒绝所有访问，防止 Apache 泄露系统文件</span><br><span class="hljs-section">&lt;Directory /&gt;</span><br>    <span class="hljs-attribute">AllowOverride</span> None  # 不允许 .htaccess 文件覆盖配置（安全）<br>    <span class="hljs-attribute">Require</span> <span class="hljs-literal">all</span> denied  # 拒绝所有用户访问<br><span class="hljs-section">&lt;/Directory&gt;</span><br><br><span class="hljs-comment"># 默认网站根目录（/var/www）权限：允许所有访问</span><br><span class="hljs-section">&lt;Directory <span class="hljs-string">&quot;/var/www&quot;</span>&gt;</span><br>    <span class="hljs-attribute">AllowOverride</span> None  # 不启用 .htaccess<br>    <span class="hljs-attribute">Require</span> <span class="hljs-literal">all</span> granted  # 允许所有用户访问<br><span class="hljs-section">&lt;/Directory&gt;</span><br><br><span class="hljs-comment"># 具体网站根目录（/var/www/html）权限：支持目录索引和符号链接</span><br><span class="hljs-section">&lt;Directory <span class="hljs-string">&quot;/var/www/html&quot;</span>&gt;</span><br>    <span class="hljs-comment"># Options：目录行为控制</span><br>    <span class="hljs-comment"># Indexes：若目录无 index.html，显示文件列表；</span><br>    <span class="hljs-comment"># FollowSymLinks：允许 Apache 跟随目录内的符号链接</span><br>    <span class="hljs-attribute">Options</span> Indexes FollowSymLinks<br>    <br>    <span class="hljs-attribute">AllowOverride</span> None  # 后续若需 .htaccess，可改为 <span class="hljs-literal">All</span>（需配合 mod_rewrite）<br>    <span class="hljs-attribute">Require</span> <span class="hljs-literal">all</span> granted  # 允许所有访问<br><span class="hljs-section">&lt;/Directory&gt;</span><br><br><br><span class="hljs-comment"># -------------------------- 3. 网站根目录与默认页面 --------------------------</span><br><span class="hljs-comment"># 网站根目录（默认存放静态页面的路径）</span><br><span class="hljs-attribute">DocumentRoot</span> <span class="hljs-string">&quot;/var/www/html&quot;</span><br><br><span class="hljs-comment"># 默认首页（访问目录时优先加载的文件，顺序从左到右）</span><br><span class="hljs-section">&lt;IfModule dir_module&gt;</span><br>    <span class="hljs-attribute">DirectoryIndex</span> index.html index.php  # 先找 index.html，再找 index.php（动态页面后续添加）<br><span class="hljs-section">&lt;/IfModule&gt;</span><br><br><br><span class="hljs-comment"># -------------------------- 4. 日志配置 --------------------------</span><br><span class="hljs-comment"># 错误日志路径（记录服务错误，如启动失败、访问不存在的页面）</span><br><span class="hljs-attribute">ErrorLog</span> <span class="hljs-string">&quot;logs/error_log&quot;</span>  # 相对路径，实际为 /var/log/httpd/error_log<br><br><span class="hljs-comment"># 日志级别（warn：警告及以上错误；debug：调试信息，生产环境不推荐）</span><br><span class="hljs-attribute">LogLevel</span> warn<br><br><span class="hljs-comment"># 访问日志配置（记录所有客户端访问，格式为 &quot;combined&quot;）</span><br><span class="hljs-comment"># combined 格式包含：客户端 IP、访问时间、请求方法、状态码、Referer、User-Agent 等</span><br><span class="hljs-attribute">CustomLog</span> <span class="hljs-string">&quot;logs/access_log&quot;</span> combined  # 实际路径 /var/log/httpd/access_log<br><br><br><span class="hljs-comment"># -------------------------- 5. 加载额外配置文件 --------------------------</span><br><span class="hljs-comment"># 加载模块配置（如 PHP 模块、SSL 模块）</span><br><span class="hljs-attribute">Include</span> conf.modules.d/*.conf<br><br><span class="hljs-comment"># 加载额外配置（如虚拟主机配置，存于 /etc/httpd/conf.d/ 目录）</span><br><span class="hljs-attribute">IncludeOptional</span> conf.d/*.conf  # IncludeOptional：文件不存在时不报错<br></code></pre></td></tr></table></figure><h3 id="2-验证默认站点"><a href="#2-验证默认站点" class="headerlink" title="2. 验证默认站点"></a>2. 验证默认站点</h3><p>启动 httpd 服务后，访问默认网站根目录 <code>/var/www/html</code>，验证基础功能：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-comment"># 1. 启动 httpd 服务</span><br><span class="hljs-built_in">sudo</span> systemctl start httpd<br><br><span class="hljs-comment"># 2. 在默认目录创建测试页面</span><br><span class="hljs-built_in">echo</span> <span class="hljs-string">&quot;&lt;h1&gt;Apache Default Page (CentOS 7)&lt;/h1&gt;&quot;</span> | <span class="hljs-built_in">sudo</span> <span class="hljs-built_in">tee</span> /var/www/html/index.html<br><br><span class="hljs-comment"># 3. 本地测试（服务器上执行，或客户端浏览器访问服务器 IP）</span><br>curl http://localhost  <span class="hljs-comment"># 输出：&lt;h1&gt;Apache Default Page (CentOS 7)&lt;/h1&gt;</span><br></code></pre></td></tr></table></figure><p>客户端浏览器输入 <code>http://服务器IP</code>（如 <code>http://192.168.1.100</code>），应显示测试页面，说明 Apache 基础功能正常。</p><h2 id="五、防火墙与-SELinux-配置（关键！避免访问被拦截）"><a href="#五、防火墙与-SELinux-配置（关键！避免访问被拦截）" class="headerlink" title="五、防火墙与 SELinux 配置（关键！避免访问被拦截）"></a>五、防火墙与 SELinux 配置（关键！避免访问被拦截）</h2><p>CentOS 7 默认启用 <code>firewalld</code> 防火墙和 SELinux 安全机制，若不配置，客户端将无法访问 Apache 服务。</p><h3 id="1-防火墙配置（开放-HTTP-HTTPS-端口）"><a href="#1-防火墙配置（开放-HTTP-HTTPS-端口）" class="headerlink" title="1. 防火墙配置（开放 HTTP&#x2F;HTTPS 端口）"></a>1. 防火墙配置（开放 HTTP&#x2F;HTTPS 端口）</h3><p>HTTP 协议默认使用 80 端口，HTTPS 用 443 端口，通过 <code>firewalld</code> 永久开放：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-comment"># 1. 永久开放 HTTP（80）和 HTTPS（443）服务</span><br><span class="hljs-built_in">sudo</span> firewall-cmd --permanent --zone=public --add-service=http<br><span class="hljs-built_in">sudo</span> firewall-cmd --permanent --zone=public --add-service=https<br><br><span class="hljs-comment"># 2. 重新加载防火墙规则，使配置生效</span><br><span class="hljs-built_in">sudo</span> firewall-cmd --reload<br><br><span class="hljs-comment"># 3. 验证开放的服务（输出应包含 http 和 https）</span><br><span class="hljs-built_in">sudo</span> firewall-cmd --list-services<br></code></pre></td></tr></table></figure><h3 id="2-SELinux-配置（允许-Apache-访问目录和日志）"><a href="#2-SELinux-配置（允许-Apache-访问目录和日志）" class="headerlink" title="2. SELinux 配置（允许 Apache 访问目录和日志）"></a>2. SELinux 配置（允许 Apache 访问目录和日志）</h3><p>SELinux 是 CentOS 7 的强制访问控制机制，默认会拦截 Apache 对自定义目录（如虚拟主机目录）的访问，需通过 <code>semanage</code> 和 <code>restorecon</code> 配置安全上下文。</p><h4 id="（1）SELinux-状态查看与临时调整"><a href="#（1）SELinux-状态查看与临时调整" class="headerlink" title="（1）SELinux 状态查看与临时调整"></a>（1）SELinux 状态查看与临时调整</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-comment"># 查看 SELinux 状态（Enforcing：启用；Permissive：宽容模式；Disabled：关闭）</span><br>getenforce  <span class="hljs-comment"># 默认输出 Enforcing</span><br><br><span class="hljs-comment"># 临时切换为宽容模式（测试用，重启后失效）</span><br><span class="hljs-built_in">sudo</span> setenforce 0  <span class="hljs-comment"># 输出 Permissive</span><br></code></pre></td></tr></table></figure><p><strong>不推荐永久关闭 SELinux</strong>（会降低系统安全性），建议通过上下文配置解决权限问题。</p><h4 id="（2）目录安全上下文配置（以虚拟主机目录为例）"><a href="#（2）目录安全上下文配置（以虚拟主机目录为例）" class="headerlink" title="（2）目录安全上下文配置（以虚拟主机目录为例）"></a>（2）目录安全上下文配置（以虚拟主机目录为例）</h4><p>若后续创建虚拟主机目录 <code>/var/www/example.com/html</code> 和日志目录 <code>/var/www/example.com/log</code>，需设置 SELinux 上下文：</p><ul><li><code>httpd_sys_content_t</code>：Apache 可读取的静态文件目录上下文；</li><li><code>httpd_log_t</code>：Apache 可写入的日志目录上下文。</li></ul><p>配置命令：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-comment"># 1. 为网站根目录设置 httpd_sys_content_t 上下文（允许读取）</span><br><span class="hljs-built_in">sudo</span> semanage fcontext -a -t httpd_sys_content_t <span class="hljs-string">&quot;/var/www/example.com/html(/.*)?&quot;</span><br><br><span class="hljs-comment"># 2. 为日志目录设置 httpd_log_t 上下文（允许写入）</span><br><span class="hljs-built_in">sudo</span> semanage fcontext -a -t httpd_log_t <span class="hljs-string">&quot;/var/www/example.com/log(/.*)?&quot;</span><br><br><span class="hljs-comment"># 3. 应用上下文配置（-R：递归处理子目录；-v：显示修改过程）</span><br><span class="hljs-built_in">sudo</span> restorecon -Rv /var/www/example.com/html<br><span class="hljs-built_in">sudo</span> restorecon -Rv /var/www/example.com/log<br><br><span class="hljs-comment"># 4. 验证上下文（输出应包含 httpd_sys_content_t 或 httpd_log_t）</span><br><span class="hljs-built_in">ls</span> -dZ /var/www/example.com/html<br><span class="hljs-built_in">ls</span> -dZ /var/www/example.com/log<br></code></pre></td></tr></table></figure><h4 id="（3）全局-SELinux-布尔值（可选，简化配置）"><a href="#（3）全局-SELinux-布尔值（可选，简化配置）" class="headerlink" title="（3）全局 SELinux 布尔值（可选，简化配置）"></a>（3）全局 SELinux 布尔值（可选，简化配置）</h4><p>若需快速允许 Apache 访问所有目录（适合测试环境，生产环境不推荐），可设置 <code>httpd_unified</code> 布尔值：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-comment"># 永久允许 Apache 统一权限（-P：重启后生效）</span><br><span class="hljs-built_in">sudo</span> setsebool -P httpd_unified 1<br></code></pre></td></tr></table></figure><h2 id="六、虚拟主机配置（多站点部署核心）"><a href="#六、虚拟主机配置（多站点部署核心）" class="headerlink" title="六、虚拟主机配置（多站点部署核心）"></a>六、虚拟主机配置（多站点部署核心）</h2><p>虚拟主机（Virtual Host）允许一台服务器托管多个网站，通过 <code>ServerName</code>（域名）区分不同站点。CentOS 7 推荐两种配置方式：<code>conf.d</code> 目录直接创建配置文件（简单），或 <code>sites-available/sites-enabled</code> 软链接（规范，便于管理）。</p><h3 id="1-方案-1：conf-d-目录直接配置"><a href="#1-方案-1：conf-d-目录直接配置" class="headerlink" title="1. 方案 1：conf.d 目录直接配置"></a>1. 方案 1：<code>conf.d</code> 目录直接配置</h3><p>以部署两个站点为例：</p><ul><li>站点 1：<code>www.example.com</code>（默认站点，公网访问）；</li><li>站点 2：<code>slackware.local</code>（本地测试站点，仅局域网访问）。</li></ul><h4 id="（1）创建站点目录与测试页面"><a href="#（1）创建站点目录与测试页面" class="headerlink" title="（1）创建站点目录与测试页面"></a>（1）创建站点目录与测试页面</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-comment"># 1. 站点 1：www.example.com（公网）</span><br><span class="hljs-built_in">sudo</span> <span class="hljs-built_in">mkdir</span> -p /var/www/example.com/&#123;html,<span class="hljs-built_in">log</span>&#125;  <span class="hljs-comment"># html：页面目录；log：日志目录</span><br><span class="hljs-built_in">sudo</span> <span class="hljs-built_in">echo</span> <span class="hljs-string">&quot;&lt;h1&gt;Welcome to www.example.com (Public Site)&lt;/h1&gt;&quot;</span> | <span class="hljs-built_in">sudo</span> <span class="hljs-built_in">tee</span> /var/www/example.com/html/index.html<br><br><span class="hljs-comment"># 2. 站点 2：slackware.local（本地）</span><br><span class="hljs-built_in">sudo</span> <span class="hljs-built_in">mkdir</span> -p /var/www/slackware.local/&#123;html,<span class="hljs-built_in">log</span>&#125;<br><span class="hljs-built_in">sudo</span> <span class="hljs-built_in">echo</span> <span class="hljs-string">&quot;&lt;h1&gt;Welcome to slackware.local (Local Site)&lt;/h1&gt;&quot;</span> | <span class="hljs-built_in">sudo</span> <span class="hljs-built_in">tee</span> /var/www/slackware.local/html/index.html<br><br><span class="hljs-comment"># 3. 设置目录权限（非 root 用户可管理页面，Apache 有读写权限）</span><br><span class="hljs-built_in">sudo</span> <span class="hljs-built_in">chown</span> -R your_username:your_username /var/www/example.com /var/www/slackware.local<br><span class="hljs-built_in">sudo</span> <span class="hljs-built_in">chmod</span> -R 755 /var/www/  <span class="hljs-comment"># 目录权限 755（用户读写执行，其他只读执行）</span><br><span class="hljs-built_in">sudo</span> <span class="hljs-built_in">chmod</span> -R 644 /var/www/*/html/*  <span class="hljs-comment"># 文件权限 644（用户读写，其他只读）</span><br></code></pre></td></tr></table></figure><p>替换 <code>your_username</code> 为你的 sudo 用户名（如 <code>centos</code>）。</p><h4 id="（2）创建虚拟主机配置文件"><a href="#（2）创建虚拟主机配置文件" class="headerlink" title="（2）创建虚拟主机配置文件"></a>（2）创建虚拟主机配置文件</h4><h5 id="配置站点-1：www-example-com（公网）"><a href="#配置站点-1：www-example-com（公网）" class="headerlink" title="配置站点 1：www.example.com（公网）"></a>配置站点 1：<code>www.example.com</code>（公网）</h5><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-built_in">sudo</span> vi /etc/httpd/conf.d/example.com.conf<br></code></pre></td></tr></table></figure><p>添加以下内容（带详细解释）：</p><figure class="highlight apache"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br></pre></td><td class="code"><pre><code class="hljs apache"><span class="hljs-comment"># 虚拟主机监听所有 IP 的 80 端口（*:80 表示不限制 IP）</span><br><span class="hljs-section">&lt;VirtualHost *<span class="hljs-number">:80</span>&gt;</span><br>    <span class="hljs-comment"># 主域名（必须与 DNS 解析一致，如 www.example.com）</span><br>    <span class="hljs-attribute">ServerName</span> www.example.com<br>    <span class="hljs-comment"># 域名别名（如 example.com，用户访问 example.com 也会指向此站点）</span><br>    <span class="hljs-attribute">ServerAlias</span> example.com<br>    <span class="hljs-comment"># 网站根目录（页面存放路径）</span><br>    <span class="hljs-attribute">DocumentRoot</span> <span class="hljs-string">&quot;/var/www/example.com/html&quot;</span><br>    <span class="hljs-comment"># 管理员邮箱（错误页面显示）</span><br>    <span class="hljs-attribute">ServerAdmin</span> webmaster@example.com<br>    <br>    <span class="hljs-comment"># 错误日志路径（记录此站点的错误，如 404 页面不存在）</span><br>    <span class="hljs-attribute">ErrorLog</span> <span class="hljs-string">&quot;/var/www/example.com/log/error.log&quot;</span><br>    <span class="hljs-comment"># 访问日志路径（记录此站点的所有访问，格式为 combined）</span><br>    <span class="hljs-attribute">CustomLog</span> <span class="hljs-string">&quot;/var/www/example.com/log/access.log&quot;</span> combined<br>    <br>    <span class="hljs-comment"># 目录权限控制（针对 DocumentRoot）</span><br>    <span class="hljs-section">&lt;Directory <span class="hljs-string">&quot;/var/www/example.com/html&quot;</span>&gt;</span><br>        <span class="hljs-attribute">Options</span> Indexes FollowSymLinks  # 允许目录索引、跟随符号链接<br>        <span class="hljs-attribute">AllowOverride</span> None  # 不启用 .htaccess（如需 URL 重写，后续改为 <span class="hljs-literal">All</span>）<br>        <span class="hljs-attribute">Require</span> <span class="hljs-literal">all</span> granted  # 允许所有用户访问（公网站点需开放）<br>    <span class="hljs-section">&lt;/Directory&gt;</span><br><span class="hljs-section">&lt;/VirtualHost&gt;</span><br></code></pre></td></tr></table></figure><h5 id="配置站点-2：slackware-local（本地）"><a href="#配置站点-2：slackware-local（本地）" class="headerlink" title="配置站点 2：slackware.local（本地）"></a>配置站点 2：<code>slackware.local</code>（本地）</h5><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-built_in">sudo</span> vi /etc/httpd/conf.d/slackware.local.conf<br></code></pre></td></tr></table></figure><p>添加以下内容：</p><figure class="highlight apache"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br></pre></td><td class="code"><pre><code class="hljs apache"><span class="hljs-section">&lt;VirtualHost *<span class="hljs-number">:80</span>&gt;</span><br>    <span class="hljs-attribute">ServerName</span> slackware.local  # 本地域名（无需公网解析）<br>    <span class="hljs-attribute">ServerAlias</span> slackware  # 别名（简化访问）<br>    <span class="hljs-attribute">DocumentRoot</span> <span class="hljs-string">&quot;/var/www/slackware.local/html&quot;</span><br>    <span class="hljs-attribute">ServerAdmin</span> webmaster@local<br>    <br>    <span class="hljs-attribute">ErrorLog</span> <span class="hljs-string">&quot;/var/www/slackware.local/log/error.log&quot;</span><br>    <span class="hljs-attribute">CustomLog</span> <span class="hljs-string">&quot;/var/www/slackware.local/log/access.log&quot;</span> common  # common 格式：仅基础访问信息<br>    <br>    <span class="hljs-section">&lt;Directory <span class="hljs-string">&quot;/var/www/slackware.local/html&quot;</span>&gt;</span><br>        <span class="hljs-attribute">Options</span> Indexes FollowSymLinks<br>        <span class="hljs-attribute">AllowOverride</span> None<br>        <span class="hljs-attribute">Require</span> <span class="hljs-literal">all</span> granted  # 允许局域网用户访问<br>    <span class="hljs-section">&lt;/Directory&gt;</span><br><span class="hljs-section">&lt;/VirtualHost&gt;</span><br></code></pre></td></tr></table></figure><h4 id="（3）本地测试站点的域名解析（关键！）"><a href="#（3）本地测试站点的域名解析（关键！）" class="headerlink" title="（3）本地测试站点的域名解析（关键！）"></a>（3）本地测试站点的域名解析（关键！）</h4><p>本地站点 <code>slackware.local</code> 无公网 DNS 解析，需在<strong>客户端电脑</strong>的 <code>hosts</code> 文件中添加映射（服务器 IP + 本地域名）：</p><ul><li><strong>Windows</strong>：编辑 <code>C:\Windows\System32\drivers\etc\hosts</code>，添加：<figure class="highlight accesslog"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs accesslog"><span class="hljs-number">192.168.1.100</span>  slackware.local  # 替换为你的服务器内网 IP<br></code></pre></td></tr></table></figure></li><li><strong>Linux&#x2F;macOS</strong>：编辑 <code>/etc/hosts</code>，添加同上内容。</li></ul><h4 id="（4）生效配置并测试"><a href="#（4）生效配置并测试" class="headerlink" title="（4）生效配置并测试"></a>（4）生效配置并测试</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-comment"># 1. 测试配置语法</span><br><span class="hljs-built_in">sudo</span> apachectl configtest  <span class="hljs-comment"># 输出 Syntax OK</span><br><br><span class="hljs-comment"># 2. 重载 Apache 服务（不中断连接）</span><br><span class="hljs-built_in">sudo</span> systemctl reload httpd<br><br><span class="hljs-comment"># 3. 测试访问（服务器本地或客户端）</span><br>curl http://www.example.com  <span class="hljs-comment"># 输出公网站点页面</span><br>curl http://slackware.local  <span class="hljs-comment"># 输出本地站点页面</span><br></code></pre></td></tr></table></figure><h3 id="2-方案-2：sites-available-sites-enabled-软链接（规范方案）"><a href="#2-方案-2：sites-available-sites-enabled-软链接（规范方案）" class="headerlink" title="2. 方案 2：sites-available/sites-enabled 软链接（规范方案）"></a>2. 方案 2：<code>sites-available/sites-enabled</code> 软链接（规范方案）</h3><p>此方案将“待启用”和“已启用”的虚拟主机分离，便于管理（如临时禁用站点只需删除软链接），步骤如下：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-comment"># 1. 创建 sites-available 和 sites-enabled 目录</span><br><span class="hljs-built_in">sudo</span> <span class="hljs-built_in">mkdir</span> -p /etc/httpd/&#123;sites-available,sites-enabled&#125;<br><br><span class="hljs-comment"># 2. 在主配置文件中添加加载 sites-enabled 目录的指令</span><br><span class="hljs-built_in">sudo</span> <span class="hljs-built_in">echo</span> <span class="hljs-string">&quot;IncludeOptional sites-enabled/*.conf&quot;</span> &gt;&gt; /etc/httpd/conf/httpd.conf<br><br><span class="hljs-comment"># 3. 将虚拟主机配置文件放入 sites-available（以 example.com 为例）</span><br><span class="hljs-built_in">sudo</span> <span class="hljs-built_in">mv</span> /etc/httpd/conf.d/example.com.conf /etc/httpd/sites-available/<br><br><span class="hljs-comment"># 4. 创建软链接，启用站点（sites-enabled 中的文件为软链接）</span><br><span class="hljs-built_in">sudo</span> <span class="hljs-built_in">ln</span> -s /etc/httpd/sites-available/example.com.conf /etc/httpd/sites-enabled/<br><br><span class="hljs-comment"># 5. 重载服务生效</span><br><span class="hljs-built_in">sudo</span> systemctl reload httpd<br><br><span class="hljs-comment"># 禁用站点：删除软链接即可（不删除原配置文件）</span><br><span class="hljs-comment"># sudo rm /etc/httpd/sites-enabled/example.com.conf</span><br></code></pre></td></tr></table></figure><h3 id="3-基于IP的虚拟主机配置"><a href="#3-基于IP的虚拟主机配置" class="headerlink" title="3. 基于IP的虚拟主机配置"></a>3. 基于IP的虚拟主机配置</h3><p>当服务器有多个IP地址时，可以为每个IP地址分配不同的网站。</p><h4 id="（1）查看服务器IP地址"><a href="#（1）查看服务器IP地址" class="headerlink" title="（1）查看服务器IP地址"></a>（1）查看服务器IP地址</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-comment"># 查看所有网络接口和IP</span><br>ip addr show<br><span class="hljs-comment"># 或使用</span><br>ifconfig<br></code></pre></td></tr></table></figure><p>假设服务器有两个IP：</p><ul><li><code>192.168.1.100</code> - 主IP</li><li><code>192.168.1.101</code> - 附加IP</li></ul><h4 id="（2）创建站点目录和测试页面"><a href="#（2）创建站点目录和测试页面" class="headerlink" title="（2）创建站点目录和测试页面"></a>（2）创建站点目录和测试页面</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-comment"># 为 IP 192.168.1.101 创建站点</span><br><span class="hljs-built_in">sudo</span> <span class="hljs-built_in">mkdir</span> -p /var/www/ip-site/&#123;html,<span class="hljs-built_in">log</span>&#125;<br><span class="hljs-built_in">sudo</span> <span class="hljs-built_in">echo</span> <span class="hljs-string">&quot;&lt;h1&gt;Welcome to IP-based Site (192.168.1.101)&lt;/h1&gt;&quot;</span> | <span class="hljs-built_in">sudo</span> <span class="hljs-built_in">tee</span> /var/www/ip-site/html/index.html<br></code></pre></td></tr></table></figure><h4 id="（3）基于IP的虚拟主机配置"><a href="#（3）基于IP的虚拟主机配置" class="headerlink" title="（3）基于IP的虚拟主机配置"></a>（3）基于IP的虚拟主机配置</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-built_in">sudo</span> vi /etc/httpd/conf.d/ip-based.conf<br></code></pre></td></tr></table></figure><figure class="highlight apache"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br></pre></td><td class="code"><pre><code class="hljs apache"><span class="hljs-comment"># 基于IP的虚拟主机配置</span><br><span class="hljs-section">&lt;VirtualHost <span class="hljs-number">192.168.1.101:80</span>&gt;</span><br>    <span class="hljs-comment"># 服务器名称（可省略或使用任意名称）</span><br>    <span class="hljs-attribute">ServerName</span> ip-based-site<br>    <span class="hljs-comment"># 网站根目录</span><br>    <span class="hljs-attribute">DocumentRoot</span> <span class="hljs-string">&quot;/var/www/ip-site/html&quot;</span><br>    <span class="hljs-comment"># 管理员邮箱</span><br>    <span class="hljs-attribute">ServerAdmin</span> admin@ip-site.com<br>    <br>    <span class="hljs-comment"># 错误日志和访问日志</span><br>    <span class="hljs-attribute">ErrorLog</span> <span class="hljs-string">&quot;/var/www/ip-site/log/error.log&quot;</span><br>    <span class="hljs-attribute">CustomLog</span> <span class="hljs-string">&quot;/var/www/ip-site/log/access.log&quot;</span> combined<br>    <br>    <span class="hljs-comment"># 目录权限控制</span><br>    <span class="hljs-section">&lt;Directory <span class="hljs-string">&quot;/var/www/ip-site/html&quot;</span>&gt;</span><br>        <span class="hljs-attribute">Options</span> -Indexes +FollowSymLinks  # 禁用目录索引，启用符号链接<br>        <span class="hljs-attribute">AllowOverride</span> None<br>        <span class="hljs-attribute">Require</span> <span class="hljs-literal">all</span> granted<br>    <span class="hljs-section">&lt;/Directory&gt;</span><br><span class="hljs-section">&lt;/VirtualHost&gt;</span><br></code></pre></td></tr></table></figure><h4 id="（4）SELinux上下文设置"><a href="#（4）SELinux上下文设置" class="headerlink" title="（4）SELinux上下文设置"></a>（4）SELinux上下文设置</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-comment"># 设置目录安全上下文</span><br><span class="hljs-built_in">sudo</span> semanage fcontext -a -t httpd_sys_content_t <span class="hljs-string">&quot;/var/www/ip-site/html(/.*)?&quot;</span><br><span class="hljs-built_in">sudo</span> semanage fcontext -a -t httpd_log_t <span class="hljs-string">&quot;/var/www/ip-site/log(/.*)?&quot;</span><br><span class="hljs-built_in">sudo</span> restorecon -Rv /var/www/ip-site/<br></code></pre></td></tr></table></figure><h4 id="（5）测试访问"><a href="#（5）测试访问" class="headerlink" title="（5）测试访问"></a>（5）测试访问</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-comment"># 测试配置语法</span><br><span class="hljs-built_in">sudo</span> apachectl configtest<br><br><span class="hljs-comment"># 重载服务</span><br><span class="hljs-built_in">sudo</span> systemctl reload httpd<br><br><span class="hljs-comment"># 测试访问（从其他机器）</span><br>curl http://192.168.1.101<br></code></pre></td></tr></table></figure><h3 id="4-基于端口的虚拟主机配置"><a href="#4-基于端口的虚拟主机配置" class="headerlink" title="4. 基于端口的虚拟主机配置"></a>4. 基于端口的虚拟主机配置</h3><p>在同一IP上使用不同端口提供不同网站服务，适合测试环境或内部服务。</p><h4 id="（1）创建不同端口的站点目录"><a href="#（1）创建不同端口的站点目录" class="headerlink" title="（1）创建不同端口的站点目录"></a>（1）创建不同端口的站点目录</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-comment"># 创建端口8080的站点</span><br><span class="hljs-built_in">sudo</span> <span class="hljs-built_in">mkdir</span> -p /var/www/port-8080/&#123;html,<span class="hljs-built_in">log</span>&#125;<br><span class="hljs-built_in">sudo</span> <span class="hljs-built_in">echo</span> <span class="hljs-string">&quot;&lt;h1&gt;Welcome to Port 8080 Site&lt;/h1&gt;&quot;</span> | <span class="hljs-built_in">sudo</span> <span class="hljs-built_in">tee</span> /var/www/port-8080/html/index.html<br><br><span class="hljs-comment"># 创建端口8081的站点  </span><br><span class="hljs-built_in">sudo</span> <span class="hljs-built_in">mkdir</span> -p /var/www/port-8081/&#123;html,<span class="hljs-built_in">log</span>&#125;<br><span class="hljs-built_in">sudo</span> <span class="hljs-built_in">echo</span> <span class="hljs-string">&quot;&lt;h1&gt;Welcome to Port 8081 Site&lt;/h1&gt;&quot;</span> | <span class="hljs-built_in">sudo</span> <span class="hljs-built_in">tee</span> /var/www/port-8081/html/index.html<br></code></pre></td></tr></table></figure><h4 id="（2）修改主配置文件监听额外端口"><a href="#（2）修改主配置文件监听额外端口" class="headerlink" title="（2）修改主配置文件监听额外端口"></a>（2）修改主配置文件监听额外端口</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-built_in">sudo</span> vi /etc/httpd/conf/httpd.conf<br></code></pre></td></tr></table></figure><p>找到 <code>Listen</code> 指令部分，添加：</p><figure class="highlight apache"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><code class="hljs apache"><span class="hljs-comment"># 默认HTTP端口</span><br><span class="hljs-attribute">Listen</span> <span class="hljs-number">80</span><br><br><span class="hljs-comment"># 添加额外监听端口</span><br><span class="hljs-attribute">Listen</span> <span class="hljs-number">8080</span><br><span class="hljs-attribute">Listen</span> <span class="hljs-number">8081</span><br></code></pre></td></tr></table></figure><h4 id="（3）创建基于端口的虚拟主机配置"><a href="#（3）创建基于端口的虚拟主机配置" class="headerlink" title="（3）创建基于端口的虚拟主机配置"></a>（3）创建基于端口的虚拟主机配置</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-built_in">sudo</span> vi /etc/httpd/conf.d/port-based.conf<br></code></pre></td></tr></table></figure><figure class="highlight apache"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br></pre></td><td class="code"><pre><code class="hljs apache"><span class="hljs-comment"># 端口8080的虚拟主机</span><br><span class="hljs-section">&lt;VirtualHost *<span class="hljs-number">:8080</span>&gt;</span><br>    <span class="hljs-attribute">ServerName</span> server.local:<span class="hljs-number">8080</span><br>    <span class="hljs-attribute">DocumentRoot</span> <span class="hljs-string">&quot;/var/www/port-8080/html&quot;</span><br>    <span class="hljs-attribute">ServerAdmin</span> admin@port8080.com<br>    <br>    <span class="hljs-attribute">ErrorLog</span> <span class="hljs-string">&quot;/var/www/port-8080/log/error.log&quot;</span><br>    <span class="hljs-attribute">CustomLog</span> <span class="hljs-string">&quot;/var/www/port-8080/log/access.log&quot;</span> combined<br>    <br>    <span class="hljs-section">&lt;Directory <span class="hljs-string">&quot;/var/www/port-8080/html&quot;</span>&gt;</span><br>        <span class="hljs-attribute">Options</span> -Indexes +FollowSymLinks<br>        <span class="hljs-attribute">AllowOverride</span> None<br>        <span class="hljs-attribute">Require</span> <span class="hljs-literal">all</span> granted<br>    <span class="hljs-section">&lt;/Directory&gt;</span><br><span class="hljs-section">&lt;/VirtualHost&gt;</span><br><br><span class="hljs-comment"># 端口8081的虚拟主机</span><br><span class="hljs-section">&lt;VirtualHost *<span class="hljs-number">:8081</span>&gt;</span><br>    <span class="hljs-attribute">ServerName</span> server.local:<span class="hljs-number">8081</span><br>    <span class="hljs-attribute">DocumentRoot</span> <span class="hljs-string">&quot;/var/www/port-8081/html&quot;</span><br>    <span class="hljs-attribute">ServerAdmin</span> admin@port8081.com<br>    <br>    <span class="hljs-attribute">ErrorLog</span> <span class="hljs-string">&quot;/var/www/port-8081/log/error.log&quot;</span><br>    <span class="hljs-attribute">CustomLog</span> <span class="hljs-string">&quot;/var/www/port-8081/log/access.log&quot;</span> combined<br>    <br>    <span class="hljs-section">&lt;Directory <span class="hljs-string">&quot;/var/www/port-8081/html&quot;</span>&gt;</span><br>        <span class="hljs-attribute">Options</span> -Indexes +FollowSymLinks<br>        <span class="hljs-attribute">AllowOverride</span> None<br>        <span class="hljs-attribute">Require</span> <span class="hljs-literal">all</span> granted<br>    <span class="hljs-section">&lt;/Directory&gt;</span><br><span class="hljs-section">&lt;/VirtualHost&gt;</span><br></code></pre></td></tr></table></figure><h4 id="（4）防火墙开放额外端口"><a href="#（4）防火墙开放额外端口" class="headerlink" title="（4）防火墙开放额外端口"></a>（4）防火墙开放额外端口</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-comment"># 永久开放8080和8081端口</span><br><span class="hljs-built_in">sudo</span> firewall-cmd --permanent --add-port=8080/tcp<br><span class="hljs-built_in">sudo</span> firewall-cmd --permanent --add-port=8081/tcp<br><span class="hljs-built_in">sudo</span> firewall-cmd --reload<br><br><span class="hljs-comment"># 验证端口开放</span><br><span class="hljs-built_in">sudo</span> firewall-cmd --list-ports<br></code></pre></td></tr></table></figure><h4 id="（5）SELinux上下文设置"><a href="#（5）SELinux上下文设置" class="headerlink" title="（5）SELinux上下文设置"></a>（5）SELinux上下文设置</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-comment"># 设置端口站点目录的安全上下文</span><br><span class="hljs-built_in">sudo</span> semanage fcontext -a -t httpd_sys_content_t <span class="hljs-string">&quot;/var/www/port-8080/html(/.*)?&quot;</span><br><span class="hljs-built_in">sudo</span> semanage fcontext -a -t httpd_sys_content_t <span class="hljs-string">&quot;/var/www/port-8081/html(/.*)?&quot;</span><br><span class="hljs-built_in">sudo</span> semanage fcontext -a -t httpd_log_t <span class="hljs-string">&quot;/var/www/port-8080/log(/.*)?&quot;</span><br><span class="hljs-built_in">sudo</span> semanage fcontext -a -t httpd_log_t <span class="hljs-string">&quot;/var/www/port-8081/log(/.*)?&quot;</span><br><span class="hljs-built_in">sudo</span> restorecon -Rv /var/www/port-8080/ /var/www/port-8081/<br></code></pre></td></tr></table></figure><h4 id="（6）测试访问"><a href="#（6）测试访问" class="headerlink" title="（6）测试访问"></a>（6）测试访问</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-comment"># 测试配置语法</span><br><span class="hljs-built_in">sudo</span> apachectl configtest<br><br><span class="hljs-comment"># 重载服务</span><br><span class="hljs-built_in">sudo</span> systemctl reload httpd<br><br><span class="hljs-comment"># 测试不同端口的访问</span><br>curl http://localhost:8080<br>curl http://localhost:8081<br><span class="hljs-comment"># 或从客户端访问</span><br>curl http://服务器IP:8080<br>curl http://服务器IP:8081<br></code></pre></td></tr></table></figure><h3 id="5-混合配置示例（IP-端口-域名）"><a href="#5-混合配置示例（IP-端口-域名）" class="headerlink" title="5. 混合配置示例（IP+端口+域名）"></a>5. 混合配置示例（IP+端口+域名）</h3><p>实际环境中经常需要混合使用多种虚拟主机类型：</p><h4 id="场景描述："><a href="#场景描述：" class="headerlink" title="场景描述："></a>场景描述：</h4><ul><li><code>192.168.1.100:80</code> - 主网站（域名：<a href="https://www.example.com/">www.example.com</a>）</li><li><code>192.168.1.100:8080</code> - 测试环境（域名：<a href="https://test.example.com/">test.example.com</a>）</li><li><code>192.168.1.101:80</code> - 内部管理站点（域名：<a href="https://admin.internal.com/">admin.internal.com</a>）</li></ul><h4 id="混合配置示例："><a href="#混合配置示例：" class="headerlink" title="混合配置示例："></a>混合配置示例：</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-built_in">sudo</span> vi /etc/httpd/conf.d/mixed-hosts.conf<br></code></pre></td></tr></table></figure><figure class="highlight apache"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br></pre></td><td class="code"><pre><code class="hljs apache"><span class="hljs-comment"># 主网站 - 基于域名（默认端口80）</span><br><span class="hljs-section">&lt;VirtualHost <span class="hljs-number">192.168.1.100:80</span>&gt;</span><br>    <span class="hljs-attribute">ServerName</span> www.example.com<br>    <span class="hljs-attribute">ServerAlias</span> example.com<br>    <span class="hljs-attribute">DocumentRoot</span> <span class="hljs-string">&quot;/var/www/example.com/html&quot;</span><br>    <br>    <span class="hljs-attribute">ErrorLog</span> <span class="hljs-string">&quot;/var/www/example.com/log/error.log&quot;</span><br>    <span class="hljs-attribute">CustomLog</span> <span class="hljs-string">&quot;/var/www/example.com/log/access.log&quot;</span> combined<br>    <br>    <span class="hljs-section">&lt;Directory <span class="hljs-string">&quot;/var/www/example.com/html&quot;</span>&gt;</span><br>        <span class="hljs-attribute">Options</span> -Indexes +FollowSymLinks<br>        <span class="hljs-attribute">AllowOverride</span> None<br>        <span class="hljs-attribute">Require</span> <span class="hljs-literal">all</span> granted<br>    <span class="hljs-section">&lt;/Directory&gt;</span><br><span class="hljs-section">&lt;/VirtualHost&gt;</span><br><br><span class="hljs-comment"># 测试环境 - 基于端口和域名</span><br><span class="hljs-section">&lt;VirtualHost <span class="hljs-number">192.168.1.100:8080</span>&gt;</span><br>    <span class="hljs-attribute">ServerName</span> test.example.com<br>    <span class="hljs-attribute">DocumentRoot</span> <span class="hljs-string">&quot;/var/www/test-env/html&quot;</span><br>    <br>    <span class="hljs-attribute">ErrorLog</span> <span class="hljs-string">&quot;/var/www/test-env/log/error.log&quot;</span><br>    <span class="hljs-attribute">CustomLog</span> <span class="hljs-string">&quot;/var/www/test-env/log/access.log&quot;</span> combined<br>    <br>    <span class="hljs-section">&lt;Directory <span class="hljs-string">&quot;/var/www/test-env/html&quot;</span>&gt;</span><br>        <span class="hljs-attribute">Options</span> -Indexes +FollowSymLinks<br>        <span class="hljs-attribute">AllowOverride</span> <span class="hljs-literal">All</span>  # 允许.htaccess用于测试<br>        <span class="hljs-attribute">Require</span> <span class="hljs-literal">all</span> granted<br>    <span class="hljs-section">&lt;/Directory&gt;</span><br><span class="hljs-section">&lt;/VirtualHost&gt;</span><br><br><span class="hljs-comment"># 内部管理 - 基于IP和域名</span><br><span class="hljs-section">&lt;VirtualHost <span class="hljs-number">192.168.1.101:80</span>&gt;</span><br>    <span class="hljs-attribute">ServerName</span> admin.internal.com<br>    <span class="hljs-attribute">DocumentRoot</span> <span class="hljs-string">&quot;/var/www/admin/html&quot;</span><br>    <br>    <span class="hljs-attribute">ErrorLog</span> <span class="hljs-string">&quot;/var/www/admin/log/error.log&quot;</span><br>    <span class="hljs-attribute">CustomLog</span> <span class="hljs-string">&quot;/var/www/admin/log/access.log&quot;</span> combined<br>    <br>    <span class="hljs-comment"># 限制访问来源（仅允许内网IP段）</span><br>    <span class="hljs-section">&lt;Directory <span class="hljs-string">&quot;/var/www/admin/html&quot;</span>&gt;</span><br>        <span class="hljs-attribute">Options</span> -Indexes +FollowSymLinks<br>        <span class="hljs-attribute">AllowOverride</span> None<br>        <span class="hljs-attribute">Require</span> ip <span class="hljs-number">192.168.1.0</span>/<span class="hljs-number">24</span>  # 仅允许<span class="hljs-number">192</span>.<span class="hljs-number">168</span>.<span class="hljs-number">1</span>.x网段访问<br>    <span class="hljs-section">&lt;/Directory&gt;</span><br><span class="hljs-section">&lt;/VirtualHost&gt;</span><br></code></pre></td></tr></table></figure><h4 id="防火墙配置："><a href="#防火墙配置：" class="headerlink" title="防火墙配置："></a>防火墙配置：</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-comment"># 开放必要的端口和服务</span><br><span class="hljs-built_in">sudo</span> firewall-cmd --permanent --add-service=http<br><span class="hljs-built_in">sudo</span> firewall-cmd --permanent --add-service=https<br><span class="hljs-built_in">sudo</span> firewall-cmd --permanent --add-port=8080/tcp<br><span class="hljs-built_in">sudo</span> firewall-cmd --reload<br></code></pre></td></tr></table></figure><h3 id="6-虚拟主机匹配优先级"><a href="#6-虚拟主机匹配优先级" class="headerlink" title="6. 虚拟主机匹配优先级"></a>6. 虚拟主机匹配优先级</h3><p>当多个虚拟主机配置可能匹配同一个请求时，Apache按以下顺序匹配：</p><ol><li><strong>精确IP+端口+ServerName匹配</strong></li><li><strong>IP+端口+第一个定义的虚拟主机</strong>（作为默认或回退）</li><li><strong>第一个定义的虚拟主机</strong>（当没有匹配时）</li></ol><h4 id="设置默认虚拟主机："><a href="#设置默认虚拟主机：" class="headerlink" title="设置默认虚拟主机："></a>设置默认虚拟主机：</h4><figure class="highlight apache"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><code class="hljs apache"><span class="hljs-comment"># 第一个定义的VirtualHost会成为默认主机</span><br><span class="hljs-section">&lt;VirtualHost _default_<span class="hljs-number">:80</span>&gt;</span><br>    <span class="hljs-attribute">DocumentRoot</span> <span class="hljs-string">&quot;/var/www/default&quot;</span><br>    <span class="hljs-comment"># 捕获所有未匹配的请求</span><br><span class="hljs-section">&lt;/VirtualHost&gt;</span><br></code></pre></td></tr></table></figure><p>或者明确指定：</p><figure class="highlight apache"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><code class="hljs apache"><span class="hljs-section">&lt;VirtualHost *<span class="hljs-number">:80</span>&gt;</span><br>    <span class="hljs-attribute">ServerName</span> default<br>    <span class="hljs-attribute">DocumentRoot</span> <span class="hljs-string">&quot;/var/www/default&quot;</span><br>    <span class="hljs-comment"># 这个会处理所有未匹配到其他虚拟主机的请求</span><br><span class="hljs-section">&lt;/VirtualHost&gt;</span><br></code></pre></td></tr></table></figure><h2 id="七、Apache认证配置"><a href="#七、Apache认证配置" class="headerlink" title="七、Apache认证配置"></a>七、Apache认证配置</h2><p>Apache支持多种认证方式，包括基本认证（Basic Authentication）和摘要认证（Digest Authentication），用于保护特定目录或文件的访问。</p><h3 id="1-基本认证（Basic-Authentication）配置"><a href="#1-基本认证（Basic-Authentication）配置" class="headerlink" title="1. 基本认证（Basic Authentication）配置"></a>1. 基本认证（Basic Authentication）配置</h3><p>基本认证是最常用的认证方式，浏览器会弹出用户名&#x2F;密码输入框。</p><h4 id="（1）创建密码文件"><a href="#（1）创建密码文件" class="headerlink" title="（1）创建密码文件"></a>（1）创建密码文件</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-comment"># 创建认证目录（建议放在/etc/httpd/目录下）</span><br><span class="hljs-built_in">sudo</span> <span class="hljs-built_in">mkdir</span> -p /etc/httpd/auth<br><br><span class="hljs-comment"># 创建密码文件并添加第一个用户（-c 选项创建新文件）</span><br><span class="hljs-built_in">sudo</span> htpasswd -c /etc/httpd/auth/.htpasswd user1<br><span class="hljs-comment"># 按提示输入密码</span><br><br><span class="hljs-comment"># 添加第二个用户（不使用 -c 选项，避免覆盖）</span><br><span class="hljs-built_in">sudo</span> htpasswd /etc/httpd/auth/.htpasswd user2<br><br><span class="hljs-comment"># 查看密码文件内容</span><br><span class="hljs-built_in">sudo</span> <span class="hljs-built_in">cat</span> /etc/httpd/auth/.htpasswd<br><span class="hljs-comment"># 输出示例：user1:$apr1$xxxxxxxx$yyyyyyyyyyyyyyyyyyyyyy</span><br><span class="hljs-comment">#         user2:$apr1$zzzzzzzz$wwwwwwwwwwwwwwwwwwwwww</span><br></code></pre></td></tr></table></figure><h4 id="（2）为目录配置基本认证"><a href="#（2）为目录配置基本认证" class="headerlink" title="（2）为目录配置基本认证"></a>（2）为目录配置基本认证</h4><p>假设我们要保护 <code>/var/www/example.com/html/secure</code> 目录：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-comment"># 创建安全目录</span><br><span class="hljs-built_in">sudo</span> <span class="hljs-built_in">mkdir</span> -p /var/www/example.com/html/secure<br><span class="hljs-built_in">sudo</span> <span class="hljs-built_in">echo</span> <span class="hljs-string">&quot;&lt;h1&gt;Secure Area - Authentication Required&lt;/h1&gt;&quot;</span> | <span class="hljs-built_in">sudo</span> <span class="hljs-built_in">tee</span> /var/www/example.com/html/secure/index.html<br></code></pre></td></tr></table></figure><p>在虚拟主机配置中添加认证设置：</p><figure class="highlight apache"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br></pre></td><td class="code"><pre><code class="hljs apache"><span class="hljs-section">&lt;VirtualHost *<span class="hljs-number">:80</span>&gt;</span><br>    <span class="hljs-attribute">ServerName</span> www.example.com<br>    <span class="hljs-attribute">DocumentRoot</span> <span class="hljs-string">&quot;/var/www/example.com/html&quot;</span><br>    <br>    <span class="hljs-comment"># ... 其他配置 ...</span><br><br>    <span class="hljs-comment"># 保护特定目录</span><br>    <span class="hljs-section">&lt;Directory <span class="hljs-string">&quot;/var/www/example.com/html/secure&quot;</span>&gt;</span><br>        <span class="hljs-comment"># 认证类型</span><br>        <span class="hljs-attribute">AuthType</span> Basic<br>        <span class="hljs-comment"># 认证领域名称（显示在登录框中）</span><br>        <span class="hljs-attribute">AuthName</span> <span class="hljs-string">&quot;Restricted Area - Please Login&quot;</span><br>        <span class="hljs-comment"># 密码文件路径</span><br>        <span class="hljs-attribute">AuthUserFile</span> /etc/httpd/auth/.htpasswd<br>        <span class="hljs-comment"># 允许认证用户访问</span><br>        <span class="hljs-attribute">Require</span> valid-user<br>        <br>        <span class="hljs-comment"># 可选：允许特定用户访问</span><br>        <span class="hljs-comment"># Require user user1 user2</span><br>        <br>        <span class="hljs-comment"># 目录权限设置</span><br>        <span class="hljs-attribute">Options</span> -Indexes +FollowSymLinks<br>        <span class="hljs-attribute">AllowOverride</span> None<br>    <span class="hljs-section">&lt;/Directory&gt;</span><br><span class="hljs-section">&lt;/VirtualHost&gt;</span><br></code></pre></td></tr></table></figure><h4 id="（3）测试认证配置"><a href="#（3）测试认证配置" class="headerlink" title="（3）测试认证配置"></a>（3）测试认证配置</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-comment"># 测试配置语法</span><br><span class="hljs-built_in">sudo</span> apachectl configtest<br><br><span class="hljs-comment"># 重载服务</span><br><span class="hljs-built_in">sudo</span> systemctl reload httpd<br><br><span class="hljs-comment"># 测试访问（会返回401状态码）</span><br>curl -I http://www.example.com/secure/<br><span class="hljs-comment"># 输出：HTTP/1.1 401 Unauthorized</span><br></code></pre></td></tr></table></figure><p>在浏览器中访问 <code>http://www.example.com/secure/</code>，会弹出登录框要求输入用户名和密码。</p><h3 id="2-基于用户组的认证"><a href="#2-基于用户组的认证" class="headerlink" title="2. 基于用户组的认证"></a>2. 基于用户组的认证</h3><p>对于更复杂的权限管理，可以使用用户组。</p><h4 id="（1）创建组文件"><a href="#（1）创建组文件" class="headerlink" title="（1）创建组文件"></a>（1）创建组文件</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-comment"># 创建组文件</span><br><span class="hljs-built_in">sudo</span> vi /etc/httpd/auth/.htgroups<br></code></pre></td></tr></table></figure><p>添加组和用户关系：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-comment"># 格式：组名: 用户1 用户2 用户3</span><br>admins: user1 user2<br><span class="hljs-built_in">users</span>: user3 user4<br><span class="hljs-built_in">readonly</span>: user5<br></code></pre></td></tr></table></figure><h4 id="（2）配置组认证"><a href="#（2）配置组认证" class="headerlink" title="（2）配置组认证"></a>（2）配置组认证</h4><figure class="highlight apache"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br></pre></td><td class="code"><pre><code class="hljs apache"><span class="hljs-section">&lt;Directory <span class="hljs-string">&quot;/var/www/example.com/html/admin&quot;</span>&gt;</span><br>    <span class="hljs-attribute">AuthType</span> Basic<br>    <span class="hljs-attribute">AuthName</span> <span class="hljs-string">&quot;Admin Area&quot;</span><br>    <span class="hljs-attribute">AuthUserFile</span> /etc/httpd/auth/.htpasswd<br>    <span class="hljs-attribute">AuthGroupFile</span> /etc/httpd/auth/.htgroups<br>    <br>    <span class="hljs-comment"># 仅允许admins组访问</span><br>    <span class="hljs-attribute">Require</span> group admins<br>    <br>    <span class="hljs-attribute">Options</span> -Indexes +FollowSymLinks<br>    <span class="hljs-attribute">AllowOverride</span> None<br><span class="hljs-section">&lt;/Directory&gt;</span><br></code></pre></td></tr></table></figure><h3 id="3-摘要认证（Digest-Authentication）"><a href="#3-摘要认证（Digest-Authentication）" class="headerlink" title="3. 摘要认证（Digest Authentication）"></a>3. 摘要认证（Digest Authentication）</h3><p>摘要认证比基本认证更安全，密码不会以明文形式传输。</p><h4 id="（1）创建摘要认证密码文件"><a href="#（1）创建摘要认证密码文件" class="headerlink" title="（1）创建摘要认证密码文件"></a>（1）创建摘要认证密码文件</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-comment"># 创建摘要认证密码文件</span><br><span class="hljs-built_in">sudo</span> htdigest -c /etc/httpd/auth/.htdigest <span class="hljs-string">&quot;Restricted Area&quot;</span> user1<br><span class="hljs-comment"># 按提示输入密码</span><br><br><span class="hljs-comment"># 添加第二个用户</span><br><span class="hljs-built_in">sudo</span> htdigest /etc/httpd/auth/.htdigest <span class="hljs-string">&quot;Restricted Area&quot;</span> user2<br></code></pre></td></tr></table></figure><h4 id="（2）配置摘要认证"><a href="#（2）配置摘要认证" class="headerlink" title="（2）配置摘要认证"></a>（2）配置摘要认证</h4><figure class="highlight apache"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br></pre></td><td class="code"><pre><code class="hljs apache"><span class="hljs-section">&lt;Directory <span class="hljs-string">&quot;/var/www/example.com/html/secure-digest&quot;</span>&gt;</span><br>    <span class="hljs-comment"># 使用摘要认证</span><br>    <span class="hljs-attribute">AuthType</span> Digest<br>    <span class="hljs-attribute">AuthName</span> <span class="hljs-string">&quot;Restricted Area&quot;</span><br>    <span class="hljs-attribute">AuthDigestDomain</span> /secure-digest/<br>    <br>    <span class="hljs-comment"># 摘要认证密码文件</span><br>    <span class="hljs-attribute">AuthDigestProvider</span> file<br>    <span class="hljs-attribute">AuthUserFile</span> /etc/httpd/auth/.htdigest<br>    <br>    <span class="hljs-comment"># 允许认证用户访问</span><br>    <span class="hljs-attribute">Require</span> valid-user<br>    <br>    <span class="hljs-attribute">Options</span> -Indexes +FollowSymLinks<br>    <span class="hljs-attribute">AllowOverride</span> None<br><span class="hljs-section">&lt;/Directory&gt;</span><br></code></pre></td></tr></table></figure><h3 id="4-IP地址限制与认证结合"><a href="#4-IP地址限制与认证结合" class="headerlink" title="4. IP地址限制与认证结合"></a>4. IP地址限制与认证结合</h3><p>可以结合IP限制和认证，提供更灵活的安全策略。</p><h4 id="（1）IP白名单-认证"><a href="#（1）IP白名单-认证" class="headerlink" title="（1）IP白名单 + 认证"></a>（1）IP白名单 + 认证</h4><figure class="highlight apache"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br></pre></td><td class="code"><pre><code class="hljs apache"><span class="hljs-section">&lt;Directory <span class="hljs-string">&quot;/var/www/example.com/html/secure-ip&quot;</span>&gt;</span><br>    <span class="hljs-attribute">AuthType</span> Basic<br>    <span class="hljs-attribute">AuthName</span> <span class="hljs-string">&quot;Restricted Area&quot;</span><br>    <span class="hljs-attribute">AuthUserFile</span> /etc/httpd/auth/.htpasswd<br>    <br>    <span class="hljs-comment"># 访问控制配置</span><br>    <span class="hljs-attribute">Order</span> <span class="hljs-literal">deny</span>,<span class="hljs-literal">allow</span><br>    <span class="hljs-attribute">Deny</span> from <span class="hljs-literal">all</span><br>    <br>    <span class="hljs-comment"># 允许本地网络无需认证</span><br>    <span class="hljs-attribute">Allow</span> from <span class="hljs-number">192.168.1.0</span>/<span class="hljs-number">24</span><br>    <span class="hljs-comment"># 其他IP需要认证</span><br>    <span class="hljs-attribute">Require</span> valid-user<br>    <span class="hljs-attribute">Satisfy</span> any<br><span class="hljs-section">&lt;/Directory&gt;</span><br></code></pre></td></tr></table></figure><h4 id="（2）分时段访问控制"><a href="#（2）分时段访问控制" class="headerlink" title="（2）分时段访问控制"></a>（2）分时段访问控制</h4><figure class="highlight apache"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br></pre></td><td class="code"><pre><code class="hljs apache"><span class="hljs-section">&lt;Directory <span class="hljs-string">&quot;/var/www/example.com/html/office-hours&quot;</span>&gt;</span><br>    <span class="hljs-attribute">AuthType</span> Basic<br>    <span class="hljs-attribute">AuthName</span> <span class="hljs-string">&quot;Office Hours Only&quot;</span><br>    <span class="hljs-attribute">AuthUserFile</span> /etc/httpd/auth/.htpasswd<br>    <br>    <span class="hljs-comment"># 定义办公时间（9:00-18:00）</span><br>    <span class="hljs-section">&lt;RequireAll&gt;</span><br>        <span class="hljs-attribute">Require</span> valid-user<br>        <span class="hljs-comment"># 仅允许在工作时间访问</span><br>        <span class="hljs-attribute">Require</span> expr <span class="hljs-variable">%&#123;TIME_HOUR&#125;</span> &gt;= <span class="hljs-number">9</span> &amp;&amp; <span class="hljs-variable">%&#123;TIME_HOUR&#125;</span> &lt; <span class="hljs-number">18</span><br>    <span class="hljs-section">&lt;/RequireAll&gt;</span><br><span class="hljs-section">&lt;/Directory&gt;</span><br></code></pre></td></tr></table></figure><h3 id="5-htaccess-文件认证配置"><a href="#5-htaccess-文件认证配置" class="headerlink" title="5. .htaccess 文件认证配置"></a>5. .htaccess 文件认证配置</h3><p>如果主配置中允许 <code>.htaccess</code> 覆盖，可以在目录中创建 <code>.htaccess</code> 文件进行认证配置。</p><h4 id="（1）启用-htaccess-覆盖"><a href="#（1）启用-htaccess-覆盖" class="headerlink" title="（1）启用 .htaccess 覆盖"></a>（1）启用 .htaccess 覆盖</h4><p>在主配置或虚拟主机配置中：</p><figure class="highlight apache"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><code class="hljs apache"><span class="hljs-section">&lt;Directory <span class="hljs-string">&quot;/var/www/example.com/html&quot;</span>&gt;</span><br>    <span class="hljs-attribute">AllowOverride</span> AuthConfig  # 允许认证配置覆盖<br>    <span class="hljs-comment"># 或者允许所有覆盖</span><br>    <span class="hljs-comment"># AllowOverride All</span><br><span class="hljs-section">&lt;/Directory&gt;</span><br></code></pre></td></tr></table></figure><h4 id="（2）创建-htaccess-文件"><a href="#（2）创建-htaccess-文件" class="headerlink" title="（2）创建 .htaccess 文件"></a>（2）创建 .htaccess 文件</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-built_in">sudo</span> vi /var/www/example.com/html/secure/.htaccess<br></code></pre></td></tr></table></figure><p>内容：</p><figure class="highlight apache"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><code class="hljs apache"><span class="hljs-attribute">AuthType</span> Basic<br><span class="hljs-attribute">AuthName</span> <span class="hljs-string">&quot;Protected Directory&quot;</span><br><span class="hljs-attribute">AuthUserFile</span> /etc/httpd/auth/.htpasswd<br><span class="hljs-attribute">Require</span> valid-user<br><br><span class="hljs-comment"># 其他.htaccess指令</span><br><span class="hljs-attribute">Options</span> -Indexes<br></code></pre></td></tr></table></figure><h3 id="6-认证与SSL-TLS结合"><a href="#6-认证与SSL-TLS结合" class="headerlink" title="6. 认证与SSL&#x2F;TLS结合"></a>6. 认证与SSL&#x2F;TLS结合</h3><p>对于生产环境，认证应该与HTTPS结合使用，避免密码明文传输。</p><figure class="highlight apache"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br></pre></td><td class="code"><pre><code class="hljs apache"><span class="hljs-comment"># 强制使用HTTPS进行认证</span><br><span class="hljs-section">&lt;VirtualHost *<span class="hljs-number">:443</span>&gt;</span><br>    <span class="hljs-attribute">ServerName</span> www.example.com<br>    <span class="hljs-attribute">DocumentRoot</span> <span class="hljs-string">&quot;/var/www/example.com/html&quot;</span><br>    <br>    <span class="hljs-comment"># SSL配置</span><br>    <span class="hljs-attribute">SSLEngine</span> <span class="hljs-literal">on</span><br>    <span class="hljs-attribute">SSLCertificateFile</span> /etc/ssl/certs/example.com.crt<br>    <span class="hljs-attribute">SSLCertificateKeyFile</span> /etc/ssl/private/example.com.key<br>    <br>    <span class="hljs-comment"># 安全目录配置</span><br>    <span class="hljs-section">&lt;Directory <span class="hljs-string">&quot;/var/www/example.com/html/secure&quot;</span>&gt;</span><br>        <span class="hljs-attribute">AuthType</span> Basic<br>        <span class="hljs-attribute">AuthName</span> <span class="hljs-string">&quot;Secure Login&quot;</span><br>        <span class="hljs-attribute">AuthUserFile</span> /etc/httpd/auth/.htpasswd<br>        <span class="hljs-attribute">Require</span> valid-user<br>    <span class="hljs-section">&lt;/Directory&gt;</span><br><span class="hljs-section">&lt;/VirtualHost&gt;</span><br><br><span class="hljs-comment"># 重定向HTTP到HTTPS</span><br><span class="hljs-section">&lt;VirtualHost *<span class="hljs-number">:80</span>&gt;</span><br>    <span class="hljs-attribute">ServerName</span> www.example.com<br>    <span class="hljs-attribute">Redirect</span> permanent / https://www.example.com/<br><span class="hljs-section">&lt;/VirtualHost&gt;</span><br></code></pre></td></tr></table></figure><h3 id="7-认证配置最佳实践"><a href="#7-认证配置最佳实践" class="headerlink" title="7. 认证配置最佳实践"></a>7. 认证配置最佳实践</h3><h4 id="（1）安全建议"><a href="#（1）安全建议" class="headerlink" title="（1）安全建议"></a>（1）安全建议</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-comment"># 设置密码文件权限</span><br><span class="hljs-built_in">sudo</span> <span class="hljs-built_in">chown</span> root:apache /etc/httpd/auth/.htpasswd<br><span class="hljs-built_in">sudo</span> <span class="hljs-built_in">chmod</span> 640 /etc/httpd/auth/.htpasswd<br><br><span class="hljs-comment"># 定期更改密码</span><br><span class="hljs-built_in">sudo</span> htpasswd /etc/httpd/auth/.htpasswd user1<br></code></pre></td></tr></table></figure><h4 id="（2）性能优化"><a href="#（2）性能优化" class="headerlink" title="（2）性能优化"></a>（2）性能优化</h4><p>对于大量用户的场景，考虑使用数据库认证：</p><figure class="highlight apache"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><code class="hljs apache"><span class="hljs-comment"># 使用数据库认证（需要mod_authn_dbd）</span><br><span class="hljs-attribute">AuthType</span> Basic<br><span class="hljs-attribute">AuthName</span> <span class="hljs-string">&quot;Members Area&quot;</span><br><span class="hljs-attribute">AuthBasicProvider</span> dbd<br><span class="hljs-attribute">AuthDBDUserPWQuery</span> <span class="hljs-string">&quot;SELECT password FROM users WHERE username = %s&quot;</span><br><span class="hljs-attribute">Require</span> valid-user<br></code></pre></td></tr></table></figure><h4 id="（3）错误页面定制"><a href="#（3）错误页面定制" class="headerlink" title="（3）错误页面定制"></a>（3）错误页面定制</h4><figure class="highlight apache"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><code class="hljs apache"><span class="hljs-comment"># 自定义认证错误页面</span><br><span class="hljs-attribute">ErrorDocument</span> <span class="hljs-number">401</span> /error/<span class="hljs-number">401</span>.html<br><span class="hljs-attribute">ErrorDocument</span> <span class="hljs-number">403</span> /error/<span class="hljs-number">403</span>.html<br></code></pre></td></tr></table></figure><h3 id="8-测试认证功能"><a href="#8-测试认证功能" class="headerlink" title="8. 测试认证功能"></a>8. 测试认证功能</h3><h4 id="（1）命令行测试"><a href="#（1）命令行测试" class="headerlink" title="（1）命令行测试"></a>（1）命令行测试</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-comment"># 测试认证（会返回401）</span><br>curl -I http://www.example.com/secure/<br><br><span class="hljs-comment"># 带认证测试</span><br>curl -u user1:password http://www.example.com/secure/<br><br><span class="hljs-comment"># 或分步操作</span><br>curl -u user1 http://www.example.com/secure/<br><span class="hljs-comment"># 会提示输入密码</span><br></code></pre></td></tr></table></figure><h4 id="（2）浏览器测试"><a href="#（2）浏览器测试" class="headerlink" title="（2）浏览器测试"></a>（2）浏览器测试</h4><ul><li>访问受保护URL</li><li>确认弹出登录框</li><li>输入正确用户名密码后能正常访问</li><li>测试错误密码时的拒绝访问</li></ul><h3 id="9-常见问题解决"><a href="#9-常见问题解决" class="headerlink" title="9. 常见问题解决"></a>9. 常见问题解决</h3><h4 id="（1）认证失败"><a href="#（1）认证失败" class="headerlink" title="（1）认证失败"></a>（1）认证失败</h4><ul><li><strong>检查密码文件路径</strong>：确保 <code>AuthUserFile</code> 路径正确</li><li><strong>检查文件权限</strong>：Apache用户需要能读取密码文件</li><li><strong>验证密码</strong>：使用 <code>htpasswd -v</code> 验证密码</li></ul><h4 id="（2）性能问题"><a href="#（2）性能问题" class="headerlink" title="（2）性能问题"></a>（2）性能问题</h4><ul><li>对于高流量站点，考虑使用数据库或缓存认证</li><li>启用 <code>mod_authn_socache</code> 模块缓存认证结果</li></ul><h4 id="（3）SELinux问题"><a href="#（3）SELinux问题" class="headerlink" title="（3）SELinux问题"></a>（3）SELinux问题</h4><p>如果认证目录在非标准位置，可能需要设置SELinux上下文：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-built_in">sudo</span> semanage fcontext -a -t httpd_sys_content_t <span class="hljs-string">&quot;/custom/auth/path(/.*)?&quot;</span><br><span class="hljs-built_in">sudo</span> restorecon -Rv /custom/auth/path<br></code></pre></td></tr></table></figure><h2 id="八、常见问题与解决方案"><a href="#八、常见问题与解决方案" class="headerlink" title="八、常见问题与解决方案"></a>八、常见问题与解决方案</h2><h3 id="1-Apache-启动失败：Job-for-httpd-service-failed"><a href="#1-Apache-启动失败：Job-for-httpd-service-failed" class="headerlink" title="1. Apache 启动失败：Job for httpd.service failed"></a>1. Apache 启动失败：<code>Job for httpd.service failed</code></h3><ul><li><strong>原因 1</strong>：配置文件语法错误；<br><strong>解决</strong>：执行 <code>sudo apachectl configtest</code> 查看错误位置（如行号、指令拼写错误），修改后重试。</li><li><strong>原因 2</strong>：80 端口被占用（如 Nginx 服务）；<br><strong>解决</strong>：查找占用进程 <code>sudo ss -tulpn | grep :80</code>，停止占用服务（如 <code>sudo systemctl stop nginx</code>）。</li><li><strong>原因 3</strong>：SELinux 拦截目录访问；<br><strong>解决</strong>：按步骤五设置目录的 SELinux 上下文（如 <code>httpd_log_t</code> 用于日志目录）。</li></ul><h3 id="2-访问页面显示-403-Forbidden（禁止访问）"><a href="#2-访问页面显示-403-Forbidden（禁止访问）" class="headerlink" title="2. 访问页面显示 403 Forbidden（禁止访问）"></a>2. 访问页面显示 403 Forbidden（禁止访问）</h3><ul><li><strong>原因 1</strong>：目录权限不足（Apache 无读取权限）；<br><strong>解决</strong>：设置目录权限 <code>sudo chmod -R 755 /var/www/your_site</code>，文件权限 <code>sudo chmod -R 644 /var/www/your_site/html/*</code>。</li><li><strong>原因 2</strong>：<code>Require all denied</code> 配置错误；<br><strong>解决</strong>：检查 <code>&lt;Directory&gt;</code> 块中的 <code>Require</code> 指令，确保为 <code>Require all granted</code>。</li></ul><h3 id="3-PHP-页面显示源码而非解析"><a href="#3-PHP-页面显示源码而非解析" class="headerlink" title="3. PHP 页面显示源码而非解析"></a>3. PHP 页面显示源码而非解析</h3><ul><li><strong>原因</strong>：未安装 <code>mod_php</code> 模块或未重启 Apache；<br><strong>解决</strong>：安装 <code>sudo yum install -y php</code>，重启 Apache <code>sudo systemctl restart httpd</code>。</li></ul>]]>
    </content>
    <id>https://netguy6.github.io/2026/02/05/CentOS%207%E6%90%AD%E5%BB%BAApache(httpd)%20web%20%E6%9C%8D%E5%8A%A1%E5%99%A8-%E9%9D%99%E6%80%81/</id>
    <link href="https://netguy6.github.io/2026/02/05/CentOS%207%E6%90%AD%E5%BB%BAApache(httpd)%20web%20%E6%9C%8D%E5%8A%A1%E5%99%A8-%E9%9D%99%E6%80%81/"/>
    <published>2026-02-04T16:00:00.000Z</published>
    <summary>CentOS 7 上 Apache httpd 服务的搭建、配置与静态网站部署方法。</summary>
    <title>CentOS 7搭建Apache(httpd) web 服务器-静态</title>
    <updated>2026-08-13T11:06:31.135Z</updated>
  </entry>
  <entry>
    <author>
      <name>net06</name>
    </author>
    <category term="linux" scheme="https://netguy6.github.io/categories/linux/"/>
    <category term="CentOS 7" scheme="https://netguy6.github.io/tags/CentOS-7/"/>
    <category term="vsftpd" scheme="https://netguy6.github.io/tags/vsftpd/"/>
    <content>
      <![CDATA[<h2 id="一、vsftpd-概述"><a href="#一、vsftpd-概述" class="headerlink" title="一、vsftpd 概述"></a>一、vsftpd 概述</h2><p>vsftpd（Very Secure FTP Daemon）是 Linux 系统中主流的 FTP 服务器软件，核心优势在于<strong>高安全性</strong>与<strong>轻量高效</strong>，支持匿名用户、本地用户、虚拟用户三种认证方式，具备以下特点：</p><ul><li>以低权限用户运行，降低对系统的潜在危害；</li><li>利用 <code>chroot()</code> 函数限制用户目录，防止越权访问系统文件；</li><li>高权限操作（如登录、文件权限修改）由特殊上层程序控制，需严格身份验证；</li><li>支持 IPv6、带宽限制、日志审计、虚拟主机、被动模式等功能；</li><li>完全开源免费，兼容 CentOS、Ubuntu、BSD 等 UNIX 类系统。</li></ul><h2 id="二、安装前准备"><a href="#二、安装前准备" class="headerlink" title="二、安装前准备"></a>二、安装前准备</h2><p>搭建前需处理防火墙与 SELinux 限制（避免端口或权限拦截），建议先测试环境临时关闭，正式环境按需配置规则。</p><h3 id="1-防火墙配置"><a href="#1-防火墙配置" class="headerlink" title="1. 防火墙配置"></a>1. 防火墙配置</h3><h4 id="（1）临时关闭防火墙（测试用）"><a href="#（1）临时关闭防火墙（测试用）" class="headerlink" title="（1）临时关闭防火墙（测试用）"></a>（1）临时关闭防火墙（测试用）</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-comment"># 停止防火墙服务</span><br>systemctl stop firewalld<br><span class="hljs-comment"># 禁止防火墙开机自启</span><br>systemctl <span class="hljs-built_in">disable</span> firewalld<br></code></pre></td></tr></table></figure><h4 id="（2）正式环境：开放-FTP-相关端口"><a href="#（2）正式环境：开放-FTP-相关端口" class="headerlink" title="（2）正式环境：开放 FTP 相关端口"></a>（2）正式环境：开放 FTP 相关端口</h4><p>vsftpd 需开放<strong>控制端口</strong>（默认 21，可自定义）和<strong>被动模式端口范围</strong>（数据传输用），示例如下：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-comment"># 开放控制端口（如默认21，或自定义60021）</span><br>firewall-cmd --permanent --zone=public --add-port=21/tcp<br><span class="hljs-comment"># 开放主动模式数据端口（20，仅主动模式需开放）</span><br>firewall-cmd --permanent --zone=public --add-port=20/tcp<br><span class="hljs-comment"># 开放被动模式端口范围（示例：64000-65000，可自定义）</span><br>firewall-cmd --permanent --zone=public --add-port=64000-65000/tcp<br><span class="hljs-comment"># 重新加载规则</span><br>firewall-cmd --reload<br><span class="hljs-comment"># 验证开放端口</span><br>firewall-cmd --list-ports<br></code></pre></td></tr></table></figure><h3 id="2-SELinux-配置"><a href="#2-SELinux-配置" class="headerlink" title="2. SELinux 配置"></a>2. SELinux 配置</h3><p>SELinux 可能拦截 FTP 访问，需临时关闭或永久配置权限：</p><h4 id="（1）临时关闭（测试用）"><a href="#（1）临时关闭（测试用）" class="headerlink" title="（1）临时关闭（测试用）"></a>（1）临时关闭（测试用）</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><code class="hljs bash">setenforce 0<br><span class="hljs-comment"># 验证状态（输出 Permissive 表示临时关闭）</span><br>getenforce<br></code></pre></td></tr></table></figure><h4 id="（2）永久关闭（或配置权限）"><a href="#（2）永久关闭（或配置权限）" class="headerlink" title="（2）永久关闭（或配置权限）"></a>（2）永久关闭（或配置权限）</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-comment"># 编辑 SELinux 配置文件</span><br>vim /etc/selinux/config<br><span class="hljs-comment"># 将 SELINUX=enforcing 改为 SELINUX=disabled</span><br>SELINUX=disabled<br><span class="hljs-comment"># 保存后重启系统生效（或临时生效用 setenforce 0）</span><br><br><span class="hljs-comment"># 若不关闭 SELINUX，可允许 FTP 全权限（推荐）</span><br>setsebool -P ftpd_full_access on<br></code></pre></td></tr></table></figure><h2 id="三、vsftpd-安装与基础运维"><a href="#三、vsftpd-安装与基础运维" class="headerlink" title="三、vsftpd 安装与基础运维"></a>三、vsftpd 安装与基础运维</h2><h3 id="1-检查是否已安装"><a href="#1-检查是否已安装" class="headerlink" title="1. 检查是否已安装"></a>1. 检查是否已安装</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-comment"># 方法1：查看已安装的 vsftpd 包</span><br>rpm -qa | grep vsftpd<br><span class="hljs-comment"># 方法2：查看 vsftpd 版本</span><br>vsftpd -v<br></code></pre></td></tr></table></figure><h3 id="2-安装-vsftpd"><a href="#2-安装-vsftpd" class="headerlink" title="2. 安装 vsftpd"></a>2. 安装 vsftpd</h3><p>通过 yum 一键安装（CentOS 官方源默认包含）：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">yum install -y vsftpd<br></code></pre></td></tr></table></figure><h3 id="3-服务运维命令"><a href="#3-服务运维命令" class="headerlink" title="3. 服务运维命令"></a>3. 服务运维命令</h3><table><thead><tr><th>功能</th><th>命令</th></tr></thead><tbody><tr><td>启动服务</td><td><code>systemctl start vsftpd.service</code></td></tr><tr><td>停止服务</td><td><code>systemctl stop vsftpd.service</code></td></tr><tr><td>重启服务（配置生效）</td><td><code>systemctl restart vsftpd.service</code></td></tr><tr><td>查看服务状态</td><td><code>systemctl status vsftpd.service</code></td></tr><tr><td>开机自启</td><td><code>systemctl enable vsftpd.service</code></td></tr><tr><td>禁止开机自启</td><td><code>systemctl disable vsftpd.service</code></td></tr></tbody></table><h2 id="四、核心配置（vsftpd-conf）"><a href="#四、核心配置（vsftpd-conf）" class="headerlink" title="四、核心配置（vsftpd.conf）"></a>四、核心配置（vsftpd.conf）</h2><p>vsftpd 主配置文件路径：<code>/etc/vsftpd/vsftpd.conf</code>，建议先备份原配置：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-built_in">cp</span> /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.backup<br></code></pre></td></tr></table></figure><figure class="highlight ini"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br></pre></td><td class="code"><pre><code class="hljs ini"><span class="hljs-comment">#是否允许匿名，默认no</span><br><span class="hljs-attr">anonymous_enable</span>=<span class="hljs-literal">NO</span><br><br><span class="hljs-comment">#这个设定值必须要为YES 时，在/etc/passwd内的账号才能以实体用户的方式登入我们的vsftpd主机</span><br><span class="hljs-attr">local_enable</span>=<span class="hljs-literal">YES</span><br><br><span class="hljs-comment">#具有写权限</span><br><span class="hljs-attr">write_enable</span>=<span class="hljs-literal">YES</span><br><br><span class="hljs-comment">#本地用户创建文件或目录的掩码</span><br><span class="hljs-attr">local_umask</span>=<span class="hljs-number">022</span><br><br><span class="hljs-comment">#当dirmessage_enable=YES时，可以设定这个项目来让vsftpd寻找该档案来显示讯息！您也可以设定其它档名！</span><br><span class="hljs-attr">dirmessage_enable</span>=<span class="hljs-literal">YES</span><br><br><span class="hljs-comment">#当设定为YES时，使用者上传与下载日志都会被纪录起来。记录日志与下一个xferlog_file设定选项有关</span><br><span class="hljs-attr">xferlog_enable</span>=<span class="hljs-literal">YES</span>xferlog_std_format=<span class="hljs-literal">YES</span><br><br><span class="hljs-comment">#上传与下载日志存放路径</span><br><span class="hljs-attr">xferlog_file</span>=/var/log/xferlog <br><br><span class="hljs-comment">#开启20端口</span><br><span class="hljs-attr">connect_from_port_20</span>=<span class="hljs-literal">YES</span><br><br><span class="hljs-comment">#关于系统安全的设定值：</span><br><span class="hljs-comment">#ascii_download_enable=YES(NO)</span><br><span class="hljs-comment">#如果设定为YES ，那么 client 就可以使用 ASCII 格式下载档案。</span><br><span class="hljs-comment">#一般来说，由于启动了这个设定项目可能会导致DoS 的攻击，因此预设是NO。</span><br><span class="hljs-comment">#ascii_upload_enable=YES(NO)</span><br><span class="hljs-comment">#与上一个设定类似的，只是这个设定针对上传而言！预设是NO。</span><br><span class="hljs-attr">ascii_upload_enable</span>=<span class="hljs-literal">NO</span><br><span class="hljs-attr">ascii_download_enable</span>=<span class="hljs-literal">NO</span><br><span class="hljs-comment">#通过搭配能实现以下几种效果： </span><br><span class="hljs-comment">#①当chroot_list_enable=YES，chroot_local_user=YES时，在/etc/vsftpd.chroot_list文件中列出的用户，可以切换到其他目录；未在文件中列出的用户，不能切换到其他目录。 </span><br><span class="hljs-comment">#②当chroot_list_enable=YES，chroot_local_user=NO时，在/etc/vsftpd.chroot_list文件中列出的用户，不能切换到其他目录；未在文件中列出的用户，可以切换到其他目录。 </span><br><span class="hljs-comment">#③当chroot_list_enable=NO，chroot_local_user=YES时，所有的用户均不能切换到其他目录。 </span><br><span class="hljs-comment">#④当chroot_list_enable=NO，chroot_local_user=NO时，所有的用户均可以切换到其他目录。</span><br><br><span class="hljs-attr">chroot_local_user</span>=<span class="hljs-literal">YES</span><br><span class="hljs-attr">chroot_list_enable</span>=<span class="hljs-literal">YES</span><br><span class="hljs-attr">chroot_list_file</span>=/etc/vsftpd/chroot_list<br><br><span class="hljs-comment">#这个是pam模块的名称，我们放置在/etc/pam.d/vsftpd</span><br><span class="hljs-attr">pam_service_name</span>=vsftpd<br><br><span class="hljs-comment">#当然我们都习惯支持TCP Wrappers的啦！</span><br><span class="hljs-attr">tcp_wrappers</span>=<span class="hljs-literal">YES</span><br><br><span class="hljs-comment">#不添加下面这个会报错：500 OOPS: vsftpd: refusing to run with writable root inside chroot()</span><br><span class="hljs-attr">allow_writeable_chroot</span>=<span class="hljs-literal">YES</span><br><br><span class="hljs-comment">#ftp的端口号</span><br><span class="hljs-attr">listen_port</span>=<span class="hljs-number">60021</span><br><span class="hljs-comment">#启动被动式联机(passivemode)</span><br><span class="hljs-attr">pasv_enable</span>=<span class="hljs-literal">YES</span><br><span class="hljs-comment">#上面两个是与passive mode 使用的 port number 有关，如果您想要使用65400到65410 这 11 个 port 来进行被动式资料的连接，可以这样设定</span><br><span class="hljs-attr">pasv_min_port</span>=<span class="hljs-number">65400</span><br><span class="hljs-attr">pasv_max_port</span>=<span class="hljs-number">65410</span><br><br><span class="hljs-comment">#FTP访问目录</span><br><span class="hljs-attr">local_root</span>=/data/ftp/<br></code></pre></td></tr></table></figure><p>以下是核心配置参数，按功能分类：</p><h3 id="1-基础访问控制"><a href="#1-基础访问控制" class="headerlink" title="1. 基础访问控制"></a>1. 基础访问控制</h3><table><thead><tr><th>参数</th><th>取值</th><th>说明</th></tr></thead><tbody><tr><td><code>anonymous_enable</code></td><td>YES&#x2F;NO</td><td>是否允许匿名用户登录（默认 YES，安全起见设为 <strong>NO</strong>）</td></tr><tr><td><code>local_enable</code></td><td>YES&#x2F;NO</td><td>是否允许本地系统用户（&#x2F;etc&#x2F;passwd 中的用户）登录（必须设为 <strong>YES</strong>）</td></tr><tr><td><code>write_enable</code></td><td>YES&#x2F;NO</td><td>是否允许用户写操作（上传、删除、创建目录，需设为 <strong>YES</strong> 才支持）</td></tr><tr><td><code>local_umask</code></td><td>022</td><td>本地用户创建文件 &#x2F; 目录的权限掩码（文件：644&#x3D;666-022，目录：755&#x3D;777-022）</td></tr></tbody></table><h3 id="2-目录限制（chroot-配置）"><a href="#2-目录限制（chroot-配置）" class="headerlink" title="2. 目录限制（chroot 配置）"></a>2. 目录限制（chroot 配置）</h3><p><code>chroot</code> 用于将用户禁锢在指定目录，防止访问系统其他文件，核心参数组合如下：</p><table><thead><tr><th><code>chroot_local_user</code></th><th><code>chroot_list_enable</code></th><th><code>chroot_list_file</code> 作用</th><th>效果总结</th></tr></thead><tbody><tr><td>YES</td><td>YES</td><td>列出的用户 <strong>允许</strong> 切换到其他目录</td><td>仅列表内用户可越权，其余用户被禁锢</td></tr><tr><td>YES</td><td>NO</td><td>无效</td><td><strong>所有用户</strong> 均被禁锢在主目录</td></tr><tr><td>NO</td><td>YES</td><td>列出的用户 <strong>禁止</strong> 切换到其他目录</td><td>仅列表内用户被禁锢，其余用户可越权</td></tr><tr><td>NO</td><td>NO</td><td>无效</td><td><strong>所有用户</strong> 均允许切换到其他目录（不推荐）</td></tr></tbody></table><p><strong>必加参数</strong>：<code>allow_writeable_chroot=YES</code> → 解决 “500 OOPS: vsftpd: refusing to run with writable root inside chroot ()” 报错（允许被禁锢用户的主目录有写权限）。</p><h3 id="3-被动模式配置"><a href="#3-被动模式配置" class="headerlink" title="3. 被动模式配置"></a>3. 被动模式配置</h3><p>FTP 被动模式更适合客户端在防火墙后（如家庭网络），需指定端口范围：</p><figure class="highlight apache"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><code class="hljs apache"><span class="hljs-comment"># 启用被动模式</span><br><span class="hljs-attribute">pasv_enable</span>=YES<br><span class="hljs-comment"># 被动模式最小端口（自定义，如 64000）</span><br><span class="hljs-attribute">pasv_min_port</span>=<span class="hljs-number">64000</span><br><span class="hljs-comment"># 被动模式最大端口（自定义，如 65000）</span><br><span class="hljs-attribute">pasv_max_port</span>=<span class="hljs-number">65000</span><br><span class="hljs-comment"># 自定义控制端口（默认 21，可选，如 60021）</span><br><span class="hljs-attribute">listen_port</span>=<span class="hljs-number">60021</span><br></code></pre></td></tr></table></figure><h3 id="4-日志与安全配置"><a href="#4-日志与安全配置" class="headerlink" title="4. 日志与安全配置"></a>4. 日志与安全配置</h3><figure class="highlight apache"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br></pre></td><td class="code"><pre><code class="hljs apache"><span class="hljs-comment"># 启用上传/下载日志</span><br><span class="hljs-attribute">xferlog_enable</span>=YES<br><span class="hljs-comment"># 日志格式（标准格式）</span><br><span class="hljs-attribute">xferlog_std_format</span>=YES<br><span class="hljs-comment"># 日志路径</span><br><span class="hljs-attribute">xferlog_file</span>=/var/log/xferlog<br><span class="hljs-comment"># 禁止 ASCII 格式上传/下载（防止 DoS 攻击，默认 NO）</span><br><span class="hljs-attribute">ascii_upload_enable</span>=NO<br><span class="hljs-attribute">ascii_download_enable</span>=NO<br><span class="hljs-comment"># PAM 认证模块（默认 vsftpd，对应 /etc/pam.d/vsftpd）</span><br><span class="hljs-attribute">pam_service_name</span>=vsftpd<br><span class="hljs-comment"># 支持 TCP Wrappers（增强安全性）</span><br><span class="hljs-attribute">tcp_wrappers</span>=YES<br><span class="hljs-comment"># 本地用户默认访问目录（自定义，如 /data/ftp）</span><br><span class="hljs-attribute">local_root</span>=/data/ftp<br></code></pre></td></tr></table></figure><h2 id="五、用户管理"><a href="#五、用户管理" class="headerlink" title="五、用户管理"></a>五、用户管理</h2><p>vsftpd 支持<strong>本地用户</strong>和<strong>虚拟用户</strong>，虚拟用户与系统用户隔离，安全性更高，以下分两种场景配置：</p><h3 id="1-本地用户配置（单用户-简单场景）"><a href="#1-本地用户配置（单用户-简单场景）" class="headerlink" title="1. 本地用户配置（单用户 &#x2F; 简单场景）"></a>1. 本地用户配置（单用户 &#x2F; 简单场景）</h3><h4 id="（1）创建本地用户"><a href="#（1）创建本地用户" class="headerlink" title="（1）创建本地用户"></a>（1）创建本地用户</h4><p>创建仅用于 FTP 登录、禁止 SSH 登录的用户（如 <code>ftpuser</code>）：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-comment"># -d：指定主目录（与 local_root 一致，如 /data/ftp）</span><br><span class="hljs-comment"># -s：指定登录shell（/sbin/nologin 或 /usr/bin/nologin，禁止 SSH 登录）</span><br><span class="hljs-comment"># -M：不自动创建主目录（已手动创建则加）</span><br>useradd -d /data/ftp -s /sbin/nologin ftpuser<br><br><span class="hljs-comment"># 若提示“shell /sbin/nologin does not exist”，需添加到 /etc/shells</span><br><span class="hljs-built_in">echo</span> <span class="hljs-string">&quot;/sbin/nologin&quot;</span> &gt;&gt; /etc/shells<br></code></pre></td></tr></table></figure><h4 id="（2）设置用户密码"><a href="#（2）设置用户密码" class="headerlink" title="（2）设置用户密码"></a>（2）设置用户密码</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-comment"># 交互设置密码</span><br>passwd ftpuser<br><span class="hljs-comment"># 非交互设置密码（如密码 ftppassword）</span><br><span class="hljs-built_in">echo</span> <span class="hljs-string">&quot;ftppassword&quot;</span> | passwd --stdin ftpuser<br></code></pre></td></tr></table></figure><h4 id="（3）配置目录权限"><a href="#（3）配置目录权限" class="headerlink" title="（3）配置目录权限"></a>（3）配置目录权限</h4><p>确保用户对主目录有访问权限：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-comment"># 创建主目录（若未创建）</span><br><span class="hljs-built_in">mkdir</span> -p /data/ftp<br><span class="hljs-comment"># 设置目录所有者为 ftpuser</span><br><span class="hljs-built_in">chown</span> -R ftpuser:ftpuser /data/ftp<br><span class="hljs-comment"># 设置目录权限（755：用户可读写执行，其他只读执行）</span><br><span class="hljs-built_in">chmod</span> -R 755 /data/ftp<br><br><span class="hljs-comment"># （可选）创建上传目录（单独授权写权限）</span><br><span class="hljs-built_in">mkdir</span> -p /data/ftp/upload<br><span class="hljs-built_in">chown</span> ftpuser:ftpuser /data/ftp/upload<br><span class="hljs-built_in">chmod</span> 755 /data/ftp/upload<br></code></pre></td></tr></table></figure><h3 id="2-虚拟用户配置（多用户-高安全场景）"><a href="#2-虚拟用户配置（多用户-高安全场景）" class="headerlink" title="2. 虚拟用户配置（多用户 &#x2F; 高安全场景）"></a>2. 虚拟用户配置（多用户 &#x2F; 高安全场景）</h3><p>虚拟用户仅存在于 FTP 服务中，与系统用户隔离，适合多用户管理。</p><h4 id="（1）创建宿主系统用户"><a href="#（1）创建宿主系统用户" class="headerlink" title="（1）创建宿主系统用户"></a>（1）创建宿主系统用户</h4><p>虚拟用户需映射到一个低权限的系统宿主用户（如 <code>vsftpd_guest</code>）：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-comment"># 创建宿主用户，禁止 SSH 登录，主目录 /home/vsftpd</span><br>useradd -d /home/vsftpd -s /sbin/nologin vsftpd_guest<br><span class="hljs-comment"># 设置目录权限</span><br><span class="hljs-built_in">chown</span> -R vsftpd_guest:vsftpd_guest /home/vsftpd<br><span class="hljs-built_in">chmod</span> -R 755 /home/vsftpd<br></code></pre></td></tr></table></figure><h4 id="（2）创建虚拟用户列表"><a href="#（2）创建虚拟用户列表" class="headerlink" title="（2）创建虚拟用户列表"></a>（2）创建虚拟用户列表</h4><p>创建文本文件存储虚拟用户账号密码（一行账号、一行密码）：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><code class="hljs bash">vim /etc/vsftpd/vuser_passwd<br><span class="hljs-comment"># 内容示例（用户 wcj、hss，密码均为 123456）</span><br>wcj<br>123456<br>hss<br>123456<br></code></pre></td></tr></table></figure><h4 id="（3）生成虚拟用户数据库文件"><a href="#（3）生成虚拟用户数据库文件" class="headerlink" title="（3）生成虚拟用户数据库文件"></a>（3）生成虚拟用户数据库文件</h4><p>vsftpd 需读取数据库格式的用户文件，用 <code>db_load</code> 生成：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-comment"># -T：转换格式，-t hash：哈希算法，-f：源文件，输出 db 文件</span><br>db_load -T -t <span class="hljs-built_in">hash</span> -f /etc/vsftpd/vuser_passwd /etc/vsftpd/vuser_passwd.db<br><span class="hljs-comment"># 设置权限（仅 root 可读，防止密码泄露）</span><br><span class="hljs-built_in">chmod</span> 600 /etc/vsftpd/vuser_passwd.db<br></code></pre></td></tr></table></figure><h4 id="（4）配置虚拟用户独立目录"><a href="#（4）配置虚拟用户独立目录" class="headerlink" title="（4）配置虚拟用户独立目录"></a>（4）配置虚拟用户独立目录</h4><p>为每个虚拟用户创建独立配置文件，实现目录隔离：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-comment"># 创建虚拟用户配置目录</span><br><span class="hljs-built_in">mkdir</span> /etc/vsftpd/vuser_conf<br><br><span class="hljs-comment"># 为每个用户创建配置文件（如 wcj、hss）</span><br><span class="hljs-built_in">touch</span> /etc/vsftpd/vuser_conf/wcj<br><span class="hljs-built_in">touch</span> /etc/vsftpd/vuser_conf/hss<br></code></pre></td></tr></table></figure><h4 id="（5）编辑虚拟用户配置"><a href="#（5）编辑虚拟用户配置" class="headerlink" title="（5）编辑虚拟用户配置"></a>（5）编辑虚拟用户配置</h4><p>以用户 <code>wcj</code> 为例，配置其独立目录和权限：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><code class="hljs bash">vim /etc/vsftpd/vuser_conf/wcj<br><span class="hljs-comment"># 内容如下</span><br>local_root=/home/vsftpd/wcj  <span class="hljs-comment"># wcj 的 FTP 目录</span><br>write_enable=YES             <span class="hljs-comment"># 允许写操作</span><br>anon_world_readable_only=NO  <span class="hljs-comment"># 允许浏览目录</span><br>anon_upload_enable=YES       <span class="hljs-comment"># 允许上传</span><br>anon_mkdir_write_enable=YES  <span class="hljs-comment"># 允许创建目录</span><br>anon_other_write_enable=YES  <span class="hljs-comment"># 允许删除/重命名</span><br></code></pre></td></tr></table></figure><h4 id="（6）创建用户目录并授权"><a href="#（6）创建用户目录并授权" class="headerlink" title="（6）创建用户目录并授权"></a>（6）创建用户目录并授权</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-comment"># 为每个虚拟用户创建目录</span><br><span class="hljs-built_in">mkdir</span> -p /home/vsftpd/wcj /home/vsftpd/hss<br><span class="hljs-comment"># 创建上传子目录（解决主目录写权限问题）</span><br><span class="hljs-built_in">mkdir</span> -p /home/vsftpd/wcj/upload /home/vsftpd/hss/upload<br><span class="hljs-comment"># 授权（宿主用户 vsftpd_guest 拥有权限）</span><br><span class="hljs-built_in">chown</span> -R vsftpd_guest:vsftpd_guest /home/vsftpd<br><span class="hljs-built_in">chmod</span> -R 755 /home/vsftpd<br><span class="hljs-built_in">chmod</span> 777 /home/vsftpd/wcj/upload /home/vsftpd/hss/upload<br></code></pre></td></tr></table></figure><h4 id="（7）修改-vsftpd-conf-启用虚拟用户"><a href="#（7）修改-vsftpd-conf-启用虚拟用户" class="headerlink" title="（7）修改 vsftpd.conf 启用虚拟用户"></a>（7）修改 vsftpd.conf 启用虚拟用户</h4><p>在 <code>vsftpd.conf</code> 末尾添加：</p><figure class="highlight apache"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><code class="hljs apache"><span class="hljs-comment"># 启用虚拟用户功能</span><br><span class="hljs-attribute">guest_enable</span>=YES<br><span class="hljs-comment"># 虚拟用户映射的宿主用户（即 vsftpd_guest）</span><br><span class="hljs-attribute">guest_username</span>=vsftpd_guest<br><span class="hljs-comment"># 虚拟用户配置文件目录</span><br><span class="hljs-attribute">user_config_dir</span>=/etc/vsftpd/vuser_conf<br><span class="hljs-comment"># 虚拟用户权限：YES 与本地用户同权，NO 与匿名用户同权（默认 NO）</span><br><span class="hljs-attribute">virtual_use_local_privs</span>=YES<br><span class="hljs-comment"># 被动模式端口范围（与前文一致）</span><br><span class="hljs-attribute">pasv_min_port</span>=<span class="hljs-number">10060</span><br><span class="hljs-attribute">pasv_max_port</span>=<span class="hljs-number">10090</span><br></code></pre></td></tr></table></figure><h2 id="六、服务测试"><a href="#六、服务测试" class="headerlink" title="六、服务测试"></a>六、服务测试</h2><p>配置完成后重启 vsftpd，通过以下方式测试是否正常运行：</p><h3 id="1-终端测试（ftp-lftp-命令）"><a href="#1-终端测试（ftp-lftp-命令）" class="headerlink" title="1. 终端测试（ftp&#x2F;lftp 命令）"></a>1. 终端测试（ftp&#x2F;lftp 命令）</h3><h4 id="（1）ftp-命令"><a href="#（1）ftp-命令" class="headerlink" title="（1）ftp 命令"></a>（1）ftp 命令</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-comment"># 连接 FTP 服务器（IP 为服务器地址，端口默认 21，自定义需加端口）</span><br>ftp 192.168.10.110 21<br><span class="hljs-comment"># 输入用户名（本地用户 ftpuser 或虚拟用户 wcj）</span><br>Name (192.168.10.110:root): ftpuser<br><span class="hljs-comment"># 输入密码</span><br>Password:<br><span class="hljs-comment"># 登录成功后，执行操作（示例）</span><br>ftp&gt; <span class="hljs-built_in">ls</span>  <span class="hljs-comment"># 查看目录</span><br>ftp&gt; <span class="hljs-built_in">cd</span> upload  <span class="hljs-comment"># 进入上传目录</span><br>ftp&gt; put test.txt  <span class="hljs-comment"># 上传本地文件 test.txt</span><br>ftp&gt; get test.txt  <span class="hljs-comment"># 下载服务器文件 test.txt</span><br>ftp&gt; <span class="hljs-built_in">bye</span>  <span class="hljs-comment"># 退出连接</span><br></code></pre></td></tr></table></figure><h4 id="（2）lftp-命令（支持非交互登录）"><a href="#（2）lftp-命令（支持非交互登录）" class="headerlink" title="（2）lftp 命令（支持非交互登录）"></a>（2）lftp 命令（支持非交互登录）</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-comment"># 格式：lftp 用户名:密码@IP:端口</span><br>lftp ftpuser:ftppassword@192.168.10.110:21<br><span class="hljs-comment"># 执行操作</span><br>lftp ftpuser@192.168.10.110:/&gt; <span class="hljs-built_in">ls</span><br>lftp ftpuser@192.168.10.110:/&gt; <span class="hljs-built_in">cd</span> upload<br>lftp ftpuser@192.168.10.110:/upload&gt; put test.txt<br></code></pre></td></tr></table></figure><h3 id="2-浏览器测试"><a href="#2-浏览器测试" class="headerlink" title="2. 浏览器测试"></a>2. 浏览器测试</h3><p>在浏览器地址栏输入 <code>ftp://服务器IP:端口</code>，输入用户名密码后，可查看目录和下载文件（浏览器仅支持下载，不支持上传）。</p><h3 id="3-客户端测试（推荐）"><a href="#3-客户端测试（推荐）" class="headerlink" title="3. 客户端测试（推荐）"></a>3. 客户端测试（推荐）</h3><p>使用 FTP 客户端（如 FileZilla、FlashFXP）：</p><ul><li>主机：服务器 IP</li><li>端口：21（或自定义端口）</li><li>用户名 &#x2F; 密码：本地用户或虚拟用户账号</li><li>连接后可上传、下载、管理文件，直观验证功能。</li></ul><h2 id="七、常见问题与解决"><a href="#七、常见问题与解决" class="headerlink" title="七、常见问题与解决"></a>七、常见问题与解决</h2><h3 id="1-报错：500-OOPS-could-not-read-chroot-list-file-etc-vsftpd-chroot-list"><a href="#1-报错：500-OOPS-could-not-read-chroot-list-file-etc-vsftpd-chroot-list" class="headerlink" title="1. 报错：500 OOPS: could not read chroot list file:&#x2F;etc&#x2F;vsftpd&#x2F;chroot_list"></a>1. 报错：500 OOPS: could not read chroot list file:&#x2F;etc&#x2F;vsftpd&#x2F;chroot_list</h3><p><strong>原因</strong>：配置了 <code>chroot_list_file=/etc/vsftpd/chroot_list</code>，但该文件不存在。<strong>解决</strong>：创建空的 chroot_list 文件：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-built_in">touch</span> /etc/vsftpd/chroot_list<br><span class="hljs-comment"># 若需允许特定用户越权，将用户名添加到文件（一行一个）</span><br><span class="hljs-built_in">echo</span> <span class="hljs-string">&quot;ftpuser&quot;</span> &gt;&gt; /etc/vsftpd/chroot_list<br></code></pre></td></tr></table></figure><h3 id="2-报错：500-OOPS-chroot"><a href="#2-报错：500-OOPS-chroot" class="headerlink" title="2. 报错：500 OOPS: chroot"></a>2. 报错：500 OOPS: chroot</h3><p><strong>原因</strong>：SELinux 限制了 chroot 操作。<strong>解决</strong>：临时关闭 SELinux（<code>setenforce 0</code>）或永久关闭（修改 <code>/etc/selinux/config</code>），或设置 SELinux 权限：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">setsebool -P ftpd_full_access on<br></code></pre></td></tr></table></figure><h3 id="3-登录失败：331-Please-specify-the-password-后报错"><a href="#3-登录失败：331-Please-specify-the-password-后报错" class="headerlink" title="3. 登录失败：331 Please specify the password. 后报错"></a>3. 登录失败：331 Please specify the password. 后报错</h3><p><strong>原因</strong>：</p><ul><li><p>用户不在允许登录列表（<code>user_list</code>）；</p></li><li><p>用户在禁止登录列表（<code>/etc/vsftpd/ftpusers</code>）；</p></li><li><p>目录权限不足。</p><p><strong>解决</strong>：</p></li><li><p>将用户添加到 <code>/etc/vsftpd/user_list</code>（一行一个）；</p></li><li><p>确保用户不在 <code>/etc/vsftpd/ftpusers</code> 中；</p></li><li><p>重新配置目录权限（<code>chown -R 用户名:组 /目录</code>，<code>chmod -R 755 /目录</code>）。</p></li></ul><h2 id="八、进阶配置：FTPS-加密传输"><a href="#八、进阶配置：FTPS-加密传输" class="headerlink" title="八、进阶配置：FTPS 加密传输"></a>八、进阶配置：FTPS 加密传输</h2><p>FTP 默认明文传输，通过 FTPS（FTP over SSL&#x2F;TLS）加密数据，需生成 SSL 证书：</p><h3 id="1-安装-openssl"><a href="#1-安装-openssl" class="headerlink" title="1. 安装 openssl"></a>1. 安装 openssl</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">yum install -y openssl openssl-devel<br></code></pre></td></tr></table></figure><h3 id="2-生成-CA-私钥与自签证书"><a href="#2-生成-CA-私钥与自签证书" class="headerlink" title="2. 生成 CA 私钥与自签证书"></a>2. 生成 CA 私钥与自签证书</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-comment"># 生成 CA 私钥（2048位，路径 /etc/pki/CA/private/cakey.pem）</span><br>openssl genrsa -out /etc/pki/CA/private/cakey.pem 2048<br><span class="hljs-built_in">chmod</span> 400 /etc/pki/CA/private/cakey.pem<br><br><span class="hljs-comment"># 生成 CA 自签证书（有效期 365 天）</span><br>openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -out /etc/pki/CA/cacert.pem -days 365<br><span class="hljs-comment"># 按提示输入信息（Country Name、State 等，可随意填写）</span><br></code></pre></td></tr></table></figure><h3 id="3-生成-vsftpd-证书与私钥"><a href="#3-生成-vsftpd-证书与私钥" class="headerlink" title="3. 生成 vsftpd 证书与私钥"></a>3. 生成 vsftpd 证书与私钥</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-comment"># 创建证书目录</span><br><span class="hljs-built_in">mkdir</span> -p /etc/vsftpd/.ssl<br><span class="hljs-built_in">chmod</span> 400 /etc/vsftpd/.ssl<br><br><span class="hljs-comment"># 生成 vsftpd 私钥</span><br>openssl genrsa -out /etc/vsftpd/.ssl/vsftpd.key 2048<br><span class="hljs-built_in">chmod</span> 400 /etc/vsftpd/.ssl/vsftpd.key<br><br><span class="hljs-comment"># 生成证书请求文件</span><br>openssl req -new -key /etc/vsftpd/.ssl/vsftpd.key -out /etc/vsftpd/.ssl/vsftpd.csr<br><br><span class="hljs-comment"># 签发 vsftpd 证书（需先初始化 CA 索引和序列号）</span><br><span class="hljs-built_in">touch</span> /etc/pki/CA/index.txt<br><span class="hljs-built_in">echo</span> 01 &gt; /etc/pki/CA/serial<br>openssl ca -<span class="hljs-keyword">in</span> /etc/vsftpd/.ssl/vsftpd.csr -out /etc/vsftpd/.ssl/vsftpd.crt -days 365<br></code></pre></td></tr></table></figure><h3 id="4-配置-vsftpd-启用-SSL"><a href="#4-配置-vsftpd-启用-SSL" class="headerlink" title="4. 配置 vsftpd 启用 SSL"></a>4. 配置 vsftpd 启用 SSL</h3><p>在 <code>vsftpd.conf</code> 末尾添加：</p><figure class="highlight apache"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br></pre></td><td class="code"><pre><code class="hljs apache"><span class="hljs-comment"># 启用 SSL</span><br><span class="hljs-attribute">ssl_enable</span>=YES<br><span class="hljs-comment"># 强制本地用户登录和数据传输加密</span><br><span class="hljs-attribute">force_local_logins_ssl</span>=YES<br><span class="hljs-attribute">force_local_data_ssl</span>=YES<br><span class="hljs-comment"># 禁用 SSL 会话重用</span><br><span class="hljs-attribute">require_ssl_reuse</span>=NO<br><span class="hljs-comment"># 支持的 SSL 版本</span><br><span class="hljs-attribute">ssl_tlsv1</span>=YES<br><span class="hljs-attribute">ssl_sslv2</span>=YES<br><span class="hljs-attribute">ssl_sslv3</span>=YES<br><span class="hljs-comment"># SSL 密码等级</span><br><span class="hljs-attribute">ssl_ciphers</span>=HIGH<br><span class="hljs-comment"># 证书和私钥路径</span><br><span class="hljs-attribute">rsa_cert_file</span>=/etc/vsftpd/.ssl/vsftpd.crt<br><span class="hljs-attribute">rsa_private_key_file</span>=/etc/vsftpd/.ssl/vsftpd.key<br><span class="hljs-comment"># 启用 SSL 调试日志</span><br><span class="hljs-attribute">debug_ssl</span>=YES<br></code></pre></td></tr></table></figure><h3 id="5-重启服务并测试"><a href="#5-重启服务并测试" class="headerlink" title="5. 重启服务并测试"></a>5. 重启服务并测试</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><code class="hljs bash">systemctl restart vsftpd<br><span class="hljs-comment"># 使用支持 FTPS 的客户端（如 FileZilla），选择“FTP over TLS”连接</span><br></code></pre></td></tr></table></figure><h2 id="九、常用-FTP-命令"><a href="#九、常用-FTP-命令" class="headerlink" title="九、常用 FTP 命令"></a>九、常用 FTP 命令</h2><table><thead><tr><th>命令</th><th>功能说明</th></tr></thead><tbody><tr><td><code>ascii</code></td><td>以 ASCII 格式传输文件（默认）</td></tr><tr><td><code>binary</code></td><td>以二进制格式传输文件（推荐，避免文件损坏）</td></tr><tr><td><code>get 远程文件 [本地文件]</code></td><td>下载远程文件到本地</td></tr><tr><td><code>put 本地文件 [远程文件]</code></td><td>上传本地文件到远程</td></tr><tr><td><code>mget 远程文件列表</code></td><td>批量下载文件（如 <code>mget *.txt</code>）</td></tr><tr><td><code>mput 本地文件列表</code></td><td>批量上传文件（如 <code>mput *.txt</code>）</td></tr><tr><td><code>ls [远程目录]</code></td><td>列出远程目录文件</td></tr><tr><td><code>cd 远程目录</code></td><td>切换远程目录</td></tr><tr><td><code>lcd 本地目录</code></td><td>切换本地目录</td></tr><tr><td><code>mkdir 目录名</code></td><td>在远程创建目录</td></tr><tr><td><code>rmdir 目录名</code></td><td>删除远程空目录</td></tr><tr><td><code>delete 文件名</code></td><td>删除远程文件</td></tr><tr><td><code>rename 旧名 新名</code></td><td>重命名远程文件</td></tr><tr><td><code>pwd</code></td><td>显示当前远程目录</td></tr><tr><td><code>bye/quit/exit</code></td><td>退出 FTP 连接</td></tr></tbody></table>]]>
    </content>
    <id>https://netguy6.github.io/2026/02/05/CentOS%207%E6%90%AD%E5%BB%BAvsftpd%E6%9C%8D%E5%8A%A1%E5%99%A8/</id>
    <link href="https://netguy6.github.io/2026/02/05/CentOS%207%E6%90%AD%E5%BB%BAvsftpd%E6%9C%8D%E5%8A%A1%E5%99%A8/"/>
    <published>2026-02-04T16:00:00.000Z</published>
    <summary>CentOS 7 下 vsftpd 服务安装、配置与常见认证方式的实践记录。</summary>
    <title>CentOS 7搭建vsftpd服务器</title>
    <updated>2026-08-13T11:06:31.135Z</updated>
  </entry>
  <entry>
    <author>
      <name>net06</name>
    </author>
    <category term="linux" scheme="https://netguy6.github.io/categories/linux/"/>
    <category term="CentOS 7" scheme="https://netguy6.github.io/tags/CentOS-7/"/>
    <category term="Samba" scheme="https://netguy6.github.io/tags/Samba/"/>
    <content>
      <![CDATA[<h2 id="一、安装-Samba-服务"><a href="#一、安装-Samba-服务" class="headerlink" title="一、安装 Samba 服务"></a>一、安装 Samba 服务</h2><p>Samba 主要包含三个包：<code>samba</code>（服务端）、<code>samba-client</code>（客户端工具）、<code>samba-common</code>（通用配置文件）。</p><h3 id="1-安装软件包"><a href="#1-安装软件包" class="headerlink" title="1. 安装软件包"></a>1. 安装软件包</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-comment"># 安装 Samba 相关组件</span><br><span class="hljs-built_in">sudo</span> yum install -y samba samba-client samba-common<br></code></pre></td></tr></table></figure><h3 id="2-验证安装结果"><a href="#2-验证安装结果" class="headerlink" title="2. 验证安装结果"></a>2. 验证安装结果</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-comment"># 查看 Samba 版本</span><br>smbd --version<br><span class="hljs-comment"># 输出示例：Version 4.10.16</span><br></code></pre></td></tr></table></figure><h2 id="二、Samba-服务基础管理"><a href="#二、Samba-服务基础管理" class="headerlink" title="二、Samba 服务基础管理"></a>二、Samba 服务基础管理</h2><p>通过 <code>systemctl</code> 命令管理 Samba 服务（主服务为 <code>smb</code> 和 <code>nmb</code>，<code>nmb</code> 用于 NetBIOS 名称解析）。</p><table><thead><tr><th>功能描述</th><th>命令</th></tr></thead><tbody><tr><td>启动服务</td><td><code>sudo systemctl start smb nmb</code></td></tr><tr><td>停止服务</td><td><code>sudo systemctl stop smb nmb</code></td></tr><tr><td>重启服务</td><td><code>sudo systemctl restart smb nmb</code></td></tr><tr><td>重载配置（不中断连接）</td><td><code>sudo systemctl reload smb nmb</code></td></tr><tr><td>开机自启</td><td><code>sudo systemctl enable smb nmb --now</code></td></tr><tr><td>查看服务状态</td><td><code>sudo systemctl status smb nmb</code></td></tr></tbody></table><h2 id="三、防火墙与-SELinux-配置"><a href="#三、防火墙与-SELinux-配置" class="headerlink" title="三、防火墙与 SELinux 配置"></a>三、防火墙与 SELinux 配置</h2><p>默认情况下，防火墙和 SELinux 会拦截 Samba 服务，需手动开放权限。</p><h3 id="1-防火墙配置（开放-Samba-端口）"><a href="#1-防火墙配置（开放-Samba-端口）" class="headerlink" title="1. 防火墙配置（开放 Samba 端口）"></a>1. 防火墙配置（开放 Samba 端口）</h3><p>Samba 依赖 <strong>TCP 139、445</strong> 和 <strong>UDP 137、138</strong> 端口，通过 <code>firewalld</code> 开放：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-comment"># 1. 永久开放 Samba 服务（firewalld 内置了 samba 服务规则）</span><br><span class="hljs-built_in">sudo</span> firewall-cmd --permanent --zone=public --add-service=samba<br><br><span class="hljs-comment"># 2. 重新加载防火墙规则</span><br><span class="hljs-built_in">sudo</span> firewall-cmd --reload<br><br><span class="hljs-comment"># 3. 验证开放的服务（输出应包含 samba）</span><br><span class="hljs-built_in">sudo</span> firewall-cmd --list-services<br></code></pre></td></tr></table></figure><h3 id="2-SELinux-配置（允许-Samba-访问目录）"><a href="#2-SELinux-配置（允许-Samba-访问目录）" class="headerlink" title="2. SELinux 配置（允许 Samba 访问目录）"></a>2. SELinux 配置（允许 Samba 访问目录）</h3><p>SELinux 需设置特定布尔值和安全上下文，确保 Samba 可读写共享目录：</p><h4 id="（1）设置-SELinux-布尔值"><a href="#（1）设置-SELinux-布尔值" class="headerlink" title="（1）设置 SELinux 布尔值"></a>（1）设置 SELinux 布尔值</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-comment"># 允许 Samba 共享目录给所有用户（-P 表示永久生效）</span><br><span class="hljs-built_in">sudo</span> setsebool -P samba_enable_home_dirs on  <span class="hljs-comment"># 允许访问家目录共享</span><br><span class="hljs-built_in">sudo</span> setsebool -P samba_export_all_rw on     <span class="hljs-comment"># 允许读写共享目录</span><br></code></pre></td></tr></table></figure><h4 id="（2）配置共享目录的-SELinux-上下文"><a href="#（2）配置共享目录的-SELinux-上下文" class="headerlink" title="（2）配置共享目录的 SELinux 上下文"></a>（2）配置共享目录的 SELinux 上下文</h4><p>若共享目录为 <code>/data/samba_share</code>，需设置 <code>samba_share_t</code> 上下文：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-comment"># 1. 为共享目录设置安全上下文（递归应用子目录）</span><br><span class="hljs-built_in">sudo</span> semanage fcontext -a -t samba_share_t <span class="hljs-string">&quot;/data/samba_share(/.*)?&quot;</span><br><br><span class="hljs-comment"># 2. 应用上下文配置</span><br><span class="hljs-built_in">sudo</span> restorecon -Rv /data/samba_share<br><br><span class="hljs-comment"># 3. 验证上下文（输出应包含 samba_share_t）</span><br><span class="hljs-built_in">ls</span> -dZ /data/samba_share<br></code></pre></td></tr></table></figure><h2 id="四、创建共享目录与权限配置"><a href="#四、创建共享目录与权限配置" class="headerlink" title="四、创建共享目录与权限配置"></a>四、创建共享目录与权限配置</h2><h3 id="1-创建共享目录"><a href="#1-创建共享目录" class="headerlink" title="1. 创建共享目录"></a>1. 创建共享目录</h3><p>以 <code>/data/samba_share</code> 为例（可自定义路径）：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-comment"># 创建共享目录</span><br><span class="hljs-built_in">sudo</span> <span class="hljs-built_in">mkdir</span> -p /data/samba_share<br><br><span class="hljs-comment"># 创建测试文件（用于验证访问）</span><br><span class="hljs-built_in">sudo</span> <span class="hljs-built_in">echo</span> <span class="hljs-string">&quot;Samba Share Test File&quot;</span> &gt; /data/samba_share/test.txt<br></code></pre></td></tr></table></figure><h3 id="2-设置目录权限"><a href="#2-设置目录权限" class="headerlink" title="2. 设置目录权限"></a>2. 设置目录权限</h3><p>确保 Samba 用户对目录有读写权限：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-comment"># 1. 设置目录所有者为 root（或自定义用户）</span><br><span class="hljs-built_in">sudo</span> <span class="hljs-built_in">chown</span> -R root:root /data/samba_share<br><br><span class="hljs-comment"># 2. 设置权限（所有者读写执行，组和其他用户读写）</span><br><span class="hljs-built_in">sudo</span> <span class="hljs-built_in">chmod</span> -R 775 /data/samba_share<br><br><span class="hljs-comment"># 3. 若需要匿名用户可写，可放宽权限（谨慎使用）</span><br><span class="hljs-comment"># sudo chmod -R 777 /data/samba_share</span><br></code></pre></td></tr></table></figure><h2 id="五、配置-Samba-共享（核心步骤）"><a href="#五、配置-Samba-共享（核心步骤）" class="headerlink" title="五、配置 Samba 共享（核心步骤）"></a>五、配置 Samba 共享（核心步骤）</h2><p>Samba 主配置文件为 <code>/etc/samba/smb.conf</code>，通过修改该文件定义共享规则。</p><h3 id="1-备份默认配置"><a href="#1-备份默认配置" class="headerlink" title="1. 备份默认配置"></a>1. 备份默认配置</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-built_in">sudo</span> <span class="hljs-built_in">cp</span> /etc/samba/smb.conf /etc/samba/smb.conf.bak<br></code></pre></td></tr></table></figure><h3 id="2-编辑配置文件"><a href="#2-编辑配置文件" class="headerlink" title="2. 编辑配置文件"></a>2. 编辑配置文件</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-built_in">sudo</span> vi /etc/samba/smb.conf<br></code></pre></td></tr></table></figure><h4 id="（1）全局配置（-global-段）"><a href="#（1）全局配置（-global-段）" class="headerlink" title="（1）全局配置（[global] 段）"></a>（1）全局配置（<code>[global]</code> 段）</h4><p>保留核心配置，删除冗余内容：</p><figure class="highlight ini"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><code class="hljs ini"><span class="hljs-section">[global]</span><br>    <span class="hljs-attr">workgroup</span> = WORKGROUP        <span class="hljs-comment"># 工作组名称（需与 Windows 客户端一致，默认 WORKGROUP）</span><br>    server <span class="hljs-attr">string</span> = Samba Server %v  <span class="hljs-comment"># 服务器描述</span><br>    netbios <span class="hljs-attr">name</span> = centos-samba  <span class="hljs-comment">#  NetBIOS 名称（客户端显示的服务器名）</span><br>    <span class="hljs-attr">security</span> = user              <span class="hljs-comment"># 认证模式（user：需用户名密码；share：匿名）</span><br>    map to <span class="hljs-attr">guest</span> = Bad User      <span class="hljs-comment"># 错误用户映射为来宾（匿名）</span><br>    dns <span class="hljs-attr">proxy</span> = <span class="hljs-literal">no</span>               <span class="hljs-comment"># 禁用 DNS 代理</span><br></code></pre></td></tr></table></figure><h4 id="（2）添加共享配置（自定义共享名称）"><a href="#（2）添加共享配置（自定义共享名称）" class="headerlink" title="（2）添加共享配置（自定义共享名称）"></a>（2）添加共享配置（自定义共享名称）</h4><p>在文件末尾添加共享规则（以 <code>[samba_share]</code> 为例）：</p><figure class="highlight ini"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><code class="hljs ini"><span class="hljs-comment"># 共享名称（客户端显示的文件夹名）</span><br><span class="hljs-section">[samba_share]</span><br>    <span class="hljs-attr">comment</span> = Public Samba Share  <span class="hljs-comment"># 共享描述（可选）</span><br>    <span class="hljs-attr">path</span> = /data/samba_share      <span class="hljs-comment"># 共享目录绝对路径</span><br>    <span class="hljs-attr">browseable</span> = <span class="hljs-literal">yes</span>              <span class="hljs-comment"># 是否允许浏览（yes：可见；no：隐藏）</span><br>    <span class="hljs-attr">writable</span> = <span class="hljs-literal">yes</span>                <span class="hljs-comment"># 是否允许写入（yes：可读写；no：只读）</span><br>    guest <span class="hljs-attr">ok</span> = <span class="hljs-literal">no</span>                 <span class="hljs-comment"># 是否允许匿名访问（no：需认证；yes：匿名）</span><br>    valid <span class="hljs-attr">users</span> = samba_user      <span class="hljs-comment"># 允许访问的用户（多个用户用逗号分隔）</span><br>    create <span class="hljs-attr">mask</span> = <span class="hljs-number">0664</span>            <span class="hljs-comment"># 新建文件的权限掩码（664：用户/组读写，其他读）</span><br>    directory <span class="hljs-attr">mask</span> = <span class="hljs-number">0775</span>         <span class="hljs-comment"># 新建目录的权限掩码（775：用户/组读写执行，其他读执行）</span><br></code></pre></td></tr></table></figure><p><strong>配置项说明</strong>：</p><ul><li><code>guest ok = yes</code>：允许匿名访问（无需密码），适合公共共享；</li><li><code>valid users</code>：限制特定用户访问（需先创建 Samba 用户）；</li><li><code>create mask</code>&#x2F;<code>directory mask</code>：控制新建文件&#x2F;目录的默认权限。</li></ul><h2 id="六、创建-Samba-用户"><a href="#六、创建-Samba-用户" class="headerlink" title="六、创建 Samba 用户"></a>六、创建 Samba 用户</h2><p>Samba 用户需基于系统用户（但密码独立），步骤如下：</p><h3 id="1-创建系统用户（若不存在）"><a href="#1-创建系统用户（若不存在）" class="headerlink" title="1. 创建系统用户（若不存在）"></a>1. 创建系统用户（若不存在）</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-comment"># 创建系统用户 samba_user（-s /sbin/nologin 禁止 SSH 登录，仅用于 Samba）</span><br><span class="hljs-built_in">sudo</span> useradd -s /sbin/nologin samba_user<br></code></pre></td></tr></table></figure><h3 id="2-添加为-Samba-用户并设置密码"><a href="#2-添加为-Samba-用户并设置密码" class="headerlink" title="2. 添加为 Samba 用户并设置密码"></a>2. 添加为 Samba 用户并设置密码</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-comment"># 添加 samba_user 为 Samba 用户（-a：添加；-s：设置密码）</span><br><span class="hljs-built_in">sudo</span> smbpasswd -a samba_user<br><span class="hljs-comment"># 按提示输入密码（如 samba123），确认密码</span><br><br><span class="hljs-comment"># 启用 Samba 用户（默认添加后为启用状态，若禁用可执行）</span><br><span class="hljs-comment"># sudo smbpasswd -e samba_user</span><br></code></pre></td></tr></table></figure><h3 id="3-查看-Samba-用户列表"><a href="#3-查看-Samba-用户列表" class="headerlink" title="3. 查看 Samba 用户列表"></a>3. 查看 Samba 用户列表</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-built_in">sudo</span> pdbedit -L  <span class="hljs-comment"># 列出所有 Samba 用户</span><br><span class="hljs-comment"># 输出示例：samba_user:1001:</span><br></code></pre></td></tr></table></figure><h2 id="七、验证配置并重启服务"><a href="#七、验证配置并重启服务" class="headerlink" title="七、验证配置并重启服务"></a>七、验证配置并重启服务</h2><h3 id="1-检查配置文件语法"><a href="#1-检查配置文件语法" class="headerlink" title="1. 检查配置文件语法"></a>1. 检查配置文件语法</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><code class="hljs bash">testparm  <span class="hljs-comment"># 验证 smb.conf 语法</span><br><span class="hljs-comment"># 输出 &quot;Loaded services file OK.&quot; 表示配置正确</span><br></code></pre></td></tr></table></figure><h3 id="2-重启-Samba-服务"><a href="#2-重启-Samba-服务" class="headerlink" title="2. 重启 Samba 服务"></a>2. 重启 Samba 服务</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-built_in">sudo</span> systemctl restart smb nmb<br></code></pre></td></tr></table></figure><h2 id="八、客户端访问测试"><a href="#八、客户端访问测试" class="headerlink" title="八、客户端访问测试"></a>八、客户端访问测试</h2><h3 id="1-Windows-客户端访问"><a href="#1-Windows-客户端访问" class="headerlink" title="1. Windows 客户端访问"></a>1. Windows 客户端访问</h3><ol><li>打开“文件资源管理器”，在地址栏输入 <code>\\服务器IP</code>（如 <code>\\192.168.1.100</code>）；</li><li>弹出认证窗口，输入 Samba 用户名（<code>samba_user</code>）和密码（<code>samba123</code>）；</li><li>成功访问后可看到 <code>samba_share</code> 共享文件夹，尝试创建&#x2F;删除文件验证权限。</li></ol><h3 id="2-Linux-客户端访问"><a href="#2-Linux-客户端访问" class="headerlink" title="2. Linux 客户端访问"></a>2. Linux 客户端访问</h3><p>使用 <code>smbclient</code> 工具测试：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-comment"># 列出服务器共享目录</span><br>smbclient -L //192.168.1.100 -U samba_user<br><span class="hljs-comment"># 输入密码后可看到共享列表</span><br><br><span class="hljs-comment"># 挂载共享目录到本地（需安装 cifs-utils）</span><br><span class="hljs-built_in">sudo</span> yum install -y cifs-utils<br><span class="hljs-built_in">sudo</span> <span class="hljs-built_in">mkdir</span> /mnt/samba<br><span class="hljs-built_in">sudo</span> mount -t cifs //192.168.1.100/samba_share /mnt/samba -o username=samba_user,password=samba123<br><br><span class="hljs-comment"># 验证挂载（查看测试文件）</span><br><span class="hljs-built_in">cat</span> /mnt/samba/test.txt  <span class="hljs-comment"># 输出：Samba Share Test File</span><br></code></pre></td></tr></table></figure><h3 id="3-macOS-客户端访问"><a href="#3-macOS-客户端访问" class="headerlink" title="3. macOS 客户端访问"></a>3. macOS 客户端访问</h3><ol><li>打开“访达”，按 <code>Command + K</code>；</li><li>输入 <code>smb://192.168.1.100</code>，点击“连接”；</li><li>输入用户名和密码，访问共享目录。</li></ol>]]>
    </content>
    <id>https://netguy6.github.io/2026/02/05/CentOS7%20%E6%90%AD%E5%BB%BASamba%E6%9C%8D%E5%8A%A1%E5%99%A8/</id>
    <link href="https://netguy6.github.io/2026/02/05/CentOS7%20%E6%90%AD%E5%BB%BASamba%E6%9C%8D%E5%8A%A1%E5%99%A8/"/>
    <published>2026-02-04T16:00:00.000Z</published>
    <summary>CentOS 7 安装与配置 Samba 服务，实现 Linux 与 Windows 文件共享。</summary>
    <title>CentOS7 搭建Samba服务器</title>
    <updated>2026-08-13T11:06:31.136Z</updated>
  </entry>
  <entry>
    <author>
      <name>net06</name>
    </author>
    <category term="linux" scheme="https://netguy6.github.io/categories/linux/"/>
    <category term="CentOS 7" scheme="https://netguy6.github.io/tags/CentOS-7/"/>
    <category term="LAMP" scheme="https://netguy6.github.io/tags/LAMP/"/>
    <category term="https" scheme="https://netguy6.github.io/tags/https/"/>
    <content>
      <![CDATA[<h2 id="一、环境概述"><a href="#一、环境概述" class="headerlink" title="一、环境概述"></a>一、环境概述</h2><ul><li><p><strong>架构组成</strong>：Linux（CentOS7）+ Apache（httpd）+ MariaDB（MySQL 兼容）+ PHP</p></li><li><p><strong>核心用途</strong>：搭建动态网站（如 Discuz、WordPress）、企业内部系统</p></li><li><p><strong>适配场景</strong>：中小型项目、测试环境、内部业务系统（高并发场景建议优化或换用 LNMP &#x2F; 容器架构）</p></li></ul><h2 id="二、前置准备"><a href="#二、前置准备" class="headerlink" title="二、前置准备"></a>二、前置准备</h2><h3 id="1-系统初始化"><a href="#1-系统初始化" class="headerlink" title="1. 系统初始化"></a>1. 系统初始化</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-comment"># 1. 更新系统依赖</span><br><br>yum update -y<br><br><span class="hljs-comment"># 2. 安装基础工具</span><br><br>yum install -y vim wget net-tools<br><br><span class="hljs-comment"># 3. 防火墙配置（开放80/443/22端口）</span><br><br>firewall-cmd --permanent --add-port=80/tcp<br><br>firewall-cmd --permanent --add-port=443/tcp<br><br>firewall-cmd --permanent --add-port=22/tcp<br><br>firewall-cmd --reload<br><br> <span class="hljs-comment">#或者停止防火墙服务</span><br> <br>systemctl stop firewalld<br>systemctl <span class="hljs-built_in">disable</span> firewalld<br><br><span class="hljs-comment"># 4. SELinux配置（关键！避免权限拦截）</span><br><br><span class="hljs-comment"># 临时关闭（测试用）</span><br><br>setenforce 0<br><br><span class="hljs-comment"># 永久关闭（编辑配置文件）</span><br><br>vim /etc/selinux/config<br><br><span class="hljs-comment"># 修改为：SELINUX=disabled（需重启生效）</span><br></code></pre></td></tr></table></figure><h3 id="2-组件版本说明"><a href="#2-组件版本说明" class="headerlink" title="2. 组件版本说明"></a>2. 组件版本说明</h3><table><thead><tr><th>组件</th><th>推荐版本</th><th>兼容范围</th><th>安装方式</th></tr></thead><tbody><tr><td>Apache</td><td>2.4.x（系统默认）</td><td>CentOS7 自带</td><td>yum 安装</td></tr><tr><td>MariaDB</td><td>5.5.x&#x2F;10.x</td><td>兼容 MySQL 协议</td><td>yum 安装</td></tr><tr><td>PHP</td><td>5.4.x（默认）&#x2F;7.4.x</td><td>5.4 适配老系统，7.4 适配新应用</td><td>yum &#x2F; 第三方源</td></tr></tbody></table><h2 id="三、核心组件安装与配置"><a href="#三、核心组件安装与配置" class="headerlink" title="三、核心组件安装与配置"></a>三、核心组件安装与配置</h2><h3 id="（一）Apache（httpd）安装配置"><a href="#（一）Apache（httpd）安装配置" class="headerlink" title="（一）Apache（httpd）安装配置"></a>（一）Apache（httpd）安装配置</h3><h4 id="1-安装与启动"><a href="#1-安装与启动" class="headerlink" title="1. 安装与启动"></a>1. 安装与启动</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-comment"># 安装</span><br><br>yum install -y httpd mod_ssl<br><br><span class="hljs-comment"># 启动并设置开机自启</span><br><br>systemctl start httpd<br><br>systemctl <span class="hljs-built_in">enable</span> httpd<br><br><span class="hljs-comment"># 验证状态（确保active (running)）</span><br><br>systemctl status httpd<br></code></pre></td></tr></table></figure><h4 id="2-关键配置（解决-PHP-解析问题，正常解析可以不用管）"><a href="#2-关键配置（解决-PHP-解析问题，正常解析可以不用管）" class="headerlink" title="2. 关键配置（解决 PHP 解析问题，正常解析可以不用管）"></a>2. 关键配置（解决 PHP 解析问题，正常解析可以不用管）</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-comment"># 编辑PHP解析配置文件</span><br><br>vim /etc/httpd/conf.d/php.conf<br><br><span class="hljs-comment"># 确保以下配置存在（核心！）</span><br><br>LoadModule php5_module modules/libphp5.so  <span class="hljs-comment"># PHP5.x版本</span><br><br><span class="hljs-comment"># 或 LoadModule php7_module modules/libphp7.so（PHP7.x版本）</span><br><br>AddType application/x-httpd-php .php       <span class="hljs-comment"># 识别PHP文件</span><br><br>&lt;IfModule dir_module&gt;<br><br>   DirectoryIndex index.php index.html    <span class="hljs-comment"># 优先加载index.php</span><br><br>&lt;/IfModule&gt;<br><br><span class="hljs-comment"># 验证配置语法</span><br><br>httpd -t<br><br><span class="hljs-comment"># 重启生效</span><br><br>systemctl restart httpd<br></code></pre></td></tr></table></figure><h4 id="3-虚拟主机配置（可选，多网站部署）"><a href="#3-虚拟主机配置（可选，多网站部署）" class="headerlink" title="3. 虚拟主机配置（可选，多网站部署）"></a>3. 虚拟主机配置（可选，多网站部署）</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-comment"># 创建虚拟主机配置文件</span><br><br>vim /etc/httpd/conf.d/vhost.conf<br><br><span class="hljs-comment"># 配置示例（替换为实际域名/路径）</span><br><br>&lt;VirtualHost *:80&gt;<br><br>   ServerName www.example.com<br><br>   DocumentRoot /var/www/discuz<br><br>   ErrorLog /var/log/httpd/discuz_error.log<br><br>   CustomLog /var/log/httpd/discuz_access.log combined<br><br>   &lt;Directory <span class="hljs-string">&quot;/var/www/dsicuz&quot;</span>&gt;<br><br>       Require all granted  <span class="hljs-comment"># 允许所有访问</span><br><br>       Options Indexes FollowSymLinks<br><br>   &lt;/Directory&gt;<br><br>&lt;/VirtualHost&gt;<br><br><span class="hljs-comment"># 创建网站目录并重启</span><br><br><span class="hljs-built_in">mkdir</span> -p /var/www/discuz<br></code></pre></td></tr></table></figure><h4 id="4-修改httpd主配置文件"><a href="#4-修改httpd主配置文件" class="headerlink" title="4. 修改httpd主配置文件"></a>4. 修改httpd主配置文件</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-comment">#关闭主服务器工作目录，添加默认索引文件 index.php</span><br><br>vi /etc/httpd/conf/httpd.conf <br>…… <br><span class="hljs-comment">#DocumentRoot &quot;/var/www/html&quot; </span><br>…… <br>&lt;IfModule dir_module&gt; <br> DirectoryIndex index.php index.html <br>&lt;/IfModule&gt; <br>……<br><br>systemctl restart httpd<br></code></pre></td></tr></table></figure><h3 id="（二）MariaDB-安装配置"><a href="#（二）MariaDB-安装配置" class="headerlink" title="（二）MariaDB 安装配置"></a>（二）MariaDB 安装配置</h3><h4 id="1-安装与初始化"><a href="#1-安装与初始化" class="headerlink" title="1. 安装与初始化"></a>1. 安装与初始化</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-comment"># 安装</span><br><br>yum install -y mariadb-server mariadb<br><br><span class="hljs-comment"># 启动并设置开机自启</span><br><br>systemctl start mariadb<br><br>systemctl <span class="hljs-built_in">enable</span> mariadb<br><br><span class="hljs-comment"># 安全初始化（设置root密码、禁用匿名用户）</span><br><br>mysql_secure_installation<br><br><span class="hljs-comment"># 按提示操作：设置root密码→删除匿名用户→禁止root远程登录（按需关闭）→删除测试库</span><br></code></pre></td></tr></table></figure><h4 id="2-数据库用户与权限配置（应用部署必备）"><a href="#2-数据库用户与权限配置（应用部署必备）" class="headerlink" title="2. 数据库用户与权限配置（应用部署必备）"></a>2. 数据库用户与权限配置（应用部署必备）</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-comment"># 登录数据库</span><br><br>mysql -u root -p<br><br><span class="hljs-comment"># 创建应用数据库（如WordPress/Discuz）</span><br><br>CREATE DATABASE wordpress_db;<br><br><span class="hljs-comment"># 创建专用用户并授权（避免使用root）</span><br><br>CREATE USER <span class="hljs-string">&#x27;wp_user&#x27;</span>@<span class="hljs-string">&#x27;localhost&#x27;</span> IDENTIFIED BY <span class="hljs-string">&#x27;StrongPass123!&#x27;</span>;<br><br>GRANT ALL PRIVILEGES ON wordpress_db.* TO <span class="hljs-string">&#x27;wp_user&#x27;</span>@<span class="hljs-string">&#x27;localhost&#x27;</span>;<br><br><span class="hljs-comment">#或 grant all privileges on *.* to root@&#x27;%&#x27; identified by &quot;000000&quot;; </span><br><br>FLUSH PRIVILEGES;<br><br><span class="hljs-comment"># 退出数据库</span><br><br>EXIT;<br></code></pre></td></tr></table></figure><h3 id="（三）PHP-安装与扩展配置"><a href="#（三）PHP-安装与扩展配置" class="headerlink" title="（三）PHP 安装与扩展配置"></a>（三）PHP 安装与扩展配置</h3><h4 id="1-基础安装（PHP5-4-x-默认版本）"><a href="#1-基础安装（PHP5-4-x-默认版本）" class="headerlink" title="1. 基础安装（PHP5.4.x 默认版本）"></a>1. 基础安装（PHP5.4.x 默认版本）</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-comment"># 安装PHP及核心扩展</span><br><br>yum install -y php php-mysql php-gd php-mbstring php-xml php-curl<br><br><span class="hljs-comment"># 验证版本</span><br><br><br>php -v  <span class="hljs-comment"># 输出PHP 5.4.16等版本信息</span><br><br><span class="hljs-comment"># 验证扩展加载（创建测试文件）</span><br><br><span class="hljs-built_in">echo</span> <span class="hljs-string">&quot;&lt;?php phpinfo(); ?&gt;&quot;</span> &gt; /var/www/html/phpinfo.php<br><br><span class="hljs-comment"># 浏览器访问：http://服务器IP/phpinfo.php，查看mysql/mysqli扩展是否存在</span><br></code></pre></td></tr></table></figure><h4 id="2-PHP-版本升级（可选，适配新应用）"><a href="#2-PHP-版本升级（可选，适配新应用）" class="headerlink" title="2. PHP 版本升级（可选，适配新应用）"></a>2. PHP 版本升级（可选，适配新应用）</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-comment"># 安装Remi源（支持高版本PHP）</span><br><br>yum install -y http://rpms.remirepo.net/enterprise/remi-release-7.rpm<br><br><span class="hljs-comment"># 启用PHP7.4源</span><br><br>yum-config-manager --<span class="hljs-built_in">enable</span> remi-php74<br><br><span class="hljs-comment"># 安装PHP7.4及扩展</span><br><br>yum install -y php74 php74-php-fpm php74-php-mysqlnd php74-php-gd php74-php-mbstring<br><br><span class="hljs-comment"># 重启Apache</span><br><br>systemctl restart httpd<br></code></pre></td></tr></table></figure><h2 id="四、网站部署实战"><a href="#四、网站部署实战" class="headerlink" title="四、网站部署实战"></a>四、网站部署实战</h2><h3 id="1-下载与解压"><a href="#1-下载与解压" class="headerlink" title="1. 下载与解压"></a>1. 下载与解压</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-comment"># 进入网站根目录</span><br><br><span class="hljs-built_in">cd</span> /var/www/discuz<br><br><span class="hljs-comment"># 下载WordPress安装包</span><br><br>wget https://wordpress.org/latest.tar.gz<br><br><span class="hljs-comment"># 解压并授权</span><br><br>tar -xzvf latest.tar.gz<br><br><span class="hljs-built_in">mv</span> wordpress/* ./<br><br><span class="hljs-built_in">cp</span> -r upload/* ./<br><br><span class="hljs-built_in">rm</span> -rf wordpress latest.tar.gz<br><br><span class="hljs-comment"># 设置权限（关键！避免Forbidden错误）</span><br><br><span class="hljs-built_in">chown</span> -R apache:apache /var/www/discuz<br><br><span class="hljs-built_in">chmod</span> -R 755 /var/www/discuz  <span class="hljs-comment"># 目录权限</span><br><br>find /var/www/discuz -<span class="hljs-built_in">type</span> f -<span class="hljs-built_in">exec</span> <span class="hljs-built_in">chmod</span> 644 &#123;&#125; \;  <span class="hljs-comment"># 文件权限</span><br></code></pre></td></tr></table></figure><h3 id="2-配置与安装"><a href="#2-配置与安装" class="headerlink" title="2. 配置与安装"></a>2. 配置与安装</h3><ol><li><p>浏览器访问：<code>http://服务器IP</code>，选择语言</p></li><li><p>填写数据库信息（前面创建的 wordpress_db、wp_user、密码）</p></li><li><p>设置网站标题、管理员账号密码，完成安装</p></li></ol><h3 id="3-适配-PHP5-4-x-注意事项"><a href="#3-适配-PHP5-4-x-注意事项" class="headerlink" title="3. 适配 PHP5.4.x 注意事项"></a>3. 适配 PHP5.4.x 注意事项</h3><ul><li><p>PHP5.4.x 仅支持 WordPress 3.7-4.9.x 版本（新版 WordPress 需 PHP7.3+）</p></li><li><p>若提示 “缺少 MySQL 扩展”，重新安装扩展：<code>yum install -y php-mysql</code></p></li><li><p>插件 &#x2F; 主题优先选择兼容 PHP5.4 的旧版本</p></li></ul><h2 id="五、HTTPS-配置（双服务器架构：CA-Web）"><a href="#五、HTTPS-配置（双服务器架构：CA-Web）" class="headerlink" title="五、HTTPS 配置（双服务器架构：CA+Web）"></a>五、HTTPS 配置（双服务器架构：CA+Web）</h2><h3 id="（一）CA-服务器配置（192-168-227-135）"><a href="#（一）CA-服务器配置（192-168-227-135）" class="headerlink" title="（一）CA 服务器配置（192.168.227.135）"></a>（一）CA 服务器配置（192.168.227.135）</h3><h4 id="1-生成根证书"><a href="#1-生成根证书" class="headerlink" title="1. 生成根证书"></a>1. 生成根证书</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-comment"># 创建CA工作目录（没有的就创建）</span><br><br><span class="hljs-built_in">mkdir</span> -p /etc/pki/CA/&#123;private,certs,newcerts,crl&#125;<br><br><span class="hljs-built_in">touch</span> /etc/pki/CA/index.txt<br><br><span class="hljs-built_in">echo</span> 01 &gt; /etc/pki/CA/serial<br><br><span class="hljs-comment"># 生成根私钥（保密！）</span><br><br>openssl genrsa -out /etc/pki/CA/private/cakey.pem 2048<br><br><span class="hljs-built_in">chmod</span> 600 /etc/pki/CA/private/cakey.pem<br><br><span class="hljs-comment"># 生成根证书（有效期10年）</span><br><br>openssl req -new -x509 -days 3650 -key /etc/pki/CA/private/cakey.pem -out /etc/pki/CA/cacert.pem<br><br><span class="hljs-comment"># 填写信息：国家(CN)→省份→城市→机构→部门→CA域名→邮箱</span><br></code></pre></td></tr></table></figure><h3 id="（二）Web-服务器配置（192-168-227-134）"><a href="#（二）Web-服务器配置（192-168-227-134）" class="headerlink" title="（二）Web 服务器配置（192.168.227.134）"></a>（二）Web 服务器配置（192.168.227.134）</h3><h4 id="1-生成证书请求（CSR）"><a href="#1-生成证书请求（CSR）" class="headerlink" title="1. 生成证书请求（CSR）"></a>1. 生成证书请求（CSR）</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-comment"># 创建证书目录</span><br><br><span class="hljs-built_in">mkdir</span> -p /etc/httpd/ssl<br><br><span class="hljs-comment"># 生成Web服务器私钥</span><br><br>openssl genrsa -out /etc/httpd/ssl/web.key 2048<br><br><span class="hljs-comment"># 生成CSR（Common Name填写Web服务器IP/域名）</span><br><br>openssl req -new -key /etc/httpd/ssl/web.key -out /etc/httpd/ssl/web.csr<br><br><span class="hljs-comment"># 上传CSR到CA服务器</span><br><br>scp /etc/httpd/ssl/web.csr root@192.168.227.135:/tmp/<br></code></pre></td></tr></table></figure><h4 id="2-CA-签署证书并传回"><a href="#2-CA-签署证书并传回" class="headerlink" title="2. CA 签署证书并传回"></a>2. CA 签署证书并传回</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-comment"># CA服务器签署证书（有效期1年）</span><br><br>openssl ca -<span class="hljs-keyword">in</span> /tmp/web.csr -out /etc/pki/CA/certs/web.crt -days 365<br><br><span class="hljs-comment"># 传回Web服务器</span><br><br>scp /etc/pki/CA/certs/web.crt root@192.168.227.134:/etc/httpd/ssl/<br><br>scp /etc/pki/CA/cacert.pem root@192.168.227.134:/etc/httpd/ssl/<br></code></pre></td></tr></table></figure><h4 id="3-Apache-HTTPS-配置"><a href="#3-Apache-HTTPS-配置" class="headerlink" title="3. Apache HTTPS 配置"></a>3. Apache HTTPS 配置</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-comment"># 编辑SSL配置文件</span><br><br>vim /etc/httpd/conf.d/ssl.conf<br><br><span class="hljs-comment"># 修改关键配置</span><br><br>SSLCertificateKeyFile /etc/httpd/ssl/web.key<br><br>SSLCertificateFile /etc/httpd/ssl/web.crt<br><br>SSLCertificateChainFile /etc/httpd/ssl/cacert.pem<br><br><span class="hljs-comment"># 重启Apache</span><br><br>systemctl restart httpd<br><br><span class="hljs-comment"># 测试访问：https://服务器IP（首次提示证书不受信任，内部测试可忽略）</span><br></code></pre></td></tr></table></figure><h2 id="六、常见问题排查"><a href="#六、常见问题排查" class="headerlink" title="六、常见问题排查"></a>六、常见问题排查</h2><h3 id="1-访问-PHP-显示源代码"><a href="#1-访问-PHP-显示源代码" class="headerlink" title="1. 访问 PHP 显示源代码"></a>1. 访问 PHP 显示源代码</h3><ul><li><p><strong>原因</strong>：Apache 未加载 PHP 模块或未配置解析规则</p></li><li><p><strong>解决</strong>：</p></li></ul><ol><li><p>检查模块：<code>httpd -M | grep php</code>（无输出则重新安装 PHP）</p></li><li><p>确认 php.conf 配置（AddType&#x2F;DirectoryIndex）</p></li><li><p>重启 Apache：<code>systemctl restart httpd</code></p></li></ol><h3 id="2-403-Forbidden（禁止访问）"><a href="#2-403-Forbidden（禁止访问）" class="headerlink" title="2. 403 Forbidden（禁止访问）"></a>2. 403 Forbidden（禁止访问）</h3><ul><li><p><strong>原因</strong>：文件权限不足、SELinux 拦截、Apache 配置限制</p></li><li><p><strong>解决</strong>：</p></li></ul><ol><li><p>修复权限：<code>chown -R apache:apache /var/www/html &amp;&amp; chmod -R 755 /var/www/html</code></p></li><li><p>SELinux 配置：<code>chcon -R -t httpd_sys_content_t /var/www/html</code></p></li><li><p>检查 Apache 配置：<code>&lt;Directory&gt;</code>块添加<code>Require all granted</code></p></li></ol><h3 id="3-缺少-MySQL-扩展"><a href="#3-缺少-MySQL-扩展" class="headerlink" title="3. 缺少 MySQL 扩展"></a>3. 缺少 MySQL 扩展</h3><ul><li><p><strong>原因</strong>：未安装 php-mysql 扩展或版本不匹配</p></li><li><p><strong>解决</strong>：</p><ul><li><p>PHP5.4：<code>yum install -y php-mysql</code></p></li><li><p>PHP7.x：<code>yum install -y php74-php-mysqlnd</code></p></li><li><p>重启 Apache：<code>systemctl restart httpd</code></p></li></ul></li></ul><h3 id="4-数据库连接失败"><a href="#4-数据库连接失败" class="headerlink" title="4. 数据库连接失败"></a>4. 数据库连接失败</h3><ul><li><strong>检查项</strong>：</li></ul><ol><li><p>MariaDB 服务是否运行：<code>systemctl status mariadb</code></p></li><li><p>数据库用户权限：确认<code>wp_user</code>@<code>localhost</code>有权访问目标库</p></li><li><p>密码正确性：避免特殊字符，确保配置文件中密码无拼写错误</p></li></ol>]]>
    </content>
    <id>https://netguy6.github.io/2026/02/05/LAMP%E6%9E%B6%E6%9E%84%E6%90%AD%E5%BB%BADiscuz%20%E8%AE%BA%E5%9D%9B%E7%BD%91%E7%AB%99/</id>
    <link href="https://netguy6.github.io/2026/02/05/LAMP%E6%9E%B6%E6%9E%84%E6%90%AD%E5%BB%BADiscuz%20%E8%AE%BA%E5%9D%9B%E7%BD%91%E7%AB%99/"/>
    <published>2026-02-04T16:00:00.000Z</published>
    <summary>LAMP 架构搭建 Discuz 论坛网站，包含 Apache、MariaDB、PHP 与 HTTPS 配置。</summary>
    <title>LAMP架构搭建Discuz 论坛网站</title>
    <updated>2026-08-13T11:06:31.136Z</updated>
  </entry>
  <entry>
    <author>
      <name>net06</name>
    </author>
    <category term="华为ensp" scheme="https://netguy6.github.io/categories/%E5%8D%8E%E4%B8%BAensp/"/>
    <category term="ensp" scheme="https://netguy6.github.io/tags/ensp/"/>
    <category term="FW" scheme="https://netguy6.github.io/tags/FW/"/>
    <content>
      <![CDATA[<h2 id="项目规划及拓扑图"><a href="#项目规划及拓扑图" class="headerlink" title="项目规划及拓扑图"></a>项目规划及拓扑图</h2><p><img src="/2026/02/05/FW%E9%A1%B9%E7%9B%AE/image-20251126182940284.png" alt="image-20251126182940284"></p><h2 id="项目实施-脚本直接刷"><a href="#项目实施-脚本直接刷" class="headerlink" title="项目实施(脚本直接刷)"></a>项目实施(脚本直接刷)</h2><h3 id="CORE"><a href="#CORE" class="headerlink" title="CORE"></a>CORE</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-comment">#vlan-接口-ip</span><br>sys<br>sysname CORE<br>vlan batch 2 3 1000<br>interface Vlanif2<br> ip address 192.168.2.254 255.255.255.0<br>interface Vlanif3<br> ip address 192.168.3.254 255.255.255.0<br>interface Vlanif1000<br> ip address 192.168.254.2 255.255.255.252<br>q<br>int g0/0/1<br> port link-t <span class="hljs-built_in">tr</span><br> port <span class="hljs-built_in">tr</span> al vl 2 3<br>int g0/0/2<br> port link-t <span class="hljs-built_in">tr</span><br> port <span class="hljs-built_in">tr</span> al vl 2 3<br>int g0/0/3<br> port link-t ac <br> port de vlan 1000<br> <br> <span class="hljs-comment">#路由</span><br> ospf 1 router-id 11.11.11.2<br> area 0<br>  network 192.168.2.0 0.0.0.255<br>  network 192.168.3.0 0.0.0.255<br>  network 192.168.254.0 0.0.0.3<br></code></pre></td></tr></table></figure><h3 id="ACC1-ACC2"><a href="#ACC1-ACC2" class="headerlink" title="ACC1&#x2F;ACC2"></a>ACC1&#x2F;ACC2</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br></pre></td><td class="code"><pre><code class="hljs bash">sys<br>sys ACC1<br>vlan bat 2 3 <br>int g0/0/1<br>port link-t <span class="hljs-built_in">tr</span><br>port <span class="hljs-built_in">tr</span> al vl 2 3<br>int g0/0/2<br>port link-t ac <br>port de vlan 2<br>int g0/0/3<br>port link-t ac <br>port de vlan 3<br><br>sys<br>sys ACC2<br>vlan bat 2 3 <br>int g0/0/1<br>port link-t <span class="hljs-built_in">tr</span><br>port <span class="hljs-built_in">tr</span> al vl 2 3<br>int g0/0/2<br>port link-t ac <br>port de vlan 2<br>int g0/0/3<br>port link-t ac <br>port de vlan 3<br></code></pre></td></tr></table></figure><h3 id="ISP"><a href="#ISP" class="headerlink" title="ISP"></a>ISP</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><code class="hljs bash">sys<br>sys ISP<br>int g0/0/0<br>ip add 202.1.1.1 29<br>int g0/0/1<br>ip add 210.33.44.1 24<br></code></pre></td></tr></table></figure><h3 id="FW1"><a href="#FW1" class="headerlink" title="FW1"></a>FW1</h3><p><img src="/2026/02/05/FW%E9%A1%B9%E7%9B%AE/image-20251126185157134.png" alt="image-20251126185157134"></p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-comment">#需要先把防火墙的web开启了，通过web配置后面的</span><br>sys<br>sys FW<br>firewall zone trust<br> add interface GigabitEthernet0/0/0<br>q<br>int g0/0/0<br>service-manage <span class="hljs-built_in">enable</span><br>service-manage http per<br>service-manage https per<br>service-manage ping per<br>ip add 192.168.227.20 24<br><br><span class="hljs-comment">#如果是真机还需要设置一个账号来供web登录</span><br>web-manager <span class="hljs-built_in">enable</span><br>web-manager security <span class="hljs-built_in">enable</span> port 8443<br>aaa<br> manager-user admin<br> service-type web telnet ssh<br> level 15<br> password cipher Admin@1234<br></code></pre></td></tr></table></figure><h4 id="配置接口"><a href="#配置接口" class="headerlink" title="配置接口"></a>配置接口</h4><p><img src="/2026/02/05/FW%E9%A1%B9%E7%9B%AE/image-20251126190335419.png" alt="image-20251126190335419"></p><h4 id="配置路由"><a href="#配置路由" class="headerlink" title="配置路由"></a>配置路由</h4><p><img src="/2026/02/05/FW%E9%A1%B9%E7%9B%AE/image-20251126190428695.png" alt="image-20251126190428695"></p><p><img src="/2026/02/05/FW%E9%A1%B9%E7%9B%AE/image-20251126190609020.png" alt="image-20251126190609020"></p><p><img src="/2026/02/05/FW%E9%A1%B9%E7%9B%AE/image-20251126190837560.png" alt="image-20251126190837560"></p><p><img src="/2026/02/05/FW%E9%A1%B9%E7%9B%AE/image-20251126190907577.png" alt="image-20251126190907577"></p><h4 id="配置NAT及策略"><a href="#配置NAT及策略" class="headerlink" title="配置NAT及策略"></a>配置NAT及策略</h4><p><img src="/2026/02/05/FW%E9%A1%B9%E7%9B%AE/image-20251126191337826.png" alt="image-20251126191337826"></p><p><img src="/2026/02/05/FW%E9%A1%B9%E7%9B%AE/image-20251126191222825.png" alt="image-20251126191222825"></p><p><img src="/2026/02/05/FW%E9%A1%B9%E7%9B%AE/image-20251126192048339.png" alt="image-20251126192048339"></p><p>其他的都差不多，网页端做本来就很简单，后面的就不写了</p>]]>
    </content>
    <id>https://netguy6.github.io/2026/02/05/FW%E9%A1%B9%E7%9B%AE/</id>
    <link href="https://netguy6.github.io/2026/02/05/FW%E9%A1%B9%E7%9B%AE/"/>
    <published>2026-02-04T16:00:00.000Z</published>
    <summary>华为 eNSP 防火墙项目规划、拓扑与脚本配置实践。</summary>
    <title>ENSP-FW项目</title>
    <updated>2026-08-13T11:06:31.136Z</updated>
  </entry>
  <entry>
    <author>
      <name>net06</name>
    </author>
    <category term="linux" scheme="https://netguy6.github.io/categories/linux/"/>
    <category term="CentOS 7" scheme="https://netguy6.github.io/tags/CentOS-7/"/>
    <category term="LNMP" scheme="https://netguy6.github.io/tags/LNMP/"/>
    <content>
      <![CDATA[<h2 id="一、环境概述"><a href="#一、环境概述" class="headerlink" title="一、环境概述"></a>一、环境概述</h2><ul><li><p><strong>架构组成</strong>：Linux（CentOS7）+ Nginx（Web 服务器）+ MariaDB（MySQL 兼容数据库）+ PHP（PHP-FPM 进程管理）</p></li><li><p><strong>核心优势</strong>：轻量高效、并发处理能力强，适合中小型网站、博客、企业官网等场景</p></li><li><p><strong>适配场景</strong>：生产环境、测试环境、高并发静态资源服务（动态内容需配合 PHP-FPM）</p></li><li><p><strong>组件版本参考</strong>（默认 &#x2F; 推荐）：</p></li></ul><table><thead><tr><th>组件</th><th>系统默认版本</th><th>推荐版本</th><th>安装方式</th></tr></thead><tbody><tr><td>Nginx</td><td>1.12.x</td><td>1.20.x+</td><td>YUM（EPEL 源）&#x2F; 源码编译</td></tr><tr><td>MariaDB</td><td>5.5.x</td><td>10.11.x</td><td>YUM &#x2F; 官方镜像源</td></tr><tr><td>PHP</td><td>5.4.x</td><td>7.4.x&#x2F;8.3.x</td><td>YUM（Remi 源）</td></tr><tr><td>PHP-FPM</td><td>随 PHP 配套</td><td>与 PHP 版本一致</td><td>随 PHP 安装</td></tr></tbody></table><h2 id="二、前置准备"><a href="#二、前置准备" class="headerlink" title="二、前置准备"></a>二、前置准备</h2><h3 id="1-系统初始化"><a href="#1-系统初始化" class="headerlink" title="1. 系统初始化"></a>1. 系统初始化</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-comment"># 1. 备份并替换阿里云镜像源（加速安装，避免官方源卡顿）</span><br><br><span class="hljs-built_in">sudo</span> <span class="hljs-built_in">mv</span> /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup<br><br><span class="hljs-built_in">sudo</span> curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo<br><br><span class="hljs-comment"># 2. 安装基础工具</span><br><br><span class="hljs-built_in">sudo</span> yum install -y vim wget net-tools yum-utils<br><br><span class="hljs-comment"># 3. 防火墙配置（开放80/443/22端口）</span><br><br><span class="hljs-built_in">sudo</span> firewall-cmd --permanent --add-service=http<br><br><span class="hljs-built_in">sudo</span> firewall-cmd --permanent --add-service=https<br><br><span class="hljs-built_in">sudo</span> firewall-cmd --permanent --add-port=22/tcp<br><br><span class="hljs-built_in">sudo</span> firewall-cmd --reload<br><br> <span class="hljs-comment">#或者停止防火墙服务</span><br> <br>systemctl stop firewalld<br>systemctl <span class="hljs-built_in">disable</span> firewalld<br><br><span class="hljs-comment"># 4. SELinux配置（避免权限拦截，核心步骤）</span><br><br><span class="hljs-built_in">sudo</span> setenforce 0  <span class="hljs-comment"># 临时关闭（测试环境）</span><br><br><span class="hljs-built_in">sudo</span> sed -i <span class="hljs-string">&#x27;s/SELINUX=enforcing/SELINUX=disabled/&#x27;</span> /etc/selinux/config  <span class="hljs-comment"># 永久关闭（需重启）</span><br></code></pre></td></tr></table></figure><h3 id="2-依赖环境检查"><a href="#2-依赖环境检查" class="headerlink" title="2. 依赖环境检查"></a>2. 依赖环境检查</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-comment"># 检查是否已安装冲突服务（如Apache httpd），如有则卸载</span><br><br>rpm -qa | grep httpd &amp;&amp; <span class="hljs-built_in">sudo</span> yum remove -y httpd<br></code></pre></td></tr></table></figure><h2 id="三、核心组件安装与配置"><a href="#三、核心组件安装与配置" class="headerlink" title="三、核心组件安装与配置"></a>三、核心组件安装与配置</h2><h3 id="（一）Nginx-安装与基础配置"><a href="#（一）Nginx-安装与基础配置" class="headerlink" title="（一）Nginx 安装与基础配置"></a>（一）Nginx 安装与基础配置</h3><h4 id="1-安装-Nginx（通过-EPEL-源，避免报错）"><a href="#1-安装-Nginx（通过-EPEL-源，避免报错）" class="headerlink" title="1. 安装 Nginx（通过 EPEL 源，避免报错）"></a>1. 安装 Nginx（通过 EPEL 源，避免报错）</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-comment"># 安装阿里云EPEL源（解决默认EPEL源无法访问问题）</span><br><br><span class="hljs-built_in">sudo</span> curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo<br><br><span class="hljs-built_in">sudo</span> yum repolist | grep epel  <span class="hljs-comment"># 验证仓库是否生效</span><br><br><span class="hljs-comment"># 安装Nginx</span><br><br><span class="hljs-built_in">sudo</span> yum install -y nginx<br><br><span class="hljs-comment"># 启动并设置开机自启</span><br><br><span class="hljs-built_in">sudo</span> systemctl start nginx<br><br><span class="hljs-built_in">sudo</span> systemctl <span class="hljs-built_in">enable</span> nginx<br><br><span class="hljs-comment"># 验证Nginx状态（确保显示 active (running)）</span><br><br><span class="hljs-built_in">sudo</span> systemctl status nginx<br></code></pre></td></tr></table></figure><h4 id="2-基础配置验证"><a href="#2-基础配置验证" class="headerlink" title="2. 基础配置验证"></a>2. 基础配置验证</h4><ul><li><p>浏览器访问 <code>http://服务器IP</code>，出现 “Welcome to nginx!” 页面即安装成功</p></li><li><p>核心配置文件路径：</p><ul><li><p>主配置文件：<code>/etc/nginx/nginx.conf</code></p></li><li><p>虚拟主机配置目录：<code>/etc/nginx/conf.d/</code>（默认配置文件：<code>default.conf</code>）</p></li><li><p>网站根目录（默认）：<code>/usr/share/nginx/html</code></p></li></ul></li></ul><h3 id="（二）MariaDB-安装与安全配置"><a href="#（二）MariaDB-安装与安全配置" class="headerlink" title="（二）MariaDB 安装与安全配置"></a>（二）MariaDB 安装与安全配置</h3><h4 id="1-安装与启动"><a href="#1-安装与启动" class="headerlink" title="1. 安装与启动"></a>1. 安装与启动</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-comment"># 安装MariaDB服务器与客户端</span><br><br><span class="hljs-built_in">sudo</span> yum install -y mariadb-server mariadb<br><br><span class="hljs-comment"># 启动并设置开机自启</span><br><br><span class="hljs-built_in">sudo</span> systemctl start mariadb<br><br><span class="hljs-built_in">sudo</span> systemctl <span class="hljs-built_in">enable</span> mariadb<br><br><span class="hljs-comment"># 安全初始化（必做！设置root密码、禁用匿名用户）</span><br><br><span class="hljs-built_in">sudo</span> mysql_secure_installation<br></code></pre></td></tr></table></figure><ul><li>初始化步骤提示：</li></ul><ol><li>无初始密码，直接回车 → 2. 设置 root 强密码 → 3. 全选 <code>Y</code>（删除匿名用户、禁止 root 远程登录、删除测试库、刷新权限）</li></ol><h4 id="2-数据库用户与权限配置"><a href="#2-数据库用户与权限配置" class="headerlink" title="2. 数据库用户与权限配置"></a>2. 数据库用户与权限配置</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-comment"># 登录数据库</span><br><br>mysql -u root -p<br><br><span class="hljs-comment"># 创建应用数据库</span><br><br>CREATE DATABASE wordpress_db CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;<br><br><span class="hljs-comment"># 创建专用数据库用户并授权</span><br><br>CREATE USER <span class="hljs-string">&#x27;wp_user&#x27;</span>@<span class="hljs-string">&#x27;localhost&#x27;</span> IDENTIFIED BY <span class="hljs-string">&#x27;StrongPass@2025&#x27;</span>;<br><br>GRANT ALL PRIVILEGES ON wordpress_db.* TO <span class="hljs-string">&#x27;wp_user&#x27;</span>@<span class="hljs-string">&#x27;localhost&#x27;</span>;<br><br><br><span class="hljs-comment">#或：grant all privileges on *.* to root@&#x27;%&#x27; identified by &quot;000000&quot;; </span><br><br>FLUSH PRIVILEGES;<br><br><span class="hljs-comment"># 退出数据库</span><br><br>EXIT;<br></code></pre></td></tr></table></figure><h3 id="（三）PHP-与-PHP-FPM-安装配置（核心联动步骤）"><a href="#（三）PHP-与-PHP-FPM-安装配置（核心联动步骤）" class="headerlink" title="（三）PHP 与 PHP-FPM 安装配置（核心联动步骤）"></a>（三）PHP 与 PHP-FPM 安装配置（核心联动步骤）</h3><h4 id="1-安装-PHP-及扩展（以-PHP7-4-为例，兼容主流应用）"><a href="#1-安装-PHP-及扩展（以-PHP7-4-为例，兼容主流应用）" class="headerlink" title="1. 安装 PHP 及扩展（以 PHP7.4 为例，兼容主流应用）"></a>1. 安装 PHP 及扩展（以 PHP7.4 为例，兼容主流应用）</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-comment"># 安装Remi源（支持高版本PHP）</span><br><br><span class="hljs-built_in">sudo</span> yum install -y http://mirrors.aliyun.com/remi/enterprise/remi-release-7.rpm<br><br><span class="hljs-comment"># 启用PHP7.4仓库</span><br><br><span class="hljs-built_in">sudo</span> yum-config-manager --<span class="hljs-built_in">enable</span> remi-php74<br><br><span class="hljs-comment"># 安装PHP及核心扩展（适配网站运行需求）</span><br><br><span class="hljs-built_in">sudo</span> yum install -y php php-fpm php-mysqlnd php-gd php-mbstring php-xml php-curl php-zip php-opcache<br></code></pre></td></tr></table></figure><h4 id="2-关键配置（Nginx-与-PHP-FPM-联动）"><a href="#2-关键配置（Nginx-与-PHP-FPM-联动）" class="headerlink" title="2. 关键配置（Nginx 与 PHP-FPM 联动）"></a>2. 关键配置（Nginx 与 PHP-FPM 联动）</h4><h5 id="（1）修改-PHP-FPM-用户组（适配-Nginx-权限）"><a href="#（1）修改-PHP-FPM-用户组（适配-Nginx-权限）" class="headerlink" title="（1）修改 PHP-FPM 用户组（适配 Nginx 权限）"></a>（1）修改 PHP-FPM 用户组（适配 Nginx 权限）</h5><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-built_in">sudo</span> vim /etc/php-fpm.d/www.conf<br></code></pre></td></tr></table></figure><ul><li>替换以下配置（默认用户为 apache，需改为 nginx）：</li></ul><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><code class="hljs bash">user = nginx<br><br>group = nginx<br><br>listen = 127.0.0.1:9000  <span class="hljs-comment"># 保持TCP监听（或使用unix:/tmp/php-cgi.sock）</span><br></code></pre></td></tr></table></figure><h5 id="（2）启动-PHP-FPM-并设置自启"><a href="#（2）启动-PHP-FPM-并设置自启" class="headerlink" title="（2）启动 PHP-FPM 并设置自启"></a>（2）启动 PHP-FPM 并设置自启</h5><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-built_in">sudo</span> systemctl start php-fpm<br><br><span class="hljs-built_in">sudo</span> systemctl <span class="hljs-built_in">enable</span> php-fpm<br><br><span class="hljs-built_in">sudo</span> systemctl status php-fpm  <span class="hljs-comment"># 验证状态</span><br><br><span class="hljs-built_in">sudo</span> netstat -nptl <span class="hljs-comment">#查看工作端口</span><br></code></pre></td></tr></table></figure><h5 id="（3）配置-Nginx-支持-PHP-解析（核心联动）"><a href="#（3）配置-Nginx-支持-PHP-解析（核心联动）" class="headerlink" title="（3）配置 Nginx 支持 PHP 解析（核心联动）"></a>（3）配置 Nginx 支持 PHP 解析（核心联动）</h5><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-built_in">sudo</span> vim /etc/nginx/conf.d/default.conf<br></code></pre></td></tr></table></figure><ul><li>替换 <code>server</code> 区块内容（确保 PHP 脚本能被正确解析）：</li></ul><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br></pre></td><td class="code"><pre><code class="hljs bash">server &#123;<br><br>   listen 80;<br><br>   server_name 服务器IP/域名;  <span class="hljs-comment"># 替换为实际IP或域名</span><br><br>   location / &#123;<br>      <br>       root /usr/share/nginx/html;  <span class="hljs-comment"># 网站根目录</span><br><br>       index index.php index.html index.htm;  <span class="hljs-comment"># 优先加载index.php</span><br><br>       try_files <span class="hljs-variable">$uri</span> <span class="hljs-variable">$uri</span>/ =404;  <span class="hljs-comment"># 防止路径遍历</span><br>       <br>   &#125;<br><br>   <span class="hljs-comment"># PHP脚本处理规则（关键配置）</span><br><br>   location ~ \.php$ &#123;<br><br>       fastcgi_pass 127.0.0.1:9000;  <span class="hljs-comment"># 与PHP-FPM监听地址一致</span><br><br>       fastcgi_index index.php;<br><br>       fastcgi_param SCRIPT_FILENAME $document_root<span class="hljs-variable">$fastcgi_script_name</span>;  <span class="hljs-comment"># 脚本路径拼接</span><br><br>       include fastcgi_params;  <span class="hljs-comment"># 加载FastCGI参数</span><br><br>   &#125;<br><br>   <span class="hljs-comment"># 静态资源缓存优化（补充配置）</span><br><br>   location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ &#123;<br><br>       expires 30d;  <span class="hljs-comment"># 图片缓存30天</span><br><br>   &#125;<br><br>   location ~ .*\.(js|css)?$ &#123;<br><br>       expires 12h;  <span class="hljs-comment"># 脚本样式缓存12小时</span><br><br>   &#125;<br><br>&#125;<br></code></pre></td></tr></table></figure><h5 id="（4）验证-Nginx-配置并重启"><a href="#（4）验证-Nginx-配置并重启" class="headerlink" title="（4）验证 Nginx 配置并重启"></a>（4）验证 Nginx 配置并重启</h5><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-built_in">sudo</span> nginx -t  <span class="hljs-comment"># 检查配置语法（无错误提示则正常）</span><br><br><span class="hljs-built_in">sudo</span> systemctl restart nginx  <span class="hljs-comment"># 重启生效</span><br></code></pre></td></tr></table></figure><h4 id="3-环境验证"><a href="#3-环境验证" class="headerlink" title="3. 环境验证"></a>3. 环境验证</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-comment"># 创建PHP信息测试文件</span><br><br><span class="hljs-built_in">echo</span> <span class="hljs-string">&quot;&lt;?php phpinfo(); ?&gt;&quot;</span> | <span class="hljs-built_in">sudo</span> <span class="hljs-built_in">tee</span> /usr/share/nginx/html/info.php<br></code></pre></td></tr></table></figure><ul><li>浏览器访问 <code>http://服务器IP/info.php</code>，显示 PHP 版本及扩展信息即配置成功</li></ul><h3 id="（四）虚拟主机配置（多网站部署，补充内容）"><a href="#（四）虚拟主机配置（多网站部署，补充内容）" class="headerlink" title="（四）虚拟主机配置（多网站部署，补充内容）"></a>（四）虚拟主机配置（多网站部署，补充内容）</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-comment"># 创建虚拟主机配置文件</span><br><br><span class="hljs-built_in">sudo</span> vim /etc/nginx/conf.d/example.conf<br></code></pre></td></tr></table></figure><ul><li>配置示例：</li></ul><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br></pre></td><td class="code"><pre><code class="hljs bash">server &#123;<br><br>   listen 80;<br><br>   server_name www.example.com example.com;  <span class="hljs-comment"># 绑定域名</span><br><br>   <br><br>   location / &#123;<br>   <br>       root  /usr/share/nginx/html;   <span class="hljs-comment"># 自定义网站目录</span><br><br>       index index.php index.html;<br>       <br>       try_files <span class="hljs-variable">$uri</span> <span class="hljs-variable">$uri</span>/ =404;<br><br>   &#125;<br><br>   location ~\.php$ &#123;<br><br>       fastcgi_pass 127.0.0.1:9000;<br>       <br>       root /usr/share/nginx/html; <br><br>       fastcgi_index index.php;<br><br>       fastcgi_param SCRIPT_FILENAME $document_root<span class="hljs-variable">$fastcgi_script_name</span>;<br><br>       include fastcgi_params;<br><br>   &#125;<br><br>   access_log /var/log/nginx/example_access.log;  <span class="hljs-comment"># 访问日志</span><br><br>   error_log /var/log/nginx/example_error.log;    <span class="hljs-comment"># 错误日志</span><br><br>&#125;<br></code></pre></td></tr></table></figure><ul><li>创建目录并授权：</li></ul><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-built_in">sudo</span> <span class="hljs-built_in">mkdir</span> -p  /usr/share/nginx/html<br><br><span class="hljs-built_in">sudo</span> <span class="hljs-built_in">chown</span> -R nginx:nginx /usr/share/nginx/html<br><br><span class="hljs-built_in">sudo</span> <span class="hljs-built_in">chmod</span> -R 755 /usr/share/nginx/html<br><br><span class="hljs-built_in">sudo</span> nginx -t &amp;&amp; <span class="hljs-built_in">sudo</span> systemctl restart nginx<br><span class="hljs-comment">#或重新加载 nginx 使配置文件生效：nginx -s reload </span><br></code></pre></td></tr></table></figure><h2 id="四、应用部署实战（以-WordPress-为例）"><a href="#四、应用部署实战（以-WordPress-为例）" class="headerlink" title="四、应用部署实战（以 WordPress 为例）"></a>四、应用部署实战（以 WordPress 为例）</h2><h3 id="1-下载与解压"><a href="#1-下载与解压" class="headerlink" title="1. 下载与解压"></a>1. 下载与解压</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-comment"># 进入网站根目录（以默认目录为例）</span><br><br><span class="hljs-built_in">cd</span> /usr/share/nginx/html<br><br><span class="hljs-comment"># 下载WordPress安装包</span><br><br>wget https://wordpress.org/latest.tar.gz<br><br><span class="hljs-comment"># 解压并授权</span><br><br>tar -xzvf latest.tar.gz<br><br><span class="hljs-built_in">mv</span> wordpress/* ./<br><br><span class="hljs-built_in">rm</span> -rf wordpress latest.tar.gz<br><br><span class="hljs-comment"># 设置权限（关键！避免访问报错）</span><br><br><span class="hljs-built_in">sudo</span> <span class="hljs-built_in">chown</span> -R nginx:nginx /usr/share/nginx/html<br><br><span class="hljs-built_in">sudo</span> find /usr/share/nginx/html -<span class="hljs-built_in">type</span> d -<span class="hljs-built_in">exec</span> <span class="hljs-built_in">chmod</span> 755 &#123;&#125; \;<br><br><span class="hljs-built_in">sudo</span> find /usr/share/nginx/html -<span class="hljs-built_in">type</span> f -<span class="hljs-built_in">exec</span> <span class="hljs-built_in">chmod</span> 644 &#123;&#125; \;<br></code></pre></td></tr></table></figure><h3 id="2-修改数据库相关配置"><a href="#2-修改数据库相关配置" class="headerlink" title="2. 修改数据库相关配置"></a>2. 修改数据库相关配置</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-comment">#复制模板配置</span><br><br><span class="hljs-built_in">cp</span> wp-config_sample.conf wp-config.conf <br><br>vi wp-config.conf <br></code></pre></td></tr></table></figure><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br></pre></td><td class="code"><pre><code class="hljs bash">... <br>/** WordPress 数据库的名称 */ <br>define(<span class="hljs-string">&#x27;DB_NAME&#x27;</span>, <span class="hljs-string">&#x27;wordpress&#x27;</span>); <br><br>/** MySQL 数据库用户名 */ <br>define(<span class="hljs-string">&#x27;DB_USER&#x27;</span>, <span class="hljs-string">&#x27;root&#x27;</span>); <br><br>/** MySQL 数据库密码 */ <br>define(<span class="hljs-string">&#x27;DB_PASSWORD&#x27;</span>, <span class="hljs-string">&#x27;000000&#x27;</span>); <br><br>/** MySQL 主机 */ <br>define(<span class="hljs-string">&#x27;DB_HOST&#x27;</span>, <span class="hljs-string">&#x27;localhost&#x27;</span>); <br><br>/** 创建数据表时默认的文字编码 */ <br>define(<span class="hljs-string">&#x27;DB_CHARSET&#x27;</span>, <span class="hljs-string">&#x27;utf8&#x27;</span>); <br><br>/** 数据库整理类型。如不确定请勿更改 */ <br>define(<span class="hljs-string">&#x27;DB_COLLATE&#x27;</span>, <span class="hljs-string">&#x27;&#x27;</span>); <br>... <br></code></pre></td></tr></table></figure><h3 id="3-安装流程"><a href="#3-安装流程" class="headerlink" title="3. 安装流程"></a>3. 安装流程</h3><ol><li><p>浏览器访问 <code>http://服务器IP</code>， 点击 “现在就开始”</p></li><li><p>输入数据库信息（前面创建的 <code>wordpress_db</code>、<code>wp_user</code>、密码）</p></li><li><p>填写网站标题、管理员账号密码 → 完成安装</p></li></ol><h3 id="4-适配注意事项"><a href="#4-适配注意事项" class="headerlink" title="4. 适配注意事项"></a>4. 适配注意事项</h3><ul><li><p>PHP5.4.x 仅支持 WordPress 3.7-4.9.x（需升级 PHP 版本以适配新版 WordPress）</p></li><li><p>若提示 “缺少 MySQL 扩展”，重新安装扩展：<code>sudo yum install -y php-mysqlnd</code></p></li></ul><h2 id="五、HTTPS-配置（双服务器架构：CA-Web，补充内容）"><a href="#五、HTTPS-配置（双服务器架构：CA-Web，补充内容）" class="headerlink" title="五、HTTPS 配置（双服务器架构：CA+Web，补充内容）"></a>五、HTTPS 配置（双服务器架构：CA+Web，补充内容）</h2><h3 id="（一）CA-服务器配置（参考-LAMP-架构-CA-配置，适配-LNMP）"><a href="#（一）CA-服务器配置（参考-LAMP-架构-CA-配置，适配-LNMP）" class="headerlink" title="（一）CA 服务器配置（参考 LAMP 架构 CA 配置，适配 LNMP）"></a>（一）CA 服务器配置（参考 LAMP 架构 CA 配置，适配 LNMP）</h3><ol><li><p>生成根证书（同 LAMP 步骤，路径不变）</p></li><li><p>签署 Web 服务器证书（流程一致）</p></li></ol><h3 id="（二）Web-服务器（Nginx）HTTPS-配置"><a href="#（二）Web-服务器（Nginx）HTTPS-配置" class="headerlink" title="（二）Web 服务器（Nginx）HTTPS 配置"></a>（二）Web 服务器（Nginx）HTTPS 配置</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-comment"># 编辑Nginx SSL配置文件</span><br><br><span class="hljs-built_in">sudo</span> vim /etc/nginx/conf.d/ssl.conf<br></code></pre></td></tr></table></figure><ul><li>配置示例：</li></ul><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br></pre></td><td class="code"><pre><code class="hljs bash">server &#123;<br><br>   listen 443 ssl;<br><br>   server_name 服务器IP/域名;<br><br>   <span class="hljs-comment"># 证书路径（替换为实际路径）</span><br><br>   ssl_certificate /etc/nginx/ssl/web.crt;  <span class="hljs-comment"># CA签署的服务器证书</span><br><br>   ssl_certificate_key /etc/nginx/ssl/web.key;  <span class="hljs-comment"># Web服务器私钥</span><br><br>   ssl_trusted_certificate /etc/nginx/ssl/cacert.pem;  <span class="hljs-comment"># CA根证书</span><br><br>   <span class="hljs-comment"># SSL优化配置（补充）</span><br><br>   ssl_protocols TLSv1.2 TLSv1.3;<br><br>   ssl_ciphers ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384;<br><br>   ssl_prefer_server_ciphers on;<br><br>   root /usr/share/nginx/html;<br><br>   index index.php index.html;<br><br>   location ~ \.php$ &#123;<br><br>       fastcgi_pass 127.0.0.1:9000;<br><br>       fastcgi_index index.php;<br><br>       fastcgi_param SCRIPT_FILENAME $document_root<span class="hljs-variable">$fastcgi_script_name</span>;<br><br>       include fastcgi_params;<br><br>   &#125;<br><br>&#125;<br></code></pre></td></tr></table></figure><ul><li><p>重启 Nginx：<code>sudo systemctl restart nginx</code></p></li><li><p>测试访问：<code>https://服务器IP</code>（自签名证书首次访问需忽略信任警告）</p></li></ul>]]>
    </content>
    <id>https://netguy6.github.io/2026/02/05/LNMP%E6%9E%B6%E6%9E%84%E6%90%AD%E5%BB%BAwordpress%E5%8D%9A%E5%AE%A2/</id>
    <link href="https://netguy6.github.io/2026/02/05/LNMP%E6%9E%B6%E6%9E%84%E6%90%AD%E5%BB%BAwordpress%E5%8D%9A%E5%AE%A2/"/>
    <published>2026-02-04T16:00:00.000Z</published>
    <summary>LNMP 架构搭建 WordPress 博客，记录 Nginx、MariaDB、PHP-FPM 部署步骤。</summary>
    <title>LNMP架构搭建wordpress博客</title>
    <updated>2026-08-13T11:06:31.136Z</updated>
  </entry>
  <entry>
    <author>
      <name>net06</name>
    </author>
    <category term="华为ensp" scheme="https://netguy6.github.io/categories/%E5%8D%8E%E4%B8%BAensp/"/>
    <category term="ensp" scheme="https://netguy6.github.io/tags/ensp/"/>
    <category term="WLAN" scheme="https://netguy6.github.io/tags/WLAN/"/>
    <content>
      <![CDATA[<h1 id="WLAN知识点"><a href="#WLAN知识点" class="headerlink" title="WLAN知识点"></a>WLAN知识点</h1><h2 id="一、核心拓扑"><a href="#一、核心拓扑" class="headerlink" title="一、核心拓扑"></a>一、核心拓扑</h2><figure class="highlight css"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><code class="hljs css"><span class="hljs-selector-attr">[DHCP服务器]</span> → <span class="hljs-selector-attr">[交换机]</span> ←→ <span class="hljs-selector-attr">[AC]</span>  <br>                   ↓  <br>               <span class="hljs-selector-attr">[FIT AP]</span> → 无线终端（手机/电脑）<br></code></pre></td></tr></table></figure><ul><li>AP需通过有线连接到网络，与AC建立CAPWAP隧道。</li></ul><h2 id="二、配置关键步骤"><a href="#二、配置关键步骤" class="headerlink" title="二、配置关键步骤"></a>二、配置关键步骤</h2><ol><li><p><strong>AC基础配置</strong>  </p><ul><li>配置管理IP（如Vlanif接口）、启用CAPWAP。</li></ul><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">[AC] capwap <span class="hljs-built_in">source</span> interface Vlanif 100  <span class="hljs-comment"># 指定AC的CAPWAP源接口</span><br></code></pre></td></tr></table></figure><ul><li>下发AP的DHCP中的option 43</li></ul><figure class="highlight smali"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><code class="hljs smali">option 43 hex 030A31302E31302E31302E31<br>option 43<span class="hljs-built_in"> sub-option </span>3 ascii 10.10.10.1<br></code></pre></td></tr></table></figure></li><li><p><strong>AP上线</strong>  </p><ul><li>AP通过DHCP获取IP，通过DHCP Option43或静态配置发现AC。  </li><li>AC上注册AP（手动添加AP的MAC或序列号）。</li></ul><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><code class="hljs bash">[AC] wlan<br>[AC-wlan] ap auth-mode mac-auth  <span class="hljs-comment"># 按MAC认证AP</span><br>[AC-wlan] ap-id 1 ap-mac 00e0-fc12-3456  <span class="hljs-comment"># 注册AP</span><br></code></pre></td></tr></table></figure></li><li><p><strong>WLAN业务配置</strong>  </p><ul><li>创建SSID（无线名称）、安全模板（如WPA2-PSK密码）。  </li><li>创建VAP模板（绑定SSID、安全模板、VLAN），下发到AP。</li></ul><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br></pre></td><td class="code"><pre><code class="hljs bash">[AC-wlan] ssid-profile name office-ssid  <span class="hljs-comment"># 创建SSID</span><br>[AC-wlan-ssid-office-ssid] ssid Office  <span class="hljs-comment"># 设置无线名称</span><br><br>[AC-wlan] security-profile name office-sec  <span class="hljs-comment"># 创建安全模板</span><br>[AC-wlan-security-office-sec] security wpa2 psk pass-phrase 12345678 aes  <span class="hljs-comment"># 配置密码</span><br><br>[AC-wlan] vap-profile name office-vap  <span class="hljs-comment"># 创建VAP模板</span><br>[AC-wlan-vap-office-vap] ssid-profile office-ssid  <span class="hljs-comment"># 绑定SSID</span><br>[AC-wlan-vap-office-vap] security-profile office-sec  <span class="hljs-comment"># 绑定安全模板</span><br>[AC-wlan-vap-office-vap] vlan 10  <span class="hljs-comment"># 绑定VLAN</span><br><br><span class="hljs-comment"># 单个ap下发配置</span><br>[AC-wlan] ap-id 1  <span class="hljs-comment"># 进入AP视图</span><br>[AC-wlan-ap-1] vap-profile office-vap wlan 1  <span class="hljs-comment"># 给AP下发VAP</span><br><br><span class="hljs-comment"># 多个ap下发配置</span><br>[AC-wlan] ap-gruop name rjdl <span class="hljs-comment"># 创建rjdl组</span><br>[AC-wlan] ap-id 1  <span class="hljs-comment"># 进入AP视图</span><br>[AC-wlan-ap-1]ap-group rjdl <span class="hljs-comment">#将AP1加入rjdl组</span><br>[AC-wlan-ap-1]ap-name 801-ap ap名称<br><br>[AC-wlan] ap-group name rjdl  <span class="hljs-comment"># 进入组</span><br>[AC-wlan-ap-group-rjdl] vap-profile office-vap wlan 1 radio all <br><span class="hljs-comment"># 下发VAP模板（如office-vap），分配WLAN ID 1，所有射频（2.4G/5G）生效</span><br></code></pre></td></tr></table></figure></li></ol><h2 id="三、CAPWAP隧道"><a href="#三、CAPWAP隧道" class="headerlink" title="三、CAPWAP隧道"></a>三、CAPWAP隧道</h2><ul><li>AC与AP的通信通道，分控制隧道（UDP 5246，传配置）和数据隧道（UDP 5247，传用户流量）。  </li><li>需确保AC与AP网络连通，防火墙放通对应端口。</li></ul><h2 id="四、常用排错命令"><a href="#四、常用排错命令" class="headerlink" title="四、常用排错命令"></a>四、常用排错命令</h2><ul><li>查看AP状态：<code>display ap all</code>（AP状态为“nor”表示正常）。  </li><li>查看CAPWAP隧道：<code>display capwap ap all</code>。  </li><li>查看SSID和VAP：<code>display wlan ssid-profile</code>、<code>display wlan vap-profile</code>。</li></ul><h1 id="案例"><a href="#案例" class="headerlink" title="案例"></a>案例</h1><h2 id="实验拓扑"><a href="#实验拓扑" class="headerlink" title="实验拓扑"></a>实验拓扑</h2><p><img src="/2026/02/05/WLAN%E9%9B%86%E4%B8%AD%E5%BC%8F%E8%BD%AC%E5%8F%91/1.png" alt="1"></p><h2 id="基础配置"><a href="#基础配置" class="headerlink" title="基础配置"></a>基础配置</h2><h3 id="AR1"><a href="#AR1" class="headerlink" title="AR1"></a>AR1</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><code class="hljs bash">sysname AR1<br>interface GigabitEthernet0/0/0<br> ip address 192.168.254.1 255.255.255.252 <br>interface LoopBack0<br> ip address 201.1.1.1 255.255.255.0 <br>q<br>ip route-static 192.168.2.0 255.255.255.0 192.168.254.2<br>ip route-static 192.168.3.0 255.255.255.0 192.168.254.2<br>ip route-static 192.168.99.0 255.255.255.0 192.168.254.2<br>ip route-static 192.168.100.0 255.255.255.0 192.168.254.2<br>ip route-static 192.168.200.0 255.255.255.0 192.168.254.2<br></code></pre></td></tr></table></figure><h3 id="CORE"><a href="#CORE" class="headerlink" title="CORE"></a>CORE</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br></pre></td><td class="code"><pre><code class="hljs bash">sysname CORE<br>vlan 99<br> description ap-vlan<br>vlan 100<br> description to-poe-acc1<br>vlan 200<br> description to-ac1<br>vlan 1000<br> description to-ar1<br><br>interface Vlanif99<br> ip address 192.168.99.254 255.255.255.0<br>interface Vlanif100<br> ip address 192.168.100.254 255.255.255.0<br>interface Vlanif200<br> ip address 192.168.200.2 255.255.255.0<br>interface Vlanif1000<br> ip address 192.168.254.2 255.255.255.252<br>q<br>interface GigabitEthernet0/0/1<br> port link-type trunk<br> port trunk allow-pass vlan 99 to 100<br><br>interface GigabitEthernet0/0/2<br> port link-type access<br> port default vlan 1000<br><br>interface GigabitEthernet0/0/3<br> port link-type trunk<br> port trunk allow-pass vlan 200<br>q<br>dhcp <span class="hljs-built_in">enable</span><br>interface Vlanif99<br> dhcp <span class="hljs-keyword">select</span> global<br><br>ip pool manage-ap<br> gateway-list 192.168.99.254<br> network 192.168.99.0 mask 255.255.255.0<br> option 43 sub-option 3 ascii 192.168.200.1<br> <br>q<br>ip route-static 0.0.0.0 0.0.0.0 192.168.254.1<br>ip route-static 192.168.2.0 255.255.255.0 192.168.200.1<br>ip route-static 192.168.3.0 255.255.255.0 192.168.200.1<br></code></pre></td></tr></table></figure><h3 id="AC1"><a href="#AC1" class="headerlink" title="AC1"></a>AC1</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br></pre></td><td class="code"><pre><code class="hljs bash">sysname AC1<br>vlan 2<br> description sta-vlan2<br>vlan 3<br> description sta-vlan3<br>vlan 200<br> description to-core<br> <br>interface Vlanif2<br> ip address 192.168.2.254 255.255.255.0<br> dhcp <span class="hljs-keyword">select</span> global<br>interface Vlanif3<br> ip address 192.168.3.254 255.255.255.0<br> dhcp <span class="hljs-keyword">select</span> global<br>interface Vlanif200<br> ip address 192.168.200.1 255.255.255.0<br> <br> interface GigabitEthernet0/0/1<br> port link-type trunk<br> port trunk allow-pass vlan 2 to 3 200<br><br>dhcp <span class="hljs-built_in">enable</span><br>ip pool sta-vlan2<br> gateway-list 192.168.2.254 <br> network 192.168.2.0 mask 255.255.255.0 <br>ip pool sta-vlan3<br> gateway-list 192.168.3.254 <br> network 192.168.3.0 mask 255.255.255.0 <br> <br>ip route-static 0.0.0.0 0.0.0.0 192.168.200.2<br></code></pre></td></tr></table></figure><h3 id="POC-ACC1"><a href="#POC-ACC1" class="headerlink" title="POC-ACC1"></a>POC-ACC1</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br></pre></td><td class="code"><pre><code class="hljs bash">sysname POE-ACC1<br>vlan batch 99 to 100<br>interface Vlanif100<br> ip address 192.168.100.1 255.255.255.0<br> <br>interface GigabitEthernet0/0/1<br> port link-type trunk<br> port trunk allow-pass vlan 99 to 100<br><br>port-group 1<br>group-member GigabitEthernet 0/0/3 to GigabitEthernet 0/0/4<br>port link-type access<br>port default vlan 99<br><br>ip route-static 0.0.0.0 0.0.0.0 192.168.100.254<br></code></pre></td></tr></table></figure><h2 id="核心配置"><a href="#核心配置" class="headerlink" title="核心配置"></a>核心配置</h2><h3 id="AC1-1"><a href="#AC1-1" class="headerlink" title="AC1"></a>AC1</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-comment"># CAPWAP配置：指定源接口</span><br>capwap <span class="hljs-built_in">source</span> interface Vlanif200<br><br><span class="hljs-comment"># ap上线</span><br>wlan<br> ap-group name rjdl <span class="hljs-comment">#创建一个rjdl组</span><br> ap auth-mode mac-auth  <span class="hljs-comment"># AP按MAC认证</span><br> ap-id 1 ap-mac 00e0-fc2f-7a60  <span class="hljs-comment"># 注册AP1</span><br> ap-group rjdl <span class="hljs-comment">#将AP1加入rjdl组</span><br> ap-id 2 ap-mac 00e0-fc21-7200  <span class="hljs-comment"># 注册AP2</span><br> ap-group rjdl<br>q<br> ssid-profile name guest  <span class="hljs-comment"># 创建ssid模板</span><br>  ssid guest <span class="hljs-comment"># 设置wifi名称</span><br>q<br> ssid-profile name net24<br>  ssid net24 <br>q<br> security-profile name wpa2  <span class="hljs-comment"># 创建安全模板</span><br>  security wpa2 psk pass-phrase 12345678 aes <span class="hljs-comment"># 设置密码</span><br>q  <br> vap-profile name guest <span class="hljs-comment"># 创建VAP模板</span><br>  forward-mode tunnel <span class="hljs-comment">#数据转发模式为 “隧道模式”</span><br>  service-vlan vlan-id 3 <span class="hljs-comment">#绑定vlan</span><br>  ssid-profile guest  <span class="hljs-comment"># 绑定SSID  </span><br> vap-profile name net24<br>  forward-mode tunnel<br>  service-vlan vlan-id 2<br>  ssid-profile net24<br>  security-profile wpa2  <span class="hljs-comment">#绑定安全模板</span><br>q<br>  ap-group name rjdl  <span class="hljs-comment"># 将VAP下发到组内AP</span><br>   vap-profile guest wlan 1 radio all<br>   vap-profile net24 wlan 2 radio all<br></code></pre></td></tr></table></figure><h2 id="测试"><a href="#测试" class="headerlink" title="测试"></a>测试</h2><p><img src="/2026/02/05/WLAN%E9%9B%86%E4%B8%AD%E5%BC%8F%E8%BD%AC%E5%8F%91/2.png" alt="2"></p><p><img src="/2026/02/05/WLAN%E9%9B%86%E4%B8%AD%E5%BC%8F%E8%BD%AC%E5%8F%91/3.png" alt="3"></p>]]>
    </content>
    <id>https://netguy6.github.io/2026/02/05/WLAN%E9%9B%86%E4%B8%AD%E5%BC%8F%E8%BD%AC%E5%8F%91/</id>
    <link href="https://netguy6.github.io/2026/02/05/WLAN%E9%9B%86%E4%B8%AD%E5%BC%8F%E8%BD%AC%E5%8F%91/"/>
    <published>2026-02-04T16:00:00.000Z</published>
    <summary>华为 WLAN 集中式转发拓扑、CAPWAP 与 AC/FIT AP 组网要点。</summary>
    <title>WLAN集中式转发</title>
    <updated>2026-08-13T11:06:31.138Z</updated>
  </entry>
  <entry>
    <author>
      <name>net06</name>
    </author>
    <category term="linux" scheme="https://netguy6.github.io/categories/linux/"/>
    <category term="linux基础" scheme="https://netguy6.github.io/tags/linux%E5%9F%BA%E7%A1%80/"/>
    <content>
      <![CDATA[<h1 id="Linux基础命令"><a href="#Linux基础命令" class="headerlink" title="Linux基础命令"></a>Linux基础命令</h1><h2 id="Linux的目录结构"><a href="#Linux的目录结构" class="headerlink" title="Linux的目录结构"></a>Linux的目录结构</h2><p><img src="https://image-set.oss-cn-zhangjiakou.aliyuncs.com/img-out/2022/10/27/20221027214128.png" alt="image-20221027214128453"></p><ul><li><code>/</code>，根目录是最顶级的目录了</li><li>Linux只有一个顶级目录：<code>/</code></li><li>路径描述的层次关系同样适用<code>/</code>来表示</li><li>&#x2F;home&#x2F;itheima&#x2F;a.txt，表示根目录下的home文件夹内有itheima文件夹，内有a.txt</li></ul><h2 id="ls命令"><a href="#ls命令" class="headerlink" title="ls命令"></a>ls命令</h2><p>功能：列出文件夹信息</p><p>语法：<code>ls [-l -h -a] [参数]</code></p><ul><li>参数：被查看的文件夹，不提供参数，表示查看当前工作目录</li><li>-l，以列表形式查看</li><li>-h，配合-l，以更加人性化的方式显示文件大小</li><li>-a，显示隐藏文件</li></ul><h3 id="隐藏文件、文件夹"><a href="#隐藏文件、文件夹" class="headerlink" title="隐藏文件、文件夹"></a>隐藏文件、文件夹</h3><p>在Linux中以<code>.</code>开头的，均是隐藏的。</p><p>默认不显示出来，需要<code>-a</code>选项才可查看到。</p><h2 id="pwd命令"><a href="#pwd命令" class="headerlink" title="pwd命令"></a>pwd命令</h2><p>功能：展示当前工作目录</p><p>语法：<code>pwd</code></p><h2 id="cd命令"><a href="#cd命令" class="headerlink" title="cd命令"></a>cd命令</h2><p>功能：切换工作目录</p><p>语法：<code>cd [目标目录]</code></p><p>参数：目标目录，要切换去的地方，不提供默认切换到<code>当前登录用户HOME目录</code></p><h2 id="HOME目录"><a href="#HOME目录" class="headerlink" title="HOME目录"></a>HOME目录</h2><p>每一个用户在Linux系统中都有自己的专属工作目录，称之为HOME目录。</p><ul><li><p>普通用户的HOME目录，默认在：<code>/home/用户名</code></p></li><li><p>root用户的HOME目录，在：<code>/root</code></p></li></ul><p>FinalShell登陆终端后，默认的工作目录就是用户的HOME目录</p><h2 id="相对路径、绝对路径"><a href="#相对路径、绝对路径" class="headerlink" title="相对路径、绝对路径"></a>相对路径、绝对路径</h2><ul><li><p>相对路径，&#x3D;&#x3D;非&#x3D;&#x3D;<code>/</code>开头的称之为相对路径</p><p>相对路径表示以<code>当前目录</code>作为起点，去描述路径，如<code>test/a.txt</code>，表示当前工作目录内的test文件夹内的a.txt文件</p></li><li><p>绝对路径，&#x3D;&#x3D;以&#x3D;&#x3D;<code>/</code>开头的称之为绝对路径</p><p>绝对路径从<code>根</code>开始描述路径</p></li></ul><h2 id="特殊路径符"><a href="#特殊路径符" class="headerlink" title="特殊路径符"></a>特殊路径符</h2><ul><li><code>.</code>，表示当前，比如.&#x2F;a.txt，表示当前文件夹内的<code>a.txt</code>文件</li><li><code>..</code>，表示上级目录，比如<code>../</code>表示上级目录，<code>../../</code>表示上级的上级目录</li><li><code>~</code>，表示用户的HOME目录，比如<code>cd ~</code>，即可切回用户HOME目录</li></ul><h2 id="mkdir命令"><a href="#mkdir命令" class="headerlink" title="mkdir命令"></a>mkdir命令</h2><p>功能：创建文件夹</p><p>语法：<code>mkdir [-p] 参数</code></p><ul><li>参数：被创建文件夹的路径</li><li>选项：-p，可选，表示创建前置路径</li></ul><h2 id="touch命令"><a href="#touch命令" class="headerlink" title="touch命令"></a>touch命令</h2><p>功能：创建文件</p><p>语法：<code>touch 参数</code></p><ul><li>参数：被创建的文件路径</li></ul><h2 id="cat命令"><a href="#cat命令" class="headerlink" title="cat命令"></a>cat命令</h2><p>功能：查看文件内容</p><p>语法：<code>cat 参数</code></p><ul><li>参数：被查看的文件路径</li></ul><h2 id="more命令"><a href="#more命令" class="headerlink" title="more命令"></a>more命令</h2><p>功能：查看文件，可以支持翻页查看</p><p>语法：<code>more 参数</code></p><ul><li>参数：被查看的文件路径</li><li>在查看过程中：<ul><li><code>空格</code>键翻页</li><li><code>q</code>退出查看</li></ul></li></ul><h2 id="cp命令"><a href="#cp命令" class="headerlink" title="cp命令"></a>cp命令</h2><p>功能：复制文件、文件夹</p><p>语法：<code>cp [-r] 参数1 参数2</code></p><ul><li>参数1，被复制的</li><li>参数2，要复制去的地方</li><li>选项：-r，可选，复制文件夹使用</li></ul><p>示例：</p><ul><li>cp a.txt b.txt，复制当前目录下a.txt为b.txt</li><li>cp a.txt test&#x2F;，复制当前目录a.txt到test文件夹内</li><li>cp -r test test2，复制文件夹test到当前文件夹内为test2存在</li></ul><h2 id="mv命令"><a href="#mv命令" class="headerlink" title="mv命令"></a>mv命令</h2><p>功能：移动文件、文件夹</p><p>语法：<code>mv 参数1 参数2</code></p><ul><li>参数1：被移动的</li><li>参数2：要移动去的地方，参数2如果不存在，则会进行改名</li></ul><h2 id="rm命令"><a href="#rm命令" class="headerlink" title="rm命令"></a>rm命令</h2><p>功能：删除文件、文件夹</p><p>语法：<code>rm [-r -f] 参数...参数</code></p><ul><li>参数：支持多个，每一个表示被删除的，空格进行分隔</li><li>选项：-r，删除文件夹使用</li><li>选项：-f，强制删除，不会给出确认提示，一般root用户会用到</li></ul><blockquote><p>rm命令很危险，一定要注意，特别是切换到root用户的时候。</p></blockquote><h2 id="which命令"><a href="#which命令" class="headerlink" title="which命令"></a>which命令</h2><p>功能：查看命令的程序本体文件路径</p><p>语法：<code>which 参数</code></p><ul><li>参数：被查看的命令</li></ul><h2 id="find命令"><a href="#find命令" class="headerlink" title="find命令"></a>find命令</h2><p>功能：搜索文件</p><p>语法1按文件名搜索：<code>find 路径 -name 参数</code></p><ul><li>路径，搜索的起始路径</li><li>参数，搜索的关键字，支持通配符*， 比如：<code>*</code>test表示搜索任意以test结尾的文件</li></ul><h2 id="grep命令"><a href="#grep命令" class="headerlink" title="grep命令"></a>grep命令</h2><p>功能：过滤关键字</p><p>语法：<code>grep [-n] 关键字 文件路径</code></p><ul><li>选项-n，可选，表示在结果中显示匹配的行的行号。</li><li>参数，关键字，必填，表示过滤的关键字，带有空格或其它特殊符号，建议使用””将关键字包围起来</li><li>参数，文件路径，必填，表示要过滤内容的文件路径，可作为内容输入端口</li></ul><blockquote><p>参数文件路径，可以作为管道符的输入</p></blockquote><h2 id="wc命令"><a href="#wc命令" class="headerlink" title="wc命令"></a>wc命令</h2><p>功能：统计</p><p>语法：<code>wc [-c -m -l -w] 文件路径</code></p><ul><li>选项，-c，统计bytes数量</li><li>选项，-m，统计字符数量</li><li>选项，-l，统计行数</li><li>选项，-w，统计单词数量</li><li>参数，文件路径，被统计的文件，可作为内容输入端口</li></ul><blockquote><p>参数文件路径，可作为管道符的输入</p></blockquote><h2 id="管道符"><a href="#管道符" class="headerlink" title="管道符|"></a>管道符|</h2><p>写法：<code>|</code></p><p>功能：将符号左边的结果，作为符号右边的输入</p><p>示例：</p><p><code>cat a.txt | grep itheima</code>，将cat a.txt的结果，作为grep命令的输入，用来过滤<code>itheima</code>关键字</p><p>可以支持嵌套：</p><p><code>cat a.txt | grep itheima | grep itcast</code></p><h2 id="echo命令"><a href="#echo命令" class="headerlink" title="echo命令"></a>echo命令</h2><p>功能：输出内容</p><p>语法：<code>echo 参数</code></p><ul><li>参数：被输出的内容</li></ul><h2 id="反引号"><a href="#反引号" class="headerlink" title="&#96;反引号"></a>&#96;反引号</h2><p>功能：被两个反引号包围的内容，会作为命令执行</p><p>示例：</p><ul><li>echo `pwd`，会输出当前工作目录</li></ul><h2 id="tail命令"><a href="#tail命令" class="headerlink" title="tail命令"></a>tail命令</h2><p>功能：查看文件尾部内容</p><p>语法：<code>tail [-f] 参数</code></p><ul><li>参数：被查看的文件</li><li>选项：-f，持续跟踪文件修改</li></ul><h2 id="head命令"><a href="#head命令" class="headerlink" title="head命令"></a>head命令</h2><p>功能：查看文件头部内容</p><p>语法：<code>head [-n] 参数</code></p><ul><li>参数：被查看的文件</li><li>选项：-n，查看的行数</li></ul><h2 id="重定向符"><a href="#重定向符" class="headerlink" title="重定向符"></a>重定向符</h2><p>功能：将符号左边的结果，输出到右边指定的文件中去</p><ul><li><code>&gt;</code>，表示覆盖输出</li><li><code>&gt;&gt;</code>，表示追加输出</li></ul><h2 id="vi编辑器"><a href="#vi编辑器" class="headerlink" title="vi编辑器"></a>vi编辑器</h2><h3 id="命令模式快捷键"><a href="#命令模式快捷键" class="headerlink" title="命令模式快捷键"></a>命令模式快捷键</h3><p><img src="https://image-set.oss-cn-zhangjiakou.aliyuncs.com/img-out/2022/10/27/20221027215841.png" alt="image-20221027215841573"></p><p><img src="https://image-set.oss-cn-zhangjiakou.aliyuncs.com/img-out/2022/10/27/20221027215846.png" alt="image-20221027215846581"></p><p><img src="https://image-set.oss-cn-zhangjiakou.aliyuncs.com/img-out/2022/10/27/20221027215849.png" alt="image-20221027215849668"></p><h3 id="底线命令快捷键"><a href="#底线命令快捷键" class="headerlink" title="底线命令快捷键"></a>底线命令快捷键</h3><p><img src="https://image-set.oss-cn-zhangjiakou.aliyuncs.com/img-out/2022/10/27/20221027215858.png" alt="image-20221027215858967"></p><h2 id="命令的选项"><a href="#命令的选项" class="headerlink" title="命令的选项"></a>命令的选项</h2><p>我们学习的一系列Linux命令，它们所拥有的选项都是非常多的。</p><p>比如，简单的ls命令就有：-a -A -b -c -C -d -D -f -F -g -G -h -H -i -I -k -l -L -m -n -N -o -p -q -Q -r-R -s -S -t -T -u -U -v -w -x -X -1等选项，可以发现选项是极其多的。</p><p>课程中， 并不会将全部的选项都进行讲解，否则，一个ls命令就可能讲解2小时之久。</p><p>课程中，会对常见的选项进行讲解， 足够满足绝大多数的学习、工作场景。</p><h3 id="查看命令的帮助"><a href="#查看命令的帮助" class="headerlink" title="查看命令的帮助"></a>查看命令的帮助</h3><p>可以通过：<code>命令 --help</code>查看命令的帮助手册</p><p><img src="https://image-set.oss-cn-zhangjiakou.aliyuncs.com/img-out/2022/10/27/20221027220005.png" alt="image-20221027220005610"></p><h3 id="查看命令的详细手册"><a href="#查看命令的详细手册" class="headerlink" title="查看命令的详细手册"></a>查看命令的详细手册</h3><p>可以通过：<code>man 命令</code>查看某命令的详细手册</p><p><img src="https://image-set.oss-cn-zhangjiakou.aliyuncs.com/img-out/2022/10/27/20221027220010.png" alt="image-20221027220009949"></p><h1 id="Linux常用操作"><a href="#Linux常用操作" class="headerlink" title="Linux常用操作"></a>Linux常用操作</h1><h2 id="软件安装"><a href="#软件安装" class="headerlink" title="软件安装"></a>软件安装</h2><ul><li>CentOS系统使用：<ul><li>yum [install remove search] [-y] 软件名称<ul><li>install 安装</li><li>remove 卸载</li><li>search 搜索</li><li>-y，自动确认</li></ul></li></ul></li><li>Ubuntu系统使用<ul><li>apt [install remove search] [-y] 软件名称<ul><li>install 安装</li><li>remove 卸载</li><li>search 搜索</li><li>-y，自动确认</li></ul></li></ul></li></ul><blockquote><p>yum 和 apt 均需要root权限</p></blockquote><h2 id="systemctl"><a href="#systemctl" class="headerlink" title="systemctl"></a>systemctl</h2><p>功能：控制系统服务的启动关闭等</p><p>语法：<code>systemctl start | stop | restart | disable | enable | status 服务名</code></p><ul><li>start，启动</li><li>stop，停止</li><li>status，查看状态</li><li>disable，关闭开机自启</li><li>enable，开启开机自启</li><li>restart，重启</li></ul><h2 id="软链接"><a href="#软链接" class="headerlink" title="软链接"></a>软链接</h2><p>功能：创建文件、文件夹软链接（快捷方式）</p><p>语法：<code>ln -s 参数1 参数2</code></p><ul><li>参数1：被链接的</li><li>参数2：要链接去的地方（快捷方式的名称和存放位置）</li></ul><h2 id="日期"><a href="#日期" class="headerlink" title="日期"></a>日期</h2><p>语法：<code>date [-d] [+格式化字符串]</code></p><ul><li><p>-d 按照给定的字符串显示日期，一般用于日期计算</p></li><li><p>格式化字符串：通过特定的字符串标记，来控制显示的日期格式</p><ul><li>%Y   年%y   年份后两位数字 (00..99)</li><li>%m   月份 (01..12)</li><li>%d   日 (01..31)</li><li>%H   小时 (00..23)</li><li>%M   分钟 (00..59)</li><li>%S   秒 (00..60)</li><li>%s   自 1970-01-01 00:00:00 UTC 到现在的秒数</li></ul></li></ul><p>示例：</p><ul><li><p>按照2022-01-01的格式显示日期</p><p><img src="https://image-set.oss-cn-zhangjiakou.aliyuncs.com/img-out/2022/10/27/20221027220514.png" alt="image-20221027220514640"></p></li><li><p>按照2022-01-01 10:00:00的格式显示日期</p><p><img src="https://image-set.oss-cn-zhangjiakou.aliyuncs.com/img-out/2022/10/27/20221027220525.png" alt="image-20221027220525625"></p></li><li><p>-d选项日期计算</p><p><img src="https://image-set.oss-cn-zhangjiakou.aliyuncs.com/img-out/2022/10/27/20221027220429.png" alt="image-20221027220429831"></p><ul><li><p>支持的时间标记为：</p><p><img src="https://image-set.oss-cn-zhangjiakou.aliyuncs.com/img-out/2022/10/27/20221027220449.png" alt="image-20221027220449312"></p></li></ul></li></ul><h2 id="时区"><a href="#时区" class="headerlink" title="时区"></a>时区</h2><p>修改时区为中国时区</p><p><img src="https://image-set.oss-cn-zhangjiakou.aliyuncs.com/img-out/2022/10/27/20221027220554.png" alt="image-20221027220554654"></p><h2 id="ntp"><a href="#ntp" class="headerlink" title="ntp"></a>ntp</h2><p>功能：同步时间</p><p>安装：<code>yum install -y ntp</code></p><p>启动管理：<code>systemctl start | stop | restart | status | disable | enable ntpd</code></p><p>手动校准时间：<code>ntpdate -u ntp.aliyun.com</code></p><h2 id="ip地址"><a href="#ip地址" class="headerlink" title="ip地址"></a>ip地址</h2><p>格式：a.b.c.d</p><ul><li>abcd为0~255的数字</li></ul><p>特殊IP：</p><ul><li>127.0.0.1，表示本机</li><li>0.0.0.0<ul><li>可以表示本机</li><li>也可以表示任意IP（看使用场景）</li></ul></li></ul><p>查看ip：<code>ifconfig</code></p><h2 id="主机名"><a href="#主机名" class="headerlink" title="主机名"></a>主机名</h2><p>功能：Linux系统的名称</p><p>查看：<code>hostname</code></p><p>设置：<code>hostnamectl set-hostname 主机名</code></p><h2 id="配置VMware固定IP"><a href="#配置VMware固定IP" class="headerlink" title="配置VMware固定IP"></a>配置VMware固定IP</h2><ol><li><p>修改VMware网络，参阅PPT，图太多</p></li><li><p>设置Linux内部固定IP</p><p>修改文件：<code>/etc/sysconfig/network-scripts/ifcfg-ens33</code></p><p>示例文件内容：</p><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br></pre></td><td class="code"><pre><code class="hljs shell">TYPE=&quot;Ethernet&quot;<br>PROXY_METHOD=&quot;none&quot;<br>BROWSER_ONLY=&quot;no&quot;<br>BOOTPROTO=&quot;static&quot;# 改为static，固定IP<br>DEFROUTE=&quot;yes&quot;<br>IPV4_FAILURE_FATAL=&quot;no&quot;<br>IPV6INIT=&quot;yes&quot;<br>IPV6_AUTOCONF=&quot;yes&quot;<br>IPV6_DEFROUTE=&quot;yes&quot;<br>IPV6_FAILURE_FATAL=&quot;no&quot;<br>IPV6_ADDR_GEN_MODE=&quot;stable-privacy&quot;<br>NAME=&quot;ens33&quot;<br>UUID=&quot;1b0011cb-0d2e-4eaa-8a11-af7d50ebc876&quot;<br>DEVICE=&quot;ens33&quot;<br>ONBOOT=&quot;yes&quot;<br>IPADDR=&quot;192.168.88.131&quot;# IP地址，自己设置，要匹配网络范围<br>NETMASK=&quot;255.255.255.0&quot;# 子网掩码，固定写法255.255.255.0<br>GATEWAY=&quot;192.168.88.2&quot;# 网关，要和VMware中配置的一致<br>DNS1=&quot;192.168.88.2&quot;# DNS1服务器，和网关一致即可<br></code></pre></td></tr></table></figure></li></ol><h2 id="ps命令"><a href="#ps命令" class="headerlink" title="ps命令"></a>ps命令</h2><p>功能：查看进程信息</p><p>语法：<code>ps -ef</code>，查看全部进程信息，可以搭配grep做过滤：<code>ps -ef | grep xxx</code></p><h2 id="kill命令"><a href="#kill命令" class="headerlink" title="kill命令"></a>kill命令</h2><p><img src="https://image-set.oss-cn-zhangjiakou.aliyuncs.com/img-out/2022/10/27/20221027221303.png" alt="image-20221027221303037"></p><h2 id="nmap命令"><a href="#nmap命令" class="headerlink" title="nmap命令"></a>nmap命令</h2><p><img src="https://image-set.oss-cn-zhangjiakou.aliyuncs.com/img-out/2022/10/27/20221027221241.png" alt="image-20221027221241123"></p><h2 id="netstat命令"><a href="#netstat命令" class="headerlink" title="netstat命令"></a>netstat命令</h2><p>功能：查看端口占用</p><p>用法：<code>netstat -anp | grep xxx</code></p><h2 id="ping命令"><a href="#ping命令" class="headerlink" title="ping命令"></a>ping命令</h2><p>测试网络是否联通</p><p>语法：<code>ping [-c num] 参数</code></p><p><img src="https://image-set.oss-cn-zhangjiakou.aliyuncs.com/img-out/2022/10/27/20221027221129.png" alt="image-20221027221129782"></p><h2 id="wget命令"><a href="#wget命令" class="headerlink" title="wget命令"></a>wget命令</h2><p><img src="https://image-set.oss-cn-zhangjiakou.aliyuncs.com/img-out/2022/10/27/20221027221149.png" alt="image-20221027221148964"></p><h2 id="curl命令"><a href="#curl命令" class="headerlink" title="curl命令"></a>curl命令</h2><p><img src="https://image-set.oss-cn-zhangjiakou.aliyuncs.com/img-out/2022/10/27/20221027221201.png" alt="image-20221027221201079"></p><p><img src="https://image-set.oss-cn-zhangjiakou.aliyuncs.com/img-out/2022/10/27/20221027221210.png" alt="image-20221027221210518"></p><h2 id="top命令"><a href="#top命令" class="headerlink" title="top命令"></a>top命令</h2><p>功能：查看主机运行状态</p><p>语法：<code>top</code>，查看基础信息</p><p>可用选项：</p><p><img src="https://image-set.oss-cn-zhangjiakou.aliyuncs.com/img-out/2022/10/27/20221027221340.png" alt="image-20221027221340729"></p><p>交互式模式中，可用快捷键：</p><p><img src="https://image-set.oss-cn-zhangjiakou.aliyuncs.com/img-out/2022/10/27/20221027221354.png" alt="image-20221027221354137"></p><h2 id="df命令"><a href="#df命令" class="headerlink" title="df命令"></a>df命令</h2><p>查看磁盘占用</p><p><img src="https://image-set.oss-cn-zhangjiakou.aliyuncs.com/img-out/2022/10/27/20221027221413.png" alt="image-20221027221413787"></p><h2 id="iostat命令"><a href="#iostat命令" class="headerlink" title="iostat命令"></a>iostat命令</h2><p>查看CPU、磁盘的相关信息</p><p><img src="https://image-set.oss-cn-zhangjiakou.aliyuncs.com/img-out/2022/10/27/20221027221440.png" alt="image-20221027221439990"></p><p><img src="https://image-set.oss-cn-zhangjiakou.aliyuncs.com/img-out/2022/10/27/20221027221514.png" alt="image-20221027221514237"></p><h2 id="sar命令"><a href="#sar命令" class="headerlink" title="sar命令"></a>sar命令</h2><p>查看网络统计</p><p><img src="https://image-set.oss-cn-zhangjiakou.aliyuncs.com/img-out/2022/10/27/20221027221545.png" alt="image-20221027221545822"></p><h2 id="环境变量"><a href="#环境变量" class="headerlink" title="环境变量"></a>环境变量</h2><ul><li>临时设置：export 变量名&#x3D;变量值</li><li>永久设置：<ul><li>针对用户，设置用户HOME目录内：<code>.bashrc</code>文件</li><li>针对全局，设置<code>/etc/profile</code></li></ul></li></ul><h3 id="PATH变量"><a href="#PATH变量" class="headerlink" title="PATH变量"></a>PATH变量</h3><p>记录了执行程序的搜索路径</p><p>可以将自定义路径加入PATH内，实现自定义命令在任意地方均可执行的效果</p><h2 id="符号"><a href="#符号" class="headerlink" title="$符号"></a>$符号</h2><p>可以取出指定的环境变量的值</p><p>语法：<code>$变量名</code></p><p>示例：</p><p><code>echo $PATH</code>，输出PATH环境变量的值</p><p><code>echo $&#123;PATH&#125;ABC</code>，输出PATH环境变量的值以及ABC</p><p>如果变量名和其它内容混淆在一起，可以使用${}</p><h2 id="压缩解压"><a href="#压缩解压" class="headerlink" title="压缩解压"></a>压缩解压</h2><h3 id="压缩"><a href="#压缩" class="headerlink" title="压缩"></a>压缩</h3><p><code>tar -zcvf 压缩包 被压缩1...被压缩2...被压缩N</code></p><ul><li>-z表示使用gzip，可以不写</li></ul><p><code>zip [-r] 参数1 参数2 参数N</code></p><p><img src="https://image-set.oss-cn-zhangjiakou.aliyuncs.com/img-out/2022/10/27/20221027221906.png" alt="image-20221027221906247"></p><h3 id="解压"><a href="#解压" class="headerlink" title="解压"></a>解压</h3><p><code>tar -zxvf 被解压的文件 -C 要解压去的地方</code></p><ul><li>-z表示使用gzip，可以省略</li><li>-C，可以省略，指定要解压去的地方，不写解压到当前目录</li></ul><p><code>unzip [-d] 参数</code></p><p><img src="https://image-set.oss-cn-zhangjiakou.aliyuncs.com/img-out/2022/10/27/20221027221939.png" alt="image-20221027221939899"></p><h2 id="su命令"><a href="#su命令" class="headerlink" title="su命令"></a>su命令</h2><p>切换用户</p><p>语法：<code>su [-] [用户]</code></p><p><img src="https://image-set.oss-cn-zhangjiakou.aliyuncs.com/img-out/2022/10/27/20221027222021.png" alt="image-20221027222021619"></p><h2 id="sudo命令"><a href="#sudo命令" class="headerlink" title="sudo命令"></a>sudo命令</h2><p><img src="https://image-set.oss-cn-zhangjiakou.aliyuncs.com/img-out/2022/10/27/20221027222035.png" alt="image-20221027222035337"></p><p>比如：</p><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs shell">itheima ALL=(ALL)       NOPASSWD: ALL<br></code></pre></td></tr></table></figure><p>在visudo内配置如上内容，可以让itheima用户，无需密码直接使用<code>sudo</code></p><h2 id="chmod命令"><a href="#chmod命令" class="headerlink" title="chmod命令"></a>chmod命令</h2><p>修改文件、文件夹权限</p><p>语法：<code>chmod [-R] 权限 参数</code></p><ul><li><p>权限，要设置的权限，比如755，表示：<code>rwxr-xr-x</code></p><p><img src="https://image-set.oss-cn-zhangjiakou.aliyuncs.com/img-out/2022/10/27/20221027222157.png" alt="image-20221027222157276"></p></li><li><p>参数，被修改的文件、文件夹</p></li><li><p>选项-R，设置文件夹和其内部全部内容一样生效</p></li></ul><h2 id="chown命令"><a href="#chown命令" class="headerlink" title="chown命令"></a>chown命令</h2><p>修改文件、文件夹所属用户、组</p><p>语法：<code>chown [-R] [用户][:][用户组] 文件或文件夹</code></p><p><img src="https://image-set.oss-cn-zhangjiakou.aliyuncs.com/img-out/2022/10/27/20221027222326.png" alt="image-20221027222326192"></p><h2 id="用户组管理"><a href="#用户组管理" class="headerlink" title="用户组管理"></a>用户组管理</h2><p><img src="https://image-set.oss-cn-zhangjiakou.aliyuncs.com/img-out/2022/10/27/20221027222354.png" alt="image-20221027222354498"></p><h2 id="用户管理"><a href="#用户管理" class="headerlink" title="用户管理"></a>用户管理</h2><p><img src="https://image-set.oss-cn-zhangjiakou.aliyuncs.com/img-out/2022/10/27/20221027222407.png" alt="image-20221027222407618"></p><h2 id="genenv命令"><a href="#genenv命令" class="headerlink" title="genenv命令"></a>genenv命令</h2><ul><li><p><code>getenv group</code>，查看系统全部的用户组</p><p><img src="https://image-set.oss-cn-zhangjiakou.aliyuncs.com/img-out/2022/10/27/20221027222446.png" alt="image-20221027222446514"></p></li><li><p><code>getenv passwd</code>，查看系统全部的用户</p><p><img src="https://image-set.oss-cn-zhangjiakou.aliyuncs.com/img-out/2022/10/27/20221027222512.png" alt="image-20221027222512274"></p></li></ul><h2 id="env命令"><a href="#env命令" class="headerlink" title="env命令"></a>env命令</h2><p>查看系统全部的环境变量</p><p>语法：<code>env</code></p>]]>
    </content>
    <id>https://netguy6.github.io/2026/02/05/Linux%E5%9F%BA%E7%A1%80/</id>
    <link href="https://netguy6.github.io/2026/02/05/Linux%E5%9F%BA%E7%A1%80/"/>
    <published>2026-02-04T16:00:00.000Z</published>
    <summary>Linux 基础命令、目录结构与常用操作总结。</summary>
    <title>Linux基础</title>
    <updated>2026-08-13T11:06:31.137Z</updated>
  </entry>
  <entry>
    <author>
      <name>net06</name>
    </author>
    <category term="AI" scheme="https://netguy6.github.io/categories/AI/"/>
    <category term="AI" scheme="https://netguy6.github.io/tags/AI/"/>
    <content>
      <![CDATA[<h3 id="一、基础指令型（明确需求边界，快速获取精准结果）"><a href="#一、基础指令型（明确需求边界，快速获取精准结果）" class="headerlink" title="一、基础指令型（明确需求边界，快速获取精准结果）"></a>一、基础指令型（明确需求边界，快速获取精准结果）</h3><p>核心作用：通过定义角色、目标、输出形式，让AI直接匹配需求，适合基础信息获取、主题内容梳理。</p><ol><li><p><strong>RTF框架（角色-Role、任务-Task、格式-Format）</strong><br>核心：先给AI“身份”，再派“任务”，最后定“输出样式”。<br>示例：“扮演职场礼仪讲师（角色），整理商务会议中的3个核心礼仪要点（任务），以‘要点+具体场景’的分点形式呈现（格式）。”</p></li><li><p><strong>TAG框架（目标-Target、行动-Action、指南-Guidance）</strong><br>核心：先明确“要达成的目标”，再让AI设计“具体行动”，最后补充“执行参考”。<br>示例：“目标是让新手快速学会煮奶茶（目标），帮我设计3个步骤的制作流程（行动），并标注每个步骤的常见错误及规避方法（指南）。”</p></li></ol><h3 id="二、深度验证型（聚焦信息严谨性，确保内容可靠）"><a href="#二、深度验证型（聚焦信息严谨性，确保内容可靠）" class="headerlink" title="二、深度验证型（聚焦信息严谨性，确保内容可靠）"></a>二、深度验证型（聚焦信息严谨性，确保内容可靠）</h3><p>核心作用：针对需要核实、论证的需求，让AI主动追溯来源、验证逻辑，适合学术研究、事实核查、观点分析。</p><ul><li><strong>SCRI框架（来源-Source、验证-Verification、结论-Conclusion、信息-Information）</strong><br>核心：先明确“要分析的信息”，再让AI找“权威来源”，验证“合理性”，最后给“明确结论”。<br>示例：“分析‘每天喝8杯水更健康’这一说法（信息），帮我查找2个权威医学机构（如WHO、中国营养学会）的相关研究（来源），验证该说法的适用人群和科学依据（验证），最后总结结论（结论）。”</li></ul><h3 id="三、落地规划型（拆解行动路径，适配个人-场景条件）"><a href="#三、落地规划型（拆解行动路径，适配个人-场景条件）" class="headerlink" title="三、落地规划型（拆解行动路径，适配个人&#x2F;场景条件）"></a>三、落地规划型（拆解行动路径，适配个人&#x2F;场景条件）</h3><p>核心作用：将抽象需求转化为可执行的步骤，或结合个人能力、时间等条件定制方案，适合学习、任务推进、项目落地。</p><ol><li><p><strong>GPS框架（目标-Goal、过程-Process、策略-Strategy）</strong><br>核心：先定“最终目标”，再拆解“执行过程”，最后给“高效策略”。<br>示例：“目标是1个月内掌握Excel基础函数（目标），拆解为‘第1周学求和&#x2F;计数函数，第2-3周学筛选&#x2F;排序，第4周练综合案例’的过程（过程），并给出‘每天练1个函数案例、用工作数据实操’的策略（策略）。”</p></li><li><p><strong>TARA框架（主题-Topic、角度-Angle、研究-Research、行动-Action）</strong><br> 核心：先定“核心主题”，再选“分析角度”，做“深度研究”，最后给“行动建议”。<br> 示例：“以‘年轻人理财’为主题（主题），从‘低风险理财工具’‘每月储蓄规划’两个角度（角度），研究3种适合新手的理财方式及风险（研究），最后给出‘先做收支记账、优先存应急金’的行动建议（行动）。”</p></li><li><p><strong>WET框架（意愿-Will、能力-Ability、时间-Time）</strong><br> 核心：结合“个人意愿”“现有能力”“可投入时间”，定制适配的方案。<br> 示例：“我有学PS修图的意愿（意愿），目前会基础图片裁剪，无专业工具（能力），每周能抽3小时学习（时间），帮我定制2个月的入门学习计划。”</p></li></ol>]]>
    </content>
    <id>https://netguy6.github.io/2026/02/05/ai%E6%8F%90%E9%97%AE%E6%A8%A1%E6%9D%BF/</id>
    <link href="https://netguy6.github.io/2026/02/05/ai%E6%8F%90%E9%97%AE%E6%A8%A1%E6%9D%BF/"/>
    <published>2026-02-04T16:00:00.000Z</published>
    <summary>常用 AI 提问模板整理，覆盖角色、目标、格式和迭代优化方法。</summary>
    <title>ai提问模板</title>
    <updated>2026-08-13T11:06:31.138Z</updated>
  </entry>
  <entry>
    <author>
      <name>net06</name>
    </author>
    <category term="华为ensp" scheme="https://netguy6.github.io/categories/%E5%8D%8E%E4%B8%BAensp/"/>
    <category term="ensp" scheme="https://netguy6.github.io/tags/ensp/"/>
    <category term="WLAN" scheme="https://netguy6.github.io/tags/WLAN/"/>
    <content>
      <![CDATA[<h2 id="拓扑图"><a href="#拓扑图" class="headerlink" title="拓扑图"></a>拓扑图</h2><p><img src="/2026/02/05/%E4%B8%89%E5%B1%82%E6%97%81%E6%8C%82%E7%9B%B4%E6%8E%A5%E8%BD%AC%E5%8F%91WLAN/image-20251015175258105.png" alt="image-20251015175258105"></p><h2 id="配置过程"><a href="#配置过程" class="headerlink" title="配置过程"></a>配置过程</h2><h3 id="AR1"><a href="#AR1" class="headerlink" title="AR1"></a>AR1</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br></pre></td><td class="code"><pre><code class="hljs bash">sysname AR1<br><span class="hljs-comment"># 连接CORE的接口（GE0/0/1）</span><br>interface GigabitEthernet0/0/1<br> ip address 192.168.254.1 255.255.255.252<br><span class="hljs-comment"># 连接ISP的接口（GE0/0/0）</span><br>interface GigabitEthernet0/0/0<br> ip address 202.1.1.1 255.255.255.0<br><span class="hljs-comment"># OSPF路由：宣告外网和内网互联网段</span><br>ospf 1 router-id 11.11.11.1<br> area 0.0.0.0<br>  network 192.168.254.0 0.0.0.3<br><br><span class="hljs-comment"># 默认路由：指向ISP网关</span><br>ip route-static 0.0.0.0 0.0.0.0 202.1.1.2<br></code></pre></td></tr></table></figure><h3 id="ISP"><a href="#ISP" class="headerlink" title="ISP"></a>ISP</h3><figure class="highlight apache"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><code class="hljs apache"><span class="hljs-attribute">sysname</span> ISP<br><span class="hljs-comment"># 连接AR1的接口（GE0/0/1）</span><br><span class="hljs-attribute">interface</span> GigabitEthernet0/<span class="hljs-number">0</span>/<span class="hljs-number">0</span><br> <span class="hljs-attribute">ip</span> address <span class="hljs-number">202.1.1.2</span> <span class="hljs-number">255.255.255.0</span><br> <span class="hljs-comment"># 默认路由：指向AR1网关</span><br><span class="hljs-attribute">ip</span> route-static <span class="hljs-number">0.0.0.0</span> <span class="hljs-number">0.0.0.0</span> <span class="hljs-number">202.1.1.1</span><br></code></pre></td></tr></table></figure><h3 id="CORE"><a href="#CORE" class="headerlink" title="CORE"></a>CORE</h3><h4 id="1-VLAN与三层接口"><a href="#1-VLAN与三层接口" class="headerlink" title="1. VLAN与三层接口"></a>1. VLAN与三层接口</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br></pre></td><td class="code"><pre><code class="hljs bash">sysname CORE<br>vlan batch 99 2 3 4 5 200 100 1000  <span class="hljs-comment"># 创建AP管理、用户、互联VLAN</span><br><span class="hljs-comment"># AP管理网关（VLAN99）</span><br>interface Vlanif99<br> ip address 192.168.99.254 255.255.255.0<br> dhcp <span class="hljs-keyword">select</span> global  <span class="hljs-comment"># 为AP分配管理IP</span><br><span class="hljs-comment"># 用户网关（VLAN2/3/4/5）</span><br>interface Vlanif2<br> ip address 192.168.2.254 255.255.255.0<br> dhcp <span class="hljs-keyword">select</span> global<br>interface Vlanif3<br> ip address 192.168.3.254 255.255.255.0<br> dhcp <span class="hljs-keyword">select</span> global<br>interface Vlanif4<br> ip address 192.168.4.254 255.255.255.0<br> dhcp <span class="hljs-keyword">select</span> global<br>interface Vlanif5<br> ip address 192.168.5.254 255.255.255.0<br> dhcp <span class="hljs-keyword">select</span> global<br><span class="hljs-comment"># 与AC互联（VLAN200）</span><br>interface Vlanif200<br> ip address 192.168.200.1 255.255.255.0<br><span class="hljs-comment"># 与AR1互联（VLAN1000）</span><br>interface Vlanif1000<br> ip address 192.168.254.2 255.255.255.252<br></code></pre></td></tr></table></figure><h4 id="2-接口Trunk配置（连接AC、接入交换机、AR1）"><a href="#2-接口Trunk配置（连接AC、接入交换机、AR1）" class="headerlink" title="2. 接口Trunk配置（连接AC、接入交换机、AR1）"></a>2. 接口Trunk配置（连接AC、接入交换机、AR1）</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br></pre></td><td class="code"><pre><code class="hljs bash">dhcp <span class="hljs-built_in">enable</span><br><span class="hljs-comment"># 连接AR1（GE0/0/1）</span><br>interface GigabitEthernet0/0/1<br> port link-type access<br> port default vlan 1000<br><span class="hljs-comment"># 连接AC1（GE0/0/2）</span><br>interface GigabitEthernet0/0/2<br> port link-type access<br> port default vlan 200<br><span class="hljs-comment"># 连接接入交换机（GE0/0/3、GE0/0/4）</span><br>interface GigabitEthernet0/0/3<br> port link-type trunk<br> port trunk allow-pass vlan 99 2 3 4 100<br>interface GigabitEthernet0/0/4<br> port link-type trunk<br> port trunk allow-pass vlan 99 2 3 4 5 100<br></code></pre></td></tr></table></figure><h4 id="3-DHCP地址池（为AP和用户分配IP）"><a href="#3-DHCP地址池（为AP和用户分配IP）" class="headerlink" title="3. DHCP地址池（为AP和用户分配IP）"></a>3. DHCP地址池（为AP和用户分配IP）</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br></pre></td><td class="code"><pre><code class="hljs bash">dhcp <span class="hljs-built_in">enable</span><br><span class="hljs-comment"># AP管理IP池（VLAN99）</span><br>ip pool AP_Mgmt<br> gateway-list 192.168.99.254<br> network 192.168.99.0 mask 255.255.255.0<br> option 43 sub-option 3 ascii 192.168.200.2<br><span class="hljs-comment"># 用户IP池（VLAN2/3/4/5）</span><br>ip pool STA_VLAN2<br> gateway-list 192.168.2.254<br> network 192.168.2.0 mask 255.255.255.0<br> dns-list 8.8.8.8 114.114.114.114<br>ip pool STA_VLAN3<br> gateway-list 192.168.3.254<br> network 192.168.3.0 mask 255.255.255.0<br> dns-list 8.8.8.8 114.114.114.114<br>ip pool STA_VLAN4<br> gateway-list 192.168.4.254<br> network 192.168.4.0 mask 255.255.255.0<br> dns-list 8.8.8.8 114.114.114.114<br>ip pool STA_VLAN5<br> gateway-list 192.168.5.254<br> network 192.168.5.0 mask 255.255.255.0<br> dns-list 8.8.8.8 114.114.114.114<br></code></pre></td></tr></table></figure><h4 id="4-OSPF路由（与AC、AR1互联）"><a href="#4-OSPF路由（与AC、AR1互联）" class="headerlink" title="4. OSPF路由（与AC、AR1互联）"></a>4. OSPF路由（与AC、AR1互联）</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><code class="hljs bash">ospf 1 router-id 11.11.11.2<br> default-route-advertise always<br> area 0.0.0.0<br>  network 192.168.99.0 0.0.0.255<br>  network 192.168.2.0 0.0.0.255<br>  network 192.168.3.0 0.0.0.255<br>  network 192.168.4.0 0.0.0.255<br>  network 192.168.5.0 0.0.0.255<br>  network 192.168.200.0 0.0.0.255<br>  network 192.168.254.0 0.0.0.3<br></code></pre></td></tr></table></figure><h3 id="xzl-rjdl-poe"><a href="#xzl-rjdl-poe" class="headerlink" title="xzl\rjdl-poe"></a>xzl\rjdl-poe</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br></pre></td><td class="code"><pre><code class="hljs bash">sysname xjdl-poe<br>vlan batch 99 2 3 4 100<br><span class="hljs-comment"># 管理VLAN100（与CORE互联）</span><br>interface Vlanif100<br> ip address 192.168.100.1 255.255.255.0<br><span class="hljs-comment"># 连接CORE的接口（GE0/0/3）</span><br>interface GigabitEthernet0/0/3<br> port link-type trunk<br> port trunk allow-pass vlan 99 2 3 4 100<br><span class="hljs-comment"># 连接AP的接口（GE0/0/1）</span><br>interface GigabitEthernet0/0/1<br> port link-type trunk<br> port trunk pvid vlan 99<br> port trunk allow-pass vlan 99 2 3 4<br> <span class="hljs-comment">#设置网关</span><br> ip route-static 0.0.0.0 0.0.0.0 192.168.100.254<br> <br> sysname xzl-poe<br>vlan batch 99 2 3 4 5 100<br><span class="hljs-comment"># 管理VLAN100（与CORE互联）</span><br>interface Vlanif100<br> ip address 192.168.100.2 255.255.255.0<br><span class="hljs-comment"># 连接CORE的接口（GE0/0/4）</span><br>interface GigabitEthernet0/0/4<br> port link-type trunk<br> port trunk allow-pass vlan 99 2 3 4 5 100<br><span class="hljs-comment"># 连接AP的接口（GE0/0/1）</span><br>interface GigabitEthernet0/0/1<br> port link-type trunk<br> port trunk pvid vlan 99<br> port trunk allow-pass vlan 99 2 3 4 5<br> <span class="hljs-comment">#设置网关</span><br> ip route-static 0.0.0.0 0.0.0.0 192.168.100.254<br></code></pre></td></tr></table></figure><h3 id="AC1"><a href="#AC1" class="headerlink" title="AC1"></a>AC1</h3><h4 id="1-基础网络与CAPWAP"><a href="#1-基础网络与CAPWAP" class="headerlink" title="1. 基础网络与CAPWAP"></a>1. 基础网络与CAPWAP</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br></pre></td><td class="code"><pre><code class="hljs bash">sysname AC1<br>vlan 200<br><span class="hljs-comment"># 与CORE互联（VLAN200）</span><br>interface Vlanif200<br> ip address 192.168.200.2 255.255.255.0<br><span class="hljs-comment"># 连接CORE的接口（GE0/0/1）</span><br>interface GigabitEthernet0/0/2<br> port link-type access<br> port default vlan 200<br><span class="hljs-comment"># 指定CAPWAP源接口（仅传管理流量）</span><br>capwap <span class="hljs-built_in">source</span> interface Vlanif200<br><span class="hljs-comment">#ospf</span><br>ospf 1 router-id 11.11.11.3<br> area 0.0.0.0<br>  network 192.168.200.0 0.0.0.255<br></code></pre></td></tr></table></figure><h4 id="2-WLAN业务模板（SSID、安全、VAP）"><a href="#2-WLAN业务模板（SSID、安全、VAP）" class="headerlink" title="2. WLAN业务模板（SSID、安全、VAP）"></a>2. WLAN业务模板（SSID、安全、VAP）</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br></pre></td><td class="code"><pre><code class="hljs bash">wlan<br><span class="hljs-comment"># （1）SSID模板：定义WiFi名称</span><br>ssid-profile name net24<br> ssid net24<br>ssid-profile name guest<br> ssid guest<br><br><span class="hljs-comment"># （2）安全模板：定义加密方式</span><br>security-profile name wpa2<br> security wpa2 psk pass-phrase wpa2@123 aes  <span class="hljs-comment"># 员工WiFi密码</span><br>security-profile name open<br> security open  <span class="hljs-comment"># 访客WiFi无密码（或 Portal 认证）</span><br><br><span class="hljs-comment"># （3）流量模板：访客限速2Mbps</span><br>traffic-profile name guest<br> rate-limit down 2048  <span class="hljs-comment"># 下行2Mbps</span><br> rate-limit up 2048    <span class="hljs-comment"># 上行2Mbps</span><br><br><span class="hljs-comment"># （4）VLAN池：员工WiFi动态分配VLAN2/3/4</span><br>vlan pool net24-vlan<br> vlan 2 3 4<br><br><span class="hljs-comment"># （5）VAP模板：绑定SSID、安全、转发模式</span><br><span class="hljs-comment">## 员工WiFi（net24）：直接转发+VLAN池</span><br>vap-profile name net24<br> ssid-profile net24<br> security-profile wpa2<br>  service-vlan vlan-pool net24-vlan<br> forward-mode direct  <span class="hljs-comment"># 业务流量不经过AC，直接由AP转发</span><br><span class="hljs-comment">## 访客WiFi（guest）：直接转发+固定VLAN5+流量限速</span><br>vap-profile name guest<br> ssid-profile guest<br> security-profile open<br> service-vlan vlan-id 5<br> forward-mode direct<br> traffic-profile guest<br></code></pre></td></tr></table></figure><h4 id="3-AP注册与VAP下发"><a href="#3-AP注册与VAP下发" class="headerlink" title="3. AP注册与VAP下发"></a>3. AP注册与VAP下发</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-comment"># AP按MAC认证上线</span><br>ap auth-mode mac-auth<br><span class="hljs-comment">#创建组</span><br>ap-group name rjdl<br>ap-group name xzl<br><span class="hljs-comment"># 注册AP（替换为实际MAC）</span><br>ap-id 0 ap-mac 00e0-fcbb-1b70  <span class="hljs-comment"># 801-ap</span><br> ap-name 801-ap<br> ap-group rjdl<br>ap-id 1 ap-mac 00e0-fa9e-3e20  <span class="hljs-comment"># jwc-ap</span><br> ap-name jwc-ap<br> ap-group xzl<br><span class="hljs-comment">#下发配置</span><br>ap-group name rjdl<br> vap-profile net24 wlan 1 radio all<br>ap-group name xzl<br> vap-profile net24 wlan 1 radio all<br> vap-profile guest wlan 2 radio all<br></code></pre></td></tr></table></figure>]]>
    </content>
    <id>https://netguy6.github.io/2026/02/05/%E4%B8%89%E5%B1%82%E6%97%81%E6%8C%82%E7%9B%B4%E6%8E%A5%E8%BD%AC%E5%8F%91WLAN/</id>
    <link href="https://netguy6.github.io/2026/02/05/%E4%B8%89%E5%B1%82%E6%97%81%E6%8C%82%E7%9B%B4%E6%8E%A5%E8%BD%AC%E5%8F%91WLAN/"/>
    <published>2026-02-04T16:00:00.000Z</published>
    <summary>华为三层旁挂直接转发 WLAN 组网拓扑与配置过程。</summary>
    <title>三层旁挂直接转发WLAN</title>
    <updated>2026-08-13T11:06:31.139Z</updated>
  </entry>
  <entry>
    <author>
      <name>net06</name>
    </author>
    <category term="网安" scheme="https://netguy6.github.io/categories/%E7%BD%91%E5%AE%89/"/>
    <category term="网安tools" scheme="https://netguy6.github.io/tags/%E7%BD%91%E5%AE%89tools/"/>
    <content>
      <![CDATA[<h2 id="SQLmap基本使用"><a href="#SQLmap基本使用" class="headerlink" title="SQLmap基本使用"></a>SQLmap基本使用</h2><h3 id="基本必要参数"><a href="#基本必要参数" class="headerlink" title="基本必要参数"></a>基本必要参数</h3><figure class="highlight sql"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br></pre></td><td class="code"><pre><code class="hljs sql">更新 SQLmap<br><span class="hljs-comment">--update</span><br>只需确认是否可注入，并只显示 payload 技术与后端技术<br>sqlmap <span class="hljs-operator">-</span>u &quot;URL&quot;<br>获取数据库<br>sqlmap <span class="hljs-operator">-</span>u &quot;URL&quot; <span class="hljs-comment">--dbs</span><br>获取数据库所有数据表<br>sqlmap <span class="hljs-operator">-</span>u &quot;URL&quot; <span class="hljs-operator">-</span>D database <span class="hljs-comment">--tables</span><br>获取指定数据表的字段<br>sqlmap <span class="hljs-operator">-</span>u &quot;URL&quot; <span class="hljs-operator">-</span>D database <span class="hljs-operator">-</span>T <span class="hljs-keyword">table</span> <span class="hljs-comment">--columns</span><br>获取指定数据表的指定字段数据<br>sqlmap <span class="hljs-operator">-</span>u &quot;URL&quot; <span class="hljs-operator">-</span>D database <span class="hljs-operator">-</span>T <span class="hljs-keyword">table</span> <span class="hljs-operator">-</span>C field1,field2 <span class="hljs-comment">--dump</span><br>获取指定数据表的所有字段数据（去掉 <span class="hljs-operator">-</span> C 参数即可）<br>sqlmap <span class="hljs-operator">-</span>u &quot;URL&quot; <span class="hljs-operator">-</span>D database <span class="hljs-operator">-</span>T <span class="hljs-keyword">table</span> <span class="hljs-comment">--dump</span><br>不指定数据表，直接获取该指定数据库的所有数据<br>sqlmap <span class="hljs-operator">-</span>u &quot;URL&quot; <span class="hljs-operator">-</span>D database <span class="hljs-comment">--dump-all</span><br></code></pre></td></tr></table></figure><h3 id="常用参数"><a href="#常用参数" class="headerlink" title="常用参数"></a>常用参数</h3><figure class="highlight sql"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br><span class="line">87</span><br><span class="line">88</span><br><span class="line">89</span><br><span class="line">90</span><br><span class="line">91</span><br><span class="line">92</span><br><span class="line">93</span><br><span class="line">94</span><br><span class="line">95</span><br><span class="line">96</span><br><span class="line">97</span><br><span class="line">98</span><br><span class="line">99</span><br></pre></td><td class="code"><pre><code class="hljs sql"># 使用随机选择的 HTTP <span class="hljs-keyword">User</span><span class="hljs-operator">-</span>Agent 标头值，用于绕过 WAF<br><span class="hljs-comment">--random-agent</span><br><br># POST 数据<br># 也可注入json，看网站怎么发送请求，<span class="hljs-comment">--data &quot;&#123;&#x27;a&#x27;:1,&#x27;b&#x27;:2&#125;&quot; 或者 --data &#x27;&#123;&quot;a&quot;:1,&quot;b&quot;:2&#125;&#x27;</span><br><span class="hljs-comment">--data &quot;a=1&amp;b=2&quot;</span><br><br># 使用情景通常发生在，某些登录后的页面才有注入点，不加cookie就访问不到该网站<br># 当然也有些网站即使没登录，但是没cookie一样访问不到<br><span class="hljs-comment">--cookie &quot;SESSION_ID=xxx;abc=xxx;&quot;</span><br><br># 使用情景通常是不加的话，可能会被后端或者防火墙拦截等等<br># 如果在header中已经指定<span class="hljs-keyword">User</span><span class="hljs-operator">-</span>Agent，就别加<span class="hljs-comment">--random-agent参数</span><br><span class="hljs-comment">--header &quot;User-Agent: Mozilla/5.0 (Windows NT ...&quot;</span><br><br># 指定注入参数<br><span class="hljs-operator">-</span>p par1,par2<br><br># 跳过注入参数<br><span class="hljs-comment">--skip par1,par2</span><br><br># 指定注入技术，不使用此参数，默认就是全测，有 BEUSTQ<br># B <span class="hljs-operator">=</span> <span class="hljs-type">boolean</span><span class="hljs-operator">-</span>based<br># E <span class="hljs-operator">=</span> error<span class="hljs-operator">-</span>based<br># U <span class="hljs-operator">=</span> <span class="hljs-keyword">union</span><span class="hljs-operator">-</span>based<br># S <span class="hljs-operator">=</span> stacked<span class="hljs-operator">-</span>queries<br># T <span class="hljs-operator">=</span> <span class="hljs-type">time</span><span class="hljs-operator">-</span>based<br># Q <span class="hljs-operator">=</span> inline<span class="hljs-operator">-</span>queries<br><span class="hljs-comment">--technique BEQU</span><br><br># 指定 <span class="hljs-keyword">union</span> <span class="hljs-keyword">select</span> 的 <span class="hljs-keyword">column</span> 列数<br># 可以手动 fuzzing 出来指定<br><span class="hljs-comment">--union-cols 5</span><br><br># 指定使用<span class="hljs-keyword">union</span>技术时，每个字段的值是多少<br># 例如，假设已知cols为<span class="hljs-number">5</span>，且<span class="hljs-keyword">union</span> <span class="hljs-keyword">select</span> <span class="hljs-number">1</span>,<span class="hljs-number">2</span>,<span class="hljs-number">3</span>,<span class="hljs-number">4</span>,<span class="hljs-number">5</span>，<span class="hljs-number">2</span>跟<span class="hljs-number">5</span>可回显数据<br># 如果我想指定注入<span class="hljs-number">2</span>的位置，可以这样设置<br># <span class="hljs-comment">--union-values &quot;1,*,3,4,5&quot;</span><br><span class="hljs-comment">--union-values &quot;1,*,3,4,5&quot;</span><br><br># 指定payload前缀<br><span class="hljs-comment">--prefix &quot;&#x27;&quot;</span><br><br># 指定payload后缀<br><span class="hljs-comment">--suffix &quot;-- a&quot;</span><br><br># 显示注入过程详细信息，数字越大越详细<br># (<span class="hljs-number">0</span><span class="hljs-operator">~</span><span class="hljs-number">6</span>，默认是<span class="hljs-number">1</span>，常用是<span class="hljs-number">3</span>，手动可注入但SQLmap找不到时，可以设<span class="hljs-number">6</span>协助调试)<br># 使用情景通常发生在fuzzing时的注入<br><span class="hljs-operator">-</span>v <span class="hljs-number">3</span><br><br># 指定后端数据库类型<br># 中间有空格要使用双引号，如：&quot;Microsoft Access&quot;<br><span class="hljs-comment">--dbms mysql</span><br><br># 自动模式，自动选取默认选项<br><span class="hljs-comment">--batch</span><br><br># 跳过防火墙检测测试<br><span class="hljs-comment">--skip-waf</span><br><br># 设定SQLmap注入检测风险技术，等级<span class="hljs-number">1</span><span class="hljs-operator">~</span><span class="hljs-number">3</span>，默认<span class="hljs-number">1</span><br># ps. 原本仅使用<span class="hljs-keyword">AND</span>，会变成<span class="hljs-keyword">OR</span>也使用<br># 在某些注入的情景可能会误操作数据库数据，因此请谨慎使用<br><span class="hljs-comment">--risk N</span><br><br><br># 设定SQLmap注入检测层级，默认 <span class="hljs-number">1</span>，每个层级的说明如下<br># Level <span class="hljs-number">1</span>：在 Level <span class="hljs-number">1</span> 中，SQLmap 会执行基本的测试，包括以下方面：<br>#   检测基本的 <span class="hljs-keyword">SQL</span> 注入点。<br>#   基于 <span class="hljs-keyword">UNION</span> 运算符的简单注入测试。<br>#   基本的布尔型注入测试，如 <span class="hljs-keyword">AND</span><span class="hljs-operator">/</span><span class="hljs-keyword">OR</span> payload 测试。<br><br># Level <span class="hljs-number">2</span>：在 Level <span class="hljs-number">2</span> 中，SQLmap 将进行进一步的测试，包括：<br>#   检测复杂的 <span class="hljs-keyword">SQL</span> 注入点，如带有过滤机制的情况。<br>#   测试基于时间延迟的注入，以绕过某些安全检测。<br>#   测试多个可能的注入点。<br><br># Level <span class="hljs-number">3</span>：在 Level <span class="hljs-number">3</span> 中，SQLmap 将进一步扩展其测试范围，可能会涉及：<br>#   检测 cookie 或其他 HTTP 请求参数中的注入点。<br>#   测试更复杂的 <span class="hljs-keyword">SQL</span> 注入漏洞，如深度嵌套的 <span class="hljs-keyword">SQL</span> 查询或存储过程。<br>#   测试更多不同类型的数据库。<br><br># Level <span class="hljs-number">4</span>：在 Level <span class="hljs-number">4</span> 中，SQLmap 将采用更多的高级技术和深度测试，这可能包括：<br>#   测试对目标系统的各种服务进行深度扫描，以寻找更多的注入点。<br>#   测试对目标系统进行较为精细的指纹识别，以定制更有效的注入攻击。<br><br># Level <span class="hljs-number">5</span>：在 Level <span class="hljs-number">5</span> 中，SQLmap 将启用所有可用的测试和技术，这可能包括：<br>#   对目标系统的所有输入点进行广泛的测试，包括 HTTP 请求中的各种参数和 cookies。<br>#   使用高度复杂的注入模式，如二次注入、堆叠注入等。<br>#   对目标系统进行更广泛和深入的分析，以确定可能存在的漏洞点。<br><span class="hljs-comment">--level N</span><br><br><br># 让SQLmap自己爬网页上的注入点<br><span class="hljs-comment">--forms</span><br><br># 有时候因为TLS<span class="hljs-operator">/</span>SSL问题会导致sqlmap连不上（但是浏览器又可以正常访问），直接使用此命令即可<br><span class="hljs-comment">--force-ssl</span><br></code></pre></td></tr></table></figure><h3 id="成功注入后会使用的参数"><a href="#成功注入后会使用的参数" class="headerlink" title="成功注入后会使用的参数"></a>成功注入后会使用的参数</h3><figure class="highlight sql"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br></pre></td><td class="code"><pre><code class="hljs sql"># 直接执行<span class="hljs-keyword">SQL</span>语法<br># 注意，CRUD语法不一定支持，即使有堆叠注入建议还是手动操作<br><span class="hljs-comment">--sql-query &quot;select version()&quot;</span><br><br># 列出数据库banner、version信息<br><span class="hljs-operator">-</span>b<br><br># 列出所有数据库<br><span class="hljs-comment">--dbs</span><br><br># 指定数据库名称<br><span class="hljs-operator">-</span>D &quot;DB_Name&quot;<br><br># 列出指定数据库内的所有表（需搭配<span class="hljs-operator">-</span>D参数）<br><span class="hljs-comment">--tables</span><br><br># 指定表名称<br><span class="hljs-operator">-</span>T &quot;Table_Name&quot;<br><br># 列出指定表内的所有列（需搭配<span class="hljs-operator">-</span>T参数）<br><span class="hljs-comment">--columns</span><br><br># 指定要列出的列数据<br><span class="hljs-operator">-</span>C &quot;account,password&quot;<br><br># 指定不要列出的列数据<br><span class="hljs-operator">-</span>X &quot;id,time&quot;<br><br># 列出指定列的所有数据<br># 如果不使用<span class="hljs-operator">-</span>C参数，则列出指定表的所有字段数据<br><span class="hljs-comment">--dump</span><br><br># 仅列出符合<span class="hljs-keyword">where</span>条件的数据<br># 使用场景通常发生在，你只想查找管理员或某些特定数据，不想全部注入出来<br># 如果你只想获取user_id字段符合<span class="hljs-string">&#x27;admin&#x27;</span>字符串的数据<br><span class="hljs-comment">--where &quot;user_id=&#x27;admin&#x27;&quot;</span><br><br># 列出指定数据库内所有表的数据<br># （只需<span class="hljs-operator">-</span>D &quot;DB_Name&quot;即可，不需要后面的<span class="hljs-comment">--table等参数）</span><br><span class="hljs-comment">--dump-all</span><br><br># 检测数据库是否有DBA权限，例如读文件、写文件<br># 但这个结果仅供参考，不一定准确（个人实战经验）<br><span class="hljs-comment">--is-dba</span><br><br># 获取<span class="hljs-keyword">SQL</span>注入账号的密码哈希<br><span class="hljs-comment">--passwords</span><br><br># 检测当前使用的数据库<br><span class="hljs-comment">--current-db</span><br><br># 检测当前使用数据库的用户名<br><span class="hljs-comment">--current-user</span><br><br># 枚举当前注入点权限所能访问到的所有数据库用户<br><span class="hljs-comment">--users</span><br><br># 尝试读取指定路径下的文件<br><span class="hljs-comment">--file-read &quot;/etc/passwd&quot;</span><br><br># 指定尝试写入对方服务器的文件（需搭配<span class="hljs-comment">--file-dest参数）</span><br># 如果你直接把文件放在SQLmap目录，参数不一定要绝对路径，相对路径也可以<br><span class="hljs-comment">--file-write &quot;/your/file/path&quot;</span><br><br># 指定服务器后端的绝对路径（需搭配<span class="hljs-comment">--file-write参数）</span><br><span class="hljs-comment">--file-dest &quot;/server/root/path&quot;</span><br><br># 进入模拟<span class="hljs-keyword">SQL</span>指令互动环境<br><span class="hljs-comment">--sql-shell</span><br><br># 尝试获取远程命令执行（RCE）<br><span class="hljs-comment">--os-shell</span><br><br># 指定后端写文件路径，使用<span class="hljs-comment">--os-shell时可用</span><br><span class="hljs-comment">--web-root &quot;/var/www/html/upload&quot;</span><br><br># 指定后端系统类型，使用场景通常发生在SQLmap误判后端操作系统<br># 例如要操作读写文件时，后端是windows，结果写成linux路径导致失败<br># 可选值有：windows、macos、linux、unix<br><span class="hljs-comment">--os windows</span><br></code></pre></td></tr></table></figure><h3 id="例外情况"><a href="#例外情况" class="headerlink" title="例外情况"></a>例外情况</h3><p> 当手动测试确定存在注入但SQLmap检测不到时</p><figure class="highlight sql"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br></pre></td><td class="code"><pre><code class="hljs sql"># 仅根据渲染完毕的静态html页面做比较<br><span class="hljs-comment">--text-only</span><br><br># 检测页面某个字符串作为布尔注入前后比较值<br><span class="hljs-comment">--string &quot;STR&quot;</span><br><br># 让SQLmap不对payload做URL encode编码<br><span class="hljs-comment">--skip-urlencode</span><br><br># 让SQLmap不将字符串做转义<br># 例如<span class="hljs-string">&#x27;abc&#x27;</span>不转义成<span class="hljs-number">0x616263</span>或<span class="hljs-type">CHAR</span>(<span class="hljs-number">97</span>)<span class="hljs-operator">+</span><span class="hljs-type">CHAR</span>(<span class="hljs-number">98</span>)<span class="hljs-operator">+</span><span class="hljs-type">CHAR</span>(<span class="hljs-number">99</span>)<br><span class="hljs-comment">--no-escape</span><br><br># 设置网页反应的延迟时间，默认是<span class="hljs-number">5</span>（这里指的是<span class="hljs-type">time</span><span class="hljs-operator">-</span>based注入技术时的反应检测时间）<br><span class="hljs-comment">--time-sec 10</span><br><br># 设置网页反应的延迟时间，默认是<span class="hljs-number">30</span>（这里指的是等待网页response的时间）<br><span class="hljs-comment">--timeout 60</span><br><br># 设置连接超时的重试次数，默认是<span class="hljs-number">3</span>次<br><span class="hljs-comment">--retries 5</span><br><br># 可能后端程序有错误导致<span class="hljs-number">500</span> http code，且sqlmap因该错误无法进行注入<br># 但是手动检测发现会有<span class="hljs-type">time</span><span class="hljs-operator">-</span>based反应之类的，让sqlmap忽略<span class="hljs-number">500</span> http code直接注入<br><span class="hljs-comment">--ignore-code 500</span><br><br># 有时候即使你想开启batch，但是SQLmap会自动选择默认选项（但可能该选项不是你想要的）<br># 那就可以使用此参数预先设置你要的结果，例如，注入过程中SQLmap询问：<br># redirect <span class="hljs-keyword">is</span> a <span class="hljs-keyword">result</span> <span class="hljs-keyword">of</span> a POST request. Do you want <span class="hljs-keyword">to</span> resend original POST data <span class="hljs-keyword">to</span> a <span class="hljs-keyword">new</span> location? [Y<span class="hljs-operator">/</span>n] Y<br># 如果你想选n，而不是默认的Y，则可以这样：<br># <span class="hljs-comment">--answer &quot;redirect is a result of a POST request. Do you want to resend original POST data to a new location=n&quot;</span><br># 但这样太长，其实也可以用部分内容，如下（主要是内容只要在一定范围内，SQLmap能识别是哪个问题的选择即可）<br><span class="hljs-comment">--answer &quot;redirect is a result=n&quot;</span><br></code></pre></td></tr></table></figure><h3 id="资料无法获取问题"><a href="#资料无法获取问题" class="headerlink" title="资料无法获取问题"></a>资料无法获取问题</h3><p>SQLmap明明已经注入出payload技术，但获取数据时却失败（或没有任何数据），有时候不一定是WAF的拦截，大概率是后端数据解析异常所导致（也有可能是误报，建议加上–flush-session重试），因此可尝试加上以下参数（实战中很常用到）</p><figure class="highlight sql"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><code class="hljs sql"># 将输出数据转换为<span class="hljs-number">16</span>进制数据后提取<br><span class="hljs-comment">--hex</span><br><br># 不要对注入的数据进行编码或者自动转换类型<br># 例如注入的字符是 var<span class="hljs-operator">=</span>test[<span class="hljs-number">0</span>]<span class="hljs-string">&#x27;-- a</span><br><span class="hljs-string"># 让SQLmap不要转换成 var=test%5B0%5D&#x27;</span><span class="hljs-comment">-- a</span><br># 或者让SQLmap不要对数据进行自动转型，比如把某个字符串转换成 <span class="hljs-type">VARCHAR</span> 类型<br><span class="hljs-comment">--no-cast</span><br></code></pre></td></tr></table></figure><h3 id="资料乱码问题"><a href="#资料乱码问题" class="headerlink" title="资料乱码问题"></a>资料乱码问题</h3><p>当注入出来的结果为乱码时，有可能字段是blob等因素，可以转成二进制输出</p><figure class="highlight sql"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><code class="hljs sql"># 忽略存储在会话文件中的查询结果<br><span class="hljs-comment">--fresh-queries</span><br><br># 具有二进制值的结果字段（例如&quot;摘要&quot;）<br><span class="hljs-comment">--binary-fields column_name</span><br><br></code></pre></td></tr></table></figure><h3 id="加速注入"><a href="#加速注入" class="headerlink" title="加速注入"></a>加速注入</h3><p>当你非常清楚漏洞情况并且想跳过一些测试负载，你可以使用如下参数</p><figure class="highlight sql"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br></pre></td><td class="code"><pre><code class="hljs sql"># 指定SQLmap只测试哪种模板的有效负载<br># 例如 <span class="hljs-comment">--test-filter &quot;Microsoft SQL Server/Sybase stacked queries (DECLARE)&quot;</span><br># 就只会测试<span class="hljs-keyword">DECLARE</span>的堆叠注入<br><span class="hljs-comment">--test-filter &quot;payload template name&quot;</span><br><br># 指定SQLmap跳过测试哪种模板的有效负载<br># 例如 <span class="hljs-comment">--test-filter &quot;Microsoft SQL Server/Sybase stacked queries (DECLARE)&quot;</span><br># 就会跳过测试<span class="hljs-keyword">DECLARE</span>的堆叠注入模板<br><span class="hljs-comment">--test-skip &quot;payload template name&quot;</span><br><br>python sqlmap.py ... <span class="hljs-comment">--test-skip=&#x27;(MySQL &gt; 5)|(MySQL &gt;= 5)&#x27;</span><br><br>或者<br><br>python sqlmap.py ... <span class="hljs-comment">--test-skip=&#x27;MySQL &gt;=? 5&#x27;</span><br></code></pre></td></tr></table></figure><h3 id="二次注入"><a href="#二次注入" class="headerlink" title="二次注入"></a>二次注入</h3><figure class="highlight sql"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><code class="hljs sql"># 当某个注入点会先存储payload，在访问其他页面才会触发执行<span class="hljs-keyword">SQL</span>语句时可用<br><span class="hljs-comment">--second-url &quot;http://target.com/sqli.php&quot;</span><br><br># 如果不是单纯用<span class="hljs-keyword">GET</span>访问可触发，可能需要POST之类的复杂请求<br># 就可以改用文件的方式直接给header让sqlmap解析，就像 <span class="hljs-operator">-</span>r 参数那样<br><span class="hljs-comment">--second-req xxx.req</span><br></code></pre></td></tr></table></figure><h3 id="常用绕过waf脚本"><a href="#常用绕过waf脚本" class="headerlink" title="常用绕过waf脚本"></a>常用绕过waf脚本</h3><p>当防火墙阻挡规则有迹可循且不复杂，也可以自己编写绕过脚本</p><figure class="highlight sql"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><code class="hljs sql"><span class="hljs-comment">--tamper space2comment,space2hash,space2mssqlhash</span><br><br># 当规则可能很简单，你不想写tamper，也可以改用<span class="hljs-comment">--eval参数（但只能测试一种参数）</span><br># 如果目标为 xxx.php?id<span class="hljs-operator">=</span><span class="hljs-number">1</span>，且你只想将<span class="hljs-keyword">AND</span>换成<span class="hljs-operator">&amp;&amp;</span>，则可以<br><span class="hljs-comment">--eval &quot;id=id.replace(&#x27; AND &#x27;,&#x27; &amp;&amp; &#x27;)&quot;</span><br></code></pre></td></tr></table></figure><h3 id="captcha"><a href="#captcha" class="headerlink" title="captcha"></a>captcha</h3><p>当注入点需要先通过captcha图形验证码时，可以使用此参数来串联图形识别模块以绕过此限制</p><figure class="highlight sql"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs sql"><span class="hljs-comment">--preprocess &quot;/path/to/captcha_bypass.py&quot;</span><br></code></pre></td></tr></table></figure>]]>
    </content>
    <id>https://netguy6.github.io/2026/02/05/sqlmap/</id>
    <link href="https://netguy6.github.io/2026/02/05/sqlmap/"/>
    <published>2026-02-04T16:00:00.000Z</published>
    <summary>SQLmap 基本使用与常用注入检测命令整理。</summary>
    <title>SQLmap基本使用</title>
    <updated>2026-08-13T11:06:31.139Z</updated>
  </entry>
  <entry>
    <author>
      <name>net06</name>
    </author>
    <category term="华为ensp" scheme="https://netguy6.github.io/categories/%E5%8D%8E%E4%B8%BAensp/"/>
    <category term="ensp" scheme="https://netguy6.github.io/tags/ensp/"/>
    <category term="常用命令" scheme="https://netguy6.github.io/tags/%E5%B8%B8%E7%94%A8%E5%91%BD%E4%BB%A4/"/>
    <content>
      <![CDATA[<p>本文基于华为eNSP（Enterprise Network Simulation Platform）模拟器，按“基础操作→设备配置→二层技术→三层技术→高级特性→排错工具”的逻辑结构化整理命令。</p><h2 id="一、基础命令视图（核心入口）"><a href="#一、基础命令视图（核心入口）" class="headerlink" title="一、基础命令视图（核心入口）"></a>一、基础命令视图（核心入口）</h2><p>所有配置操作均需在对应视图下执行，视图间切换是基础操作，需熟记<strong>进入命令</strong>与<strong>提示符标识</strong>。</p><table><thead><tr><th>视图类型</th><th>作用说明</th><th>进入命令</th><th>提示符格式</th><th>返回上级&#x2F;用户视图</th></tr></thead><tbody><tr><td>用户视图</td><td>查看设备基础信息（如版本、接口状态），无配置权限</td><td>设备启动后默认进入</td><td><code>&lt;设备名&gt;</code></td><td>-（默认视图）</td></tr><tr><td>系统视图</td><td>全局配置（如改设备名、启用协议），可进入其他子视图</td><td>用户视图下输入 <code>system-view</code> 或缩写 <code>sys</code></td><td><code>[设备名]</code></td><td><code>quit</code>（回用户视图用 <code>return</code> 或 <code>Ctrl+Z</code>）</td></tr><tr><td>接口视图</td><td>配置接口参数（IP、链路类型、协议）</td><td>系统视图下输入 <code>interface 接口名</code>（如 <code>int GigabitEthernet 0/0/1</code>）</td><td><code>[设备名-接口名]</code></td><td><code>quit</code></td></tr><tr><td>路由协议视图</td><td>配置动态路由（OSPF、IS-IS、BGP）参数</td><td>系统视图下输入协议名（如 <code>ospf 1</code>、<code>isis</code>）</td><td><code>[设备名-协议-进程号]</code></td><td><code>quit</code></td></tr><tr><td>VLAN视图</td><td>配置VLAN属性（名称、端口关联）</td><td>系统视图下输入 <code>vlan VLAN号</code>（如 <code>vlan 10</code>）</td><td><code>[设备名-vlanVLAN号]</code></td><td><code>quit</code></td></tr><tr><td>AAA视图</td><td>配置用户认证（Telnet&#x2F;SSH登录、权限）</td><td>系统视图下输入 <code>aaa</code></td><td><code>[设备名-aaa]</code></td><td><code>quit</code></td></tr></tbody></table><p><strong>示例</strong>：从用户视图进入GigabitEthernet 0&#x2F;0&#x2F;1接口视图  </p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><code class="hljs bash">&lt;Huawei&gt; sys  <span class="hljs-comment"># 进入系统视图</span><br>[Huawei] int GigabitEthernet 0/0/1  <span class="hljs-comment"># 进入接口视图</span><br>[Huawei-GigabitEthernet0/0/1]  <span class="hljs-comment"># 成功进入接口视图</span><br></code></pre></td></tr></table></figure><h2 id="二、基础操作命令（通用）"><a href="#二、基础操作命令（通用）" class="headerlink" title="二、基础操作命令（通用）"></a>二、基础操作命令（通用）</h2><p>适用于所有设备（路由器、交换机、防火墙），是配置前的必备操作，包括设备命名、配置保存、状态查看等。</p><h3 id="1-设备命名与重置"><a href="#1-设备命名与重置" class="headerlink" title="1. 设备命名与重置"></a>1. 设备命名与重置</h3><table><thead><tr><th>操作目的</th><th>命令</th><th>视图要求</th><th>说明</th></tr></thead><tbody><tr><td>修改设备名称</td><td><code>sysname 新设备名</code>（如 <code>sysname SW1</code>）</td><td>系统视图</td><td>便于拓扑识别，建议按设备角色命名（如SW&#x3D;交换机，AR&#x3D;路由器）</td></tr><tr><td>恢复默认设备名</td><td><code>undo sysname</code></td><td>系统视图</td><td>恢复为默认的“Huawei”</td></tr><tr><td>重置配置</td><td><code>reset saved-configuration</code></td><td>用户视图</td><td>清空保存的配置（需确认，用于重新配置）</td></tr><tr><td>重启设备</td><td><code>reboot</code></td><td>用户视图</td><td>重启后生效新配置（可选择是否保存当前配置）</td></tr></tbody></table><h3 id="2-配置保存与查看"><a href="#2-配置保存与查看" class="headerlink" title="2. 配置保存与查看"></a>2. 配置保存与查看</h3><table><thead><tr><th>操作目的</th><th>命令</th><th>视图要求</th><th>说明</th></tr></thead><tbody><tr><td>保存当前配置</td><td><code>save</code>（或 <code>save 文件名.cfg</code>）</td><td>用户视图</td><td>保存到设备闪存，避免重启丢失；不指定文件名则用默认名称</td></tr><tr><td>查看当前运行配置</td><td><code>display current-configuration</code>（缩写 <code>display current</code>）</td><td>任意视图</td><td>查看设备当前生效的所有配置，排错核心命令</td></tr><tr><td>查看接口配置</td><td><code>display this</code></td><td>接口&#x2F;VLAN&#x2F;协议视图</td><td>仅查看当前视图下的配置（如接口IP、VLAN关联）</td></tr><tr><td>查看设备版本</td><td><code>display version</code>（缩写 <code>display ver</code>）</td><td>任意视图</td><td>查看VRP版本、设备型号、启动时间等</td></tr></tbody></table><h3 id="3-视图切换与信息控制"><a href="#3-视图切换与信息控制" class="headerlink" title="3. 视图切换与信息控制"></a>3. 视图切换与信息控制</h3><table><thead><tr><th>操作目的</th><th>命令</th><th>视图要求</th><th>说明</th></tr></thead><tbody><tr><td>返回上级视图</td><td><code>quit</code></td><td>非用户视图</td><td>逐级返回（如接口视图→系统视图→用户视图）</td></tr><tr><td>直接回用户视图</td><td><code>return</code> 或 <code>Ctrl+Z</code></td><td>非用户视图</td><td>跳过中间视图，快速返回</td></tr><tr><td>关闭终端泛洪信息</td><td><code>undo terminal monitor</code>（缩写 <code>undo ter mon</code>）</td><td>用户视图</td><td>避免日志信息刷屏（如STP状态变化、邻居建立）</td></tr><tr><td>查看命令帮助</td><td><code>命令 + ?</code>（如 <code>int ?</code>、<code>port ?</code>）</td><td>任意视图</td><td>查看命令后可接的参数，新手必备</td></tr></tbody></table><h2 id="三、接口基础配置（路由器-交换机）"><a href="#三、接口基础配置（路由器-交换机）" class="headerlink" title="三、接口基础配置（路由器&#x2F;交换机）"></a>三、接口基础配置（路由器&#x2F;交换机）</h2><p>接口是设备与网络连接的核心，需配置IP地址（三层接口）、状态（启用&#x2F;禁用）等参数。</p><h3 id="1-接口启用与IP配置"><a href="#1-接口启用与IP配置" class="headerlink" title="1. 接口启用与IP配置"></a>1. 接口启用与IP配置</h3><table><thead><tr><th>操作目的</th><th>命令</th><th>视图要求</th><th>说明</th></tr></thead><tbody><tr><td>启用接口</td><td><code>undo shutdown</code>（缩写 <code>undo shut</code>）</td><td>接口视图</td><td>接口默认可能关闭，需手动启用</td></tr><tr><td>禁用接口</td><td><code>shutdown</code>（缩写 <code>shut</code>）</td><td>接口视图</td><td>用于故障隔离或接口维护</td></tr><tr><td>配置IP与子网掩码</td><td><code>ip address IP地址 子网掩码</code>（如 <code>ip add 192.168.1.1 255.255.255.0</code>）</td><td>三层接口视图（如路由器ETH口、交换机Vlanif口）</td><td>仅三层接口支持（二层接口如交换机ETH口不支持直接配IP）</td></tr><tr><td>删除接口IP</td><td><code>undo ip address IP地址 子网掩码</code></td><td>三层接口视图</td><td>需指定要删除的IP，避免误删其他IP</td></tr></tbody></table><p><strong>示例1：路由器接口配置IP</strong>  </p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><code class="hljs bash">&lt;AR1&gt; sys<br>[AR1] int Ethernet 0/0/1  <span class="hljs-comment"># 进入路由器以太网接口</span><br>[AR1-Ethernet0/0/1] ip add 192.168.1.1 255.255.255.0  <span class="hljs-comment"># 配置IP</span><br>[AR1-Ethernet0/0/1] undo shut  <span class="hljs-comment"># 启用接口</span><br>[AR1-Ethernet0/0/1] display this  <span class="hljs-comment"># 验证配置</span><br><span class="hljs-comment"># 显示结果包含“ip address 192.168.1.1 255.255.255.0”和“undo shutdown”即为成功</span><br></code></pre></td></tr></table></figure><p><strong>示例2：交换机管理IP配置（通过Vlanif）</strong><br>交换机ETH口默认是二层接口，需通过Vlanif（三层逻辑接口）配置管理IP：  </p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><code class="hljs bash">&lt;SW1&gt; sys<br>[SW1] vlan 1  <span class="hljs-comment"># 进入默认VLAN 1（或自定义VLAN）</span><br>[SW1-vlan1] quit<br>[SW1] int Vlanif 1  <span class="hljs-comment"># 进入Vlanif 1接口（三层接口）</span><br>[SW1-Vlanif1] ip add 192.168.0.1 255.255.255.0  <span class="hljs-comment"># 配置管理IP</span><br>[SW1-Vlanif1] undo shut  <span class="hljs-comment"># 启用Vlanif接口</span><br></code></pre></td></tr></table></figure><h3 id="2-接口状态查看"><a href="#2-接口状态查看" class="headerlink" title="2. 接口状态查看"></a>2. 接口状态查看</h3><table><thead><tr><th>操作目的</th><th>命令</th><th>视图要求</th><th>关键查看点</th></tr></thead><tbody><tr><td>查看单个接口状态</td><td><code>display interface 接口名</code>（如 <code>display int GigabitEthernet 0/0/1</code>）</td><td>任意视图</td><td>接口物理状态（Up&#x2F;Down）、协议状态（Up&#x2F;Down）、IP地址</td></tr><tr><td>查看所有接口概要</td><td><code>display interface brief</code>（缩写 <code>display int brief</code>）</td><td>任意视图</td><td>批量查看所有接口的物理&#x2F;协议状态，快速定位故障接口</td></tr></tbody></table><p><strong>关键状态解读</strong>：  </p><ul><li>物理Up+协议Up：接口正常（配置正确且链路连通）  </li><li>物理Down+协议Down：链路故障（如网线未插、对端接口禁用）  </li><li>物理Up+协议Down：配置故障（如IP地址冲突、协议不匹配）</li></ul><h2 id="四、交换机核心配置（二层技术）"><a href="#四、交换机核心配置（二层技术）" class="headerlink" title="四、交换机核心配置（二层技术）"></a>四、交换机核心配置（二层技术）</h2><p>交换机的核心功能是VLAN划分与端口模式管理，用于隔离广播域和实现跨交换机VLAN通信。</p><h3 id="1-VLAN配置（创建-删除-命名）"><a href="#1-VLAN配置（创建-删除-命名）" class="headerlink" title="1. VLAN配置（创建&#x2F;删除&#x2F;命名）"></a>1. VLAN配置（创建&#x2F;删除&#x2F;命名）</h3><p>VLAN用于隔离二层广播域，需先创建VLAN，再将端口关联到VLAN。</p><table><thead><tr><th>操作目的</th><th>命令</th><th>视图要求</th><th>说明</th></tr></thead><tbody><tr><td>创建单个VLAN</td><td><code>vlan VLAN号</code>（如 <code>vlan 10</code>）</td><td>系统视图</td><td>若VLAN不存在则创建，存在则进入VLAN视图</td></tr><tr><td>创建连续VLAN</td><td><code>vlan batch VLAN号1 to VLAN号2</code>（如 <code>vlan batch 10 to 20</code>）</td><td>系统视图</td><td>批量创建11个VLAN（10~20），高效便捷</td></tr><tr><td>创建不连续VLAN</td><td><code>vlan batch VLAN号1 VLAN号2 ...</code>（如 <code>vlan batch 10 20 30</code>）</td><td>系统视图</td><td>适用于非连续的VLAN需求</td></tr><tr><td>给VLAN命名</td><td><code>name VLAN名称</code>（如 <code>name PC-Office</code>）</td><td>VLAN视图</td><td>便于识别VLAN用途（如“服务器区”“办公区”）</td></tr><tr><td>删除单个VLAN</td><td><code>undo vlan VLAN号</code>（如 <code>undo vlan 10</code>）</td><td>系统视图</td><td>需确保VLAN无端口关联，否则需先移除端口</td></tr><tr><td>删除批量VLAN</td><td><code>undo vlan batch 10 to 20</code></td><td>系统视图</td><td>批量删除连续VLAN</td></tr><tr><td>查看VLAN配置</td><td><code>display vlan VLAN号</code>（或 <code>display vlan brief</code>）</td><td>任意视图</td><td>查看VLAN关联的端口、VLAN名称等</td></tr></tbody></table><p><strong>示例：创建VLAN 10~20并命名VLAN 10</strong>  </p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><code class="hljs bash">&lt;SW1&gt; sys<br>[SW1] vlan batch 10 to 20  <span class="hljs-comment"># 批量创建VLAN 10~20</span><br>[SW1] vlan 10  <span class="hljs-comment"># 进入VLAN 10视图</span><br>[SW1-vlan10] name Office-1  <span class="hljs-comment"># 命名为“办公区1”</span><br>[SW1-vlan10] quit<br>[SW1] display vlan brief  <span class="hljs-comment"># 验证VLAN创建结果</span><br></code></pre></td></tr></table></figure><h3 id="2-端口模式配置（Access-Trunk-Hybrid）"><a href="#2-端口模式配置（Access-Trunk-Hybrid）" class="headerlink" title="2. 端口模式配置（Access&#x2F;Trunk&#x2F;Hybrid）"></a>2. 端口模式配置（Access&#x2F;Trunk&#x2F;Hybrid）</h3><p>交换机端口分三种模式，需根据连接对象（PC、交换机、服务器）选择对应模式。</p><h4 id="（1）Access模式（连接PC-服务器）"><a href="#（1）Access模式（连接PC-服务器）" class="headerlink" title="（1）Access模式（连接PC&#x2F;服务器）"></a>（1）Access模式（连接PC&#x2F;服务器）</h4><p>仅允许单个VLAN通过，用于连接终端设备（如PC、打印机）。  </p><table><thead><tr><th>操作目的</th><th>命令</th><th>视图要求</th><th>示例</th></tr></thead><tbody><tr><td>设置Access模式</td><td><code>port link-type access</code></td><td>接口视图</td><td>进入G0&#x2F;0&#x2F;1接口：<code>int G0/0/1</code> → <code>port link-type access</code></td></tr><tr><td>关联VLAN</td><td><code>port default vlan VLAN号</code>（如 <code>port default vlan 10</code>）</td><td>接口视图</td><td>将接口加入指定VLAN，仅允许该VLAN通过</td></tr><tr><td>取消VLAN关联</td><td><code>undo port default vlan</code></td><td>接口视图</td><td>恢复接口默认VLAN（VLAN 1）</td></tr></tbody></table><h4 id="（2）Trunk模式（连接交换机）"><a href="#（2）Trunk模式（连接交换机）" class="headerlink" title="（2）Trunk模式（连接交换机）"></a>（2）Trunk模式（连接交换机）</h4><p>允许多个VLAN通过，用于交换机之间的互联，仅默认VLAN（PVID）不打标签。  </p><table><thead><tr><th>操作目的</th><th>命令</th><th>视图要求</th><th>示例</th></tr></thead><tbody><tr><td>设置Trunk模式</td><td><code>port link-type trunk</code></td><td>接口视图</td><td>进入G0&#x2F;0&#x2F;24接口：<code>int G0/0/24</code> → <code>port link-type trunk</code></td></tr><tr><td>允许指定VLAN通过</td><td><code>port trunk allow-pass vlan VLAN号1 VLAN号2</code>（如 <code>port trunk allow-pass vlan 10 20</code>）</td><td>接口视图</td><td>仅允许VLAN 10、20通过，增强安全性</td></tr><tr><td>允许所有VLAN通过</td><td><code>port trunk allow-pass vlan all</code></td><td>接口视图</td><td>适用于信任的交换机互联（如同一机房内）</td></tr><tr><td>设置PVID</td><td><code>port trunk pvid vlan VLAN号</code>（如 <code>port trunk pvid vlan 1</code>）</td><td>接口视图</td><td>默认PVID为1，收到无标签帧时归入该VLAN</td></tr><tr><td>禁止某VLAN通过</td><td><code>undo port trunk allow-pass vlan VLAN号</code></td><td>接口视图</td><td>从允许列表中移除指定VLAN</td></tr></tbody></table><h4 id="（3）Hybrid模式（灵活场景）"><a href="#（3）Hybrid模式（灵活场景）" class="headerlink" title="（3）Hybrid模式（灵活场景）"></a>（3）Hybrid模式（灵活场景）</h4><p>可同时连接终端和交换机，支持部分VLAN打标签、部分不打标签，适用于复杂场景（如连接IP电话+PC）。  </p><table><thead><tr><th>操作目的</th><th>命令</th><th>视图要求</th><th>示例（连接IP电话+PC）</th></tr></thead><tbody><tr><td>设置Hybrid模式</td><td><code>port link-type hybrid</code></td><td>接口视图</td><td>进入G0&#x2F;0&#x2F;1接口：<code>int G0/0/1</code> → <code>port link-type hybrid</code></td></tr><tr><td>配置VLAN不打标签</td><td><code>port hybrid untagged vlan VLAN号</code>（如 <code>port hybrid untagged vlan 10</code>）</td><td>接口视图</td><td>PC所属VLAN 10不打标签，终端可识别</td></tr><tr><td>配置VLAN打标签</td><td><code>port hybrid tagged vlan VLAN号</code>（如 <code>port hybrid tagged vlan 20</code>）</td><td>接口视图</td><td>IP电话所属VLAN 20打标签，交换机间传递</td></tr><tr><td>设置PVID</td><td><code>port hybrid pvid vlan VLAN号</code>（如 <code>port hybrid pvid vlan 10</code>）</td><td>接口视图</td><td>无标签帧默认归入PC的VLAN 10</td></tr></tbody></table><h4 id="（4）端口模式验证"><a href="#（4）端口模式验证" class="headerlink" title="（4）端口模式验证"></a>（4）端口模式验证</h4><table><thead><tr><th>操作目的</th><th>命令</th><th>视图要求</th><th>说明</th></tr></thead><tbody><tr><td>查看端口模式与VLAN</td><td><code>display port vlan 接口名</code>（如 <code>display port vlan G0/0/1</code>）</td><td>任意视图</td><td>显示端口模式、PVID、允许通过的VLAN（ tagged&#x2F;untagged）</td></tr><tr><td>查看端口详细配置</td><td><code>display interface 接口名</code></td><td>任意视图</td><td>包含端口模式、VLAN关联、流量统计等</td></tr></tbody></table><p><strong>示例：交换机互联Trunk配置</strong><br>SW1与SW2通过G0&#x2F;0&#x2F;24互联，允许VLAN 10~20通过：  </p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-comment"># SW1配置</span><br>&lt;SW1&gt; sys<br>[SW1] int G0/0/24<br>[SW1-GigabitEthernet0/0/24] port link-type trunk<br>[SW1-GigabitEthernet0/0/24] port trunk allow-pass vlan 10 to 20<br>[SW1-GigabitEthernet0/0/24] quit<br><br><span class="hljs-comment"># SW2配置（与SW1一致）</span><br>&lt;SW2&gt; sys<br>[SW2] int G0/0/24<br>[SW2-GigabitEthernet0/0/24] port link-type trunk<br>[SW2-GigabitEthernet0/0/24] port trunk allow-pass vlan 10 to 20<br></code></pre></td></tr></table></figure><h2 id="五、交换机高级特性（QinQ-VCMP-GVRP）"><a href="#五、交换机高级特性（QinQ-VCMP-GVRP）" class="headerlink" title="五、交换机高级特性（QinQ&#x2F;VCMP&#x2F;GVRP）"></a>五、交换机高级特性（QinQ&#x2F;VCMP&#x2F;GVRP）</h2><p>适用于复杂园区网，解决VLAN资源不足、批量管理VLAN等问题。</p><h3 id="1-QinQ技术（扩展VLAN）"><a href="#1-QinQ技术（扩展VLAN）" class="headerlink" title="1. QinQ技术（扩展VLAN）"></a>1. QinQ技术（扩展VLAN）</h3><p>在公网中为用户VLAN再封装一层公网VLAN标签，解决公网VLAN ID不足问题（如运营商给企业分配VLAN）。  </p><table><thead><tr><th>操作目的</th><th>命令</th><th>视图要求</th><th>示例</th></tr></thead><tbody><tr><td>设置QinQ端口</td><td><code>port link-type dot1q-tunnel</code></td><td>接口视图</td><td>进入运营商交换机下联企业的接口：<code>int G0/0/1</code> → <code>port link-type dot1q-tunnel</code></td></tr><tr><td>配置公网VLAN</td><td><code>port default vlan 公网VLAN号</code>（如 <code>port default vlan 100</code>）</td><td>接口视图</td><td>企业VLAN帧将被封装在公网VLAN 100中</td></tr><tr><td>验证QinQ</td><td><code>display interface 接口名 dot1q-tunnel</code></td><td>任意视图</td><td>查看QinQ端口状态、公网VLAN等</td></tr></tbody></table><h3 id="2-VCMP协议（VLAN集中管理）"><a href="#2-VCMP协议（VLAN集中管理）" class="headerlink" title="2. VCMP协议（VLAN集中管理）"></a>2. VCMP协议（VLAN集中管理）</h3><p>在多交换机网络中，仅需在<strong>VCMP服务器</strong>上配置VLAN，其他<strong>客户端交换机</strong>自动同步VLAN，减少重复操作。  </p><table><thead><tr><th>操作目的</th><th>命令</th><th>视图要求</th><th>说明</th></tr></thead><tbody><tr><td>配置VCMP角色</td><td><code>vcmp role server/client/silent/transparent</code></td><td>系统视图</td><td>- Server：管理VLAN，同步配置给Client<br>- Client：接收Server的VLAN配置<br>- Silent：不发送&#x2F;接收VCMP报文<br>- Transparent：转发VCMP报文（跨设备）</td></tr><tr><td>配置VCMP域名</td><td><code>vcmp domain 域名</code>（如 <code>vcmp domain Office-Net</code>）</td><td>系统视图</td><td>同一VCMP域的所有设备必须用相同域名</td></tr><tr><td>配置VCMP认证</td><td><code>vcmp authentication sha2-256 password 密码</code>（如 <code>vcmp authentication sha2-256 password 123456</code>）</td><td>系统视图</td><td>可选，增强安全性，Server与Client密码需一致</td></tr><tr><td>启用接口VCMP</td><td><code>undo vcmp disable</code></td><td>接口视图</td><td>交换机接口默认启用VCMP，无需手动操作（故障时可重新启用）</td></tr><tr><td>验证VCMP状态</td><td><code>display vcmp status</code></td><td>任意视图</td><td>查看VCMP角色、域名、同步状态</td></tr></tbody></table><h3 id="3-GVRP协议（动态VLAN注册）"><a href="#3-GVRP协议（动态VLAN注册）" class="headerlink" title="3. GVRP协议（动态VLAN注册）"></a>3. GVRP协议（动态VLAN注册）</h3><p>通过GVRP自动注册&#x2F;注销VLAN，无需手动在每台交换机创建VLAN（静态VLAN需手动创建，动态VLAN由GVRP生成）。  </p><table><thead><tr><th>操作目的</th><th>命令</th><th>视图要求</th><th>示例</th></tr></thead><tbody><tr><td>配置VCMP角色为Silent</td><td><code>vcmp role silent</code></td><td>系统视图</td><td>GVRP与VCMP冲突，必须先将VCMP设为Silent或Transparent</td></tr><tr><td>全局启用GVRP</td><td><code>gvrp</code></td><td>系统视图</td><td>开启交换机的GVRP功能</td></tr><tr><td>接口启用GVRP</td><td><code>gvrp</code></td><td>接口视图（Trunk模式）</td><td>进入Trunk接口：<code>int G0/0/24</code> → <code>gvrp</code></td></tr><tr><td>配置GVRP注册模式</td><td><code>gvrp registration normal</code></td><td>接口视图</td><td>Normal模式：允许动态注册&#x2F;注销VLAN（默认）</td></tr><tr><td>验证GVRP统计</td><td><code>display gvrp statistics 接口名</code></td><td>任意视图</td><td>查看接口GVRP报文发送&#x2F;接收数量</td></tr></tbody></table><h2 id="六、生成树协议（STP-RSTP-MSTP）"><a href="#六、生成树协议（STP-RSTP-MSTP）" class="headerlink" title="六、生成树协议（STP&#x2F;RSTP&#x2F;MSTP）"></a>六、生成树协议（STP&#x2F;RSTP&#x2F;MSTP）</h2><p>防止二层网络环路，同时提供链路冗余（如交换机双上联），常用<strong>RSTP</strong>（快速生成树，收敛更快）。</p><table><thead><tr><th>操作目的</th><th>命令</th><th>视图要求</th><th>说明</th></tr></thead><tbody><tr><td>启用STP&#x2F;RSTP&#x2F;MSTP</td><td><code>stp mode stp/rstp/mstp</code>（如 <code>stp mode rstp</code>）</td><td>系统视图</td><td>默认是STP，建议用RSTP（收敛时间&lt;1秒）</td></tr><tr><td>全局启用STP</td><td><code>stp enable</code></td><td>系统视图</td><td>所有交换机需启用，否则环路无法避免</td></tr><tr><td>配置根桥</td><td><code>stp root primary</code></td><td>系统视图</td><td>优先级最高（实际优先级为0），成为根桥</td></tr><tr><td>配置备份根桥</td><td><code>stp root secondary</code></td><td>系统视图</td><td>优先级次高（实际优先级为4096），根桥故障时接替</td></tr><tr><td>修改端口优先级</td><td><code>stp port priority 优先级</code>（如 <code>stp port priority 16</code>）</td><td>接口视图</td><td>优先级范围0~240，步长16，值越小越优先成为指定端口</td></tr><tr><td>查看STP概要</td><td><code>display stp brief</code></td><td>任意视图</td><td>查看端口角色（根端口&#x2F;指定端口&#x2F;阻塞端口）、状态</td></tr><tr><td>查看STP详细</td><td><code>display stp instance 0</code></td><td>任意视图</td><td>查看根桥ID、端口优先级、收敛时间等</td></tr></tbody></table><h2 id="七、路由配置（静态路由-动态路由-VRRP）"><a href="#七、路由配置（静态路由-动态路由-VRRP）" class="headerlink" title="七、路由配置（静态路由&#x2F;动态路由&#x2F;VRRP）"></a>七、路由配置（静态路由&#x2F;动态路由&#x2F;VRRP）</h2><p>实现不同网段间的通信，包括静态路由（手动配置）、动态路由（协议自动学习）、VRRP（网关冗余）。</p><h3 id="1-静态路由与默认路由"><a href="#1-静态路由与默认路由" class="headerlink" title="1. 静态路由与默认路由"></a>1. 静态路由与默认路由</h3><p>静态路由适用于小型网络（网段少），需手动配置每条路由；默认路由是“万能路由”，无匹配路由时使用。</p><table><thead><tr><th>操作目的</th><th>命令</th><th>视图要求</th><th>示例</th></tr></thead><tbody><tr><td>配置静态路由</td><td><code>ip route-static 目标网段 子网掩码 下一跳IP</code>（如 <code>ip route-static 192.168.2.0 255.255.255.0 192.168.1.2</code>）</td><td>系统视图</td><td>目标网段：要访问的网段<br>下一跳：到达目标网段的邻居设备IP</td></tr><tr><td>配置默认路由</td><td><code>ip route-static 0.0.0.0 0.0.0.0 下一跳IP</code>（如 <code>ip route-static 0.0.0.0 0.0.0.0 100.1.1.1</code>）</td><td>系统视图</td><td>适用于出口路由器（如连接外网的路由器）</td></tr><tr><td>删除静态路由</td><td><code>undo ip route-static 目标网段 子网掩码 下一跳IP</code></td><td>系统视图</td><td>需完整指定原路由参数，避免误删</td></tr><tr><td>查看路由表</td><td><code>display ip routing-table</code>（缩写 <code>display ip route</code>）</td><td>任意视图</td><td>查看所有路由（静态路由标识为“S”，默认路由标识为“S*”）</td></tr></tbody></table><p><strong>示例：路由器静态路由配置</strong><br>AR1（192.168.1.1）需访问AR2后的192.168.2.0网段，下一跳为AR2的192.168.1.2：  </p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><code class="hljs bash">&lt;AR1&gt; sys<br>[AR1] ip route-static 192.168.2.0 255.255.255.0 192.168.1.2<br>[AR1] display ip route  <span class="hljs-comment"># 验证路由是否存在（显示“S 192.168.2.0/24 [1/0] via 192.168.1.2”）</span><br></code></pre></td></tr></table></figure><h3 id="2-动态路由（OSPF基础）"><a href="#2-动态路由（OSPF基础）" class="headerlink" title="2. 动态路由（OSPF基础）"></a>2. 动态路由（OSPF基础）</h3><p>OSPF（开放式最短路径优先）适用于中大型网络，自动学习路由，无需手动配置。  </p><table><thead><tr><th>操作目的</th><th>命令</th><th>视图要求</th><th>示例（AR1配置）</th></tr></thead><tbody><tr><td>进入OSPF进程</td><td><code>ospf 进程号 router-id 路由器ID</code>（如 <code>ospf 1 router-id 1.1.1.1</code>）</td><td>系统视图</td><td>进程号范围1~65535，路由器ID需唯一（建议用Loopback口IP）</td></tr><tr><td>进入OSPF区域</td><td><code>area 区域号</code>（如 <code>area 0</code>）</td><td>OSPF进程视图</td><td>区域0为骨干区域，其他区域需连接骨干区域</td></tr><tr><td>宣告网段</td><td><code>network 网段 反掩码</code>（如 <code>network 192.168.1.0 0.0.0.255</code>）</td><td>OSPF区域视图</td><td>反掩码&#x3D;255.255.255.255-子网掩码（如子网掩码255.255.255.0对应反掩码0.0.0.255）</td></tr><tr><td>查看OSPF邻居</td><td><code>display ospf peer</code></td><td>任意视图</td><td>查看邻居是否建立（状态为“Full”表示正常）</td></tr><tr><td>查看OSPF路由</td><td><code>display ospf routing</code></td><td>任意视图</td><td>查看OSPF学习到的路由（标识为“O”）</td></tr></tbody></table><h3 id="3-VRRP（虚拟网关冗余）"><a href="#3-VRRP（虚拟网关冗余）" class="headerlink" title="3. VRRP（虚拟网关冗余）"></a>3. VRRP（虚拟网关冗余）</h3><p>解决单点故障：多台路由器&#x2F;三层交换机组成VRRP组，对外提供一个虚拟网关IP，主设备故障时备设备自动接替。</p><table><thead><tr><th>操作目的</th><th>命令</th><th>视图要求</th><th>示例（主设备配置）</th></tr></thead><tbody><tr><td>配置虚拟网关IP</td><td><code>vrrp vrid 组号 virtual-ip 虚拟IP</code>（如 <code>vrrp vrid 1 virtual-ip 192.168.1.254</code>）</td><td>三层接口视图</td><td>组号范围1~255，虚拟IP需与接口网段同段</td></tr><tr><td>配置设备优先级</td><td><code>vrrp vrid 组号 priority 优先级</code>（如 <code>vrrp vrid 1 priority 120</code>）</td><td>三层接口视图</td><td>优先级范围0~255，值越大越优先成为主设备（默认100）</td></tr><tr><td>启用抢占模式</td><td><code>vrrp vrid 组号 preempt-mode enable</code></td><td>三层接口视图</td><td>主设备恢复后自动抢占（默认启用，故障时可关闭）</td></tr><tr><td>配置VRRP认证</td><td><code>vrrp vrid 组号 authentication-mode simple cipher 密码</code>（如 <code>vrrp vrid 1 authentication-mode simple cipher 123</code>）</td><td>三层接口视图</td><td>可选，避免非法设备加入VRRP组</td></tr><tr><td>查看VRRP状态</td><td><code>display vrrp interface 接口名</code></td><td>任意视图</td><td>查看主&#x2F;备状态、优先级、虚拟IP等</td></tr></tbody></table><h2 id="八、DHCP配置（动态分配IP）"><a href="#八、DHCP配置（动态分配IP）" class="headerlink" title="八、DHCP配置（动态分配IP）"></a>八、DHCP配置（动态分配IP）</h2><p>DHCP自动为PC分配IP、子网掩码、网关、DNS，避免手动配置错误，支持<strong>接口模式</strong>（小型网络）和<strong>全局模式</strong>（中大型网络）。</p><h3 id="1-接口模式DHCP（适用于单网段）"><a href="#1-接口模式DHCP（适用于单网段）" class="headerlink" title="1. 接口模式DHCP（适用于单网段）"></a>1. 接口模式DHCP（适用于单网段）</h3><p>直接在三层接口上配置DHCP，IP地址池从接口网段中分配。  </p><table><thead><tr><th>操作目的</th><th>命令</th><th>视图要求</th><th>示例（Vlanif 10接口）</th></tr></thead><tbody><tr><td>全局启用DHCP</td><td><code>dhcp enable</code></td><td>系统视图</td><td>所有DHCP配置的前提，必须先启用</td></tr><tr><td>接口启用DHCP</td><td><code>dhcp select interface</code></td><td>三层接口视图</td><td>进入Vlanif 10：<code>int Vlanif 10</code> → <code>dhcp select interface</code></td></tr><tr><td>排除不分配IP</td><td><code>dhcp server excluded-ip-address 起始IP 结束IP</code>（如 <code>dhcp server excluded-ip-address 192.168.10.1 192.168.10.10</code>）</td><td>三层接口视图</td><td>排除网关、服务器等固定IP，避免冲突</td></tr><tr><td>设置租约时间</td><td><code>dhcp server lease day 天 hour 时 minute 分</code>（如 <code>dhcp server lease day 3 hour 0 minute 0</code>）</td><td>三层接口视图</td><td>默认为1天，可根据需求调整（如办公网设3天）</td></tr><tr><td>设置DNS服务器</td><td><code>dhcp server dns-list 主DNS 备DNS</code>（如 <code>dhcp server dns-list 8.8.8.8 114.114.114.114</code>）</td><td>三层接口视图</td><td>为PC分配DNS，确保能解析域名</td></tr></tbody></table><h3 id="2-全局模式DHCP（适用于多网段）"><a href="#2-全局模式DHCP（适用于多网段）" class="headerlink" title="2. 全局模式DHCP（适用于多网段）"></a>2. 全局模式DHCP（适用于多网段）</h3><p>创建全局IP地址池，多个接口可关联同一地址池，灵活管理多网段。  </p><table><thead><tr><th>操作目的</th><th>命令</th><th>视图要求</th><th>示例（创建“VLAN10-Pool”地址池）</th></tr></thead><tbody><tr><td>全局启用DHCP</td><td><code>dhcp enable</code></td><td>系统视图</td><td>同上</td></tr><tr><td>创建全局地址池</td><td><code>ip pool 地址池名</code>（如 <code>ip pool VLAN10-Pool</code>）</td><td>系统视图</td><td>进入地址池视图</td></tr><tr><td>配置地址池网段</td><td><code>network 网段 mask 子网掩码</code>（如 <code>network 192.168.10.0 mask 255.255.255.0</code>）</td><td>地址池视图</td><td>指定地址池的IP范围</td></tr><tr><td>配置网关</td><td><code>gateway-list 网关IP</code>（如 <code>gateway-list 192.168.10.254</code>）</td><td>地址池视图</td><td>为PC分配网关</td></tr><tr><td>排除不分配IP</td><td><code>excluded-ip-address 起始IP 结束IP</code></td><td>地址池视图</td><td>同上，排除固定IP</td></tr><tr><td>设置DNS</td><td><code>dns-list 主DNS 备DNS</code></td><td>地址池视图</td><td>同上，分配DNS</td></tr><tr><td>设置租约时间</td><td><code>lease day 天 hour 时 minute 分</code></td><td>地址池视图</td><td>同上，调整租约</td></tr><tr><td>接口关联地址池</td><td><code>dhcp select global</code></td><td>三层接口视图</td><td>进入Vlanif 10：<code>int Vlanif 10</code> → <code>dhcp select global</code></td></tr><tr><td>查看DHCP租约</td><td><code>display dhcp server lease all</code></td><td>任意视图</td><td>查看已分配的IP、租约时间、客户端MAC等</td></tr><tr><td>查看DHCP地址池分配的IP地址</td><td><code>display ip pool name manage-ap used</code></td><td>任意视图</td><td>查看已分配的IP地址</td></tr></tbody></table><h3 id="3-DHCP中继（跨网段DHCP）"><a href="#3-DHCP中继（跨网段DHCP）" class="headerlink" title="3. DHCP中继（跨网段DHCP）"></a>3. DHCP中继（跨网段DHCP）</h3><p>当DHCP服务器与PC不在同一网段时，需在三层设备（如交换机、路由器）上配置DHCP中继，转发DHCP报文。  </p><table><thead><tr><th>操作目的</th><th>命令</th><th>视图要求</th><th>示例（中继设备Vlanif 10接口）</th></tr></thead><tbody><tr><td>全局启用DHCP</td><td><code>dhcp enable</code></td><td>系统视图</td><td>同上</td></tr><tr><td>接口启用中继</td><td><code>dhcp select relay</code></td><td>三层接口视图</td><td>进入Vlanif 10：<code>int Vlanif 10</code> → <code>dhcp select relay</code></td></tr><tr><td>指定DHCP服务器</td><td><code>dhcp relay server-ip 服务器IP</code>（如 <code>dhcp relay server-ip 192.168.100.1</code>）</td><td>三层接口视图</td><td>指向DHCP服务器的IP地址</td></tr></tbody></table><h2 id="九、BFD配置（快速故障检测）"><a href="#九、BFD配置（快速故障检测）" class="headerlink" title="九、BFD配置（快速故障检测）"></a>九、BFD配置（快速故障检测）</h2><p>BFD（双向转发检测）快速检测链路或路由故障（检测时间毫秒级），常与静态路由、OSPF等联动，加速故障切换。</p><table><thead><tr><th>操作目的</th><th>命令</th><th>视图要求</th><th>示例（与静态路由联动）</th></tr></thead><tbody><tr><td>全局启用BFD</td><td><code>bfd</code></td><td>系统视图</td><td>进入BFD视图</td></tr><tr><td>创建BFD会话</td><td><code>bfd 会话名 bind peer-ip 邻居IP interface 接口名</code>（如 <code>bfd To-AR2 bind peer-ip 192.168.1.2 interface Ethernet 0/0/1</code>）</td><td>BFD视图</td><td>会话名自定义，绑定邻居IP和本地接口</td></tr><tr><td>配置本地标识符</td><td><code>discriminator local 标识号</code>（如 <code>discriminator local 10</code>）</td><td>BFD会话视图</td><td>本地标识号，需与邻居的远程标识号对应</td></tr><tr><td>配置远程标识符</td><td><code>discriminator remote 标识号</code>（如 <code>discriminator remote 20</code>）</td><td>BFD会话视图</td><td>邻居的本地标识号（需提前协商）</td></tr><tr><td>提交BFD配置</td><td><code>commit</code></td><td>BFD会话视图</td><td>使BFD会话生效</td></tr><tr><td>静态路由联动BFD</td><td><code>ip route-static 目标网段 子网掩码 下一跳 track bfd-session 会话名</code>（如 <code>ip route-static 192.168.2.0 255.255.255.0 192.168.1.2 track bfd-session To-AR2</code>）</td><td>系统视图</td><td>BFD检测到故障时，自动删除静态路由</td></tr><tr><td>查看BFD会话</td><td><code>display bfd session all</code></td><td>任意视图</td><td>查看会话状态（Up&#x2F;Down）、检测时间等</td></tr></tbody></table><h2 id="十、常用排错命令（故障定位）"><a href="#十、常用排错命令（故障定位）" class="headerlink" title="十、常用排错命令（故障定位）"></a>十、常用排错命令（故障定位）</h2><p>网络故障时，通过以下命令快速定位问题（如连通性、配置错误、接口故障）。</p><table><thead><tr><th>故障类型</th><th>推荐命令</th><th>视图要求</th><th>排错逻辑</th></tr></thead><tbody><tr><td>连通性故障</td><td><code>ping 目标IP</code>（如 <code>ping 192.168.1.1</code>）</td><td>用户视图</td><td>- 通：链路正常<br>- 不通：检查路由、接口、防火墙</td></tr><tr><td>路由故障</td><td><code>display ip routing-table 目标网段</code></td><td>任意视图</td><td>查看是否有到达目标网段的路由，路由类型是否正确</td></tr><tr><td>接口故障</td><td><code>display interface 接口名</code></td><td>任意视图</td><td>查看接口物理&#x2F;协议状态、错误计数（如CRC错误、丢包）</td></tr><tr><td>VLAN故障</td><td><code>display vlan brief</code>、<code>display port vlan 接口名</code></td><td>任意视图</td><td>查看端口是否加入正确VLAN，Trunk是否允许VLAN通过</td></tr><tr><td>OSPF故障</td><td><code>display ospf peer</code>、<code>display ospf routing</code></td><td>任意视图</td><td>查看邻居是否Full，是否学习到路由</td></tr><tr><td>DHCP故障</td><td><code>display dhcp server lease all</code>、<code>display dhcp server pool</code></td><td>任意视图</td><td>查看IP是否分配，地址池配置是否正确</td></tr><tr><td>STP故障</td><td><code>display stp brief</code>、<code>display stp instance 0</code></td><td>任意视图</td><td>查看端口是否阻塞，根桥是否正确</td></tr></tbody></table>]]>
    </content>
    <id>https://netguy6.github.io/2026/02/05/eNSP%E5%B8%B8%E7%94%A8%E5%91%BD%E4%BB%A4%E6%80%BB%E7%BB%93/</id>
    <link href="https://netguy6.github.io/2026/02/05/eNSP%E5%B8%B8%E7%94%A8%E5%91%BD%E4%BB%A4%E6%80%BB%E7%BB%93/"/>
    <published>2026-02-04T16:00:00.000Z</published>
    <summary>华为 eNSP 常用命令总结，覆盖基础视图、二层三层技术、路由与排错。</summary>
    <title>eNSP常用命令总结</title>
    <updated>2026-08-13T11:06:31.139Z</updated>
  </entry>
  <entry>
    <author>
      <name>net06</name>
    </author>
    <category term="华为ensp" scheme="https://netguy6.github.io/categories/%E5%8D%8E%E4%B8%BAensp/"/>
    <category term="双机热备" scheme="https://netguy6.github.io/tags/%E5%8F%8C%E6%9C%BA%E7%83%AD%E5%A4%87/"/>
    <category term="vrrp" scheme="https://netguy6.github.io/tags/vrrp/"/>
    <content>
      <![CDATA[<h3 id="第一部分：基础网络配置-AC1-AC2"><a href="#第一部分：基础网络配置-AC1-AC2" class="headerlink" title="第一部分：基础网络配置 (AC1 &amp; AC2)"></a>第一部分：基础网络配置 (AC1 &amp; AC2)</h3><p>这部分是为了让两台 AC 能够“连得通”网络和彼此。</p><table><thead><tr><th align="left">命令</th><th align="left">详细解释</th></tr></thead><tbody><tr><td align="left"><strong><code>vlan batch 2 199 200</code></strong></td><td align="left"><strong>创建 VLAN</strong>：一次性创建三个 VLAN。VLAN 2 用于管理 AP，VLAN 199 用于两台 AC 之间的心跳（数据同步），VLAN 200 用于连接外网。</td></tr><tr><td align="left"><strong><code>int g0/0/1</code></strong>  <strong><code>port link-type trunk</code></strong>  <strong><code>port trunk allow-pass vlan 2 199 200</code></strong></td><td align="left"><strong>配置互联接口</strong>：进入 GigabitEthernet 0&#x2F;0&#x2F;1 接口，将其设为 Trunk 模式，并允许 VLAN 2、199、200 的数据通过，连接到交换机。</td></tr><tr><td align="left"><strong><code>int vlanif2</code></strong>  <strong><code>ip add 192.168.2.252 24</code></strong>  <em>(AC2: 253)</em></td><td align="left"><strong>配置 AP 管理 IP</strong>：创建 VLANIF 逻辑接口并配置 IP。这是 AP 获取管理地址的网段。AC1 地址为 .252，AC2 地址为 .253。</td></tr><tr><td align="left"><strong><code>int vlanif199</code></strong>  <strong><code>ip add 192.168.199.254 24</code></strong>  <em>(AC2: 253)</em></td><td align="left"><strong>配置 HSB 心跳 IP</strong>：专门用于两台 AC 之间同步数据的链路。AC1 是 .254，AC2 是 .253。</td></tr><tr><td align="left"><strong><code>int vlanif200</code></strong>  <strong><code>ip add 192.168.200.252 24</code></strong>  <em>(AC2: 253)</em></td><td align="left"><strong>配置上行链路 IP</strong>：连接核心交换机或出口网关的接口，用于 AC 访问外网。</td></tr><tr><td align="left"><strong><code>ip route-static 0.0.0.0 0 192.168.200.1</code></strong></td><td align="left"><strong>配置默认路由</strong>：设置网关下一跳为 192.168.200.1，保证 AC 能够上网。</td></tr></tbody></table><hr><h3 id="第二部分：VRRP-网关冗余配置-AC1-AC2"><a href="#第二部分：VRRP-网关冗余配置-AC1-AC2" class="headerlink" title="第二部分：VRRP 网关冗余配置 (AC1 &amp; AC2)"></a>第二部分：VRRP 网关冗余配置 (AC1 &amp; AC2)</h3><p>这部分是为了让两台 AC 虚拟成一台设备，对外提供一个不变的“虚拟网关”。</p><table><thead><tr><th align="left">命令</th><th align="left">详细解释</th></tr></thead><tbody><tr><td align="left"><strong><code>int vlanif200</code></strong>  <strong><code>vrrp vrid 200 virtual-ip 192.168.200.254</code></strong></td><td align="left"><strong>创建 VRRP 组 (上行)</strong>：在上行接口创建 VRRP 备份组 200，虚拟 IP 设为 .254。用户或 AP 访问外网时，网关填这个地址。</td></tr><tr><td align="left"><strong><code>vrrp vrid 200 priority 150</code></strong>  <em>(AC1:150, AC2:120)</em></td><td align="left"><strong>设置优先级</strong>：决定谁是主谁是备。<strong>AC1 设为 150</strong>（高），将成为 Master；<strong>AC2 设为 120</strong>（低），将成为 Backup。</td></tr><tr><td align="left"><strong><code>admin-vrrp vrid 200</code></strong></td><td align="left"><strong>配置管理 VRRP</strong>：指定 VRRP 200 为“管理员”组。这意味着这台设备的角色（主&#x2F;备）由这个组的状态决定，防止角色混乱。</td></tr><tr><td align="left"><strong><code>int vlanif2</code></strong>  <strong><code>vrrp vrid 2 virtual-ip 192.168.2.254</code></strong></td><td align="left"><strong>创建 VRRP 组 (AP管理)</strong>：在 AP 管理网段也创建一个 VRRP 组，虚拟 IP 为 .254。这是 AP 的默认网关。</td></tr><tr><td align="left"><strong><code>vrrp vrid 2 priority 150</code></strong>  <em>(AC1:150, AC2:120)</em></td><td align="left"><strong>同步优先级</strong>：同样配置优先级，保持与上行链路一致，确保 AC1 同时是两个网段的主设备。</td></tr><tr><td align="left"><strong><code>vrrp vrid 2 track admin-vrrp int vlan 200 vrid 200 unflowdown</code></strong></td><td align="left"><strong>配置联动追踪</strong>：这是关键命令。意思是：Vlanif2 的 VRRP 状态要跟踪 Vlanif200 的状态。<strong>如果 AC1 的上行网线断了</strong>（Vlanif200 失效），AC1 会自动降低自己在 Vlanif2 的优先级，强制让 AC2 接管 AP 管理权，避免“有线断了但无线连不上”的死循环。</td></tr></tbody></table><hr><h3 id="第三部分：双机热备-HSB-配置"><a href="#第三部分：双机热备-HSB-配置" class="headerlink" title="第三部分：双机热备 (HSB) 配置"></a>第三部分：双机热备 (HSB) 配置</h3><p>这部分是为了让 AC2 实时备份 AC1 的数据（如 AP 上线信息、用户密码等），实现断网不掉线。</p><table><thead><tr><th align="left">命令</th><th align="left">详细解释</th></tr></thead><tbody><tr><td align="left"><strong><code>hsb-service 0</code></strong>  <strong><code>service-ip-port local-ip 192.168.199.254 peer-ip 192.168.199.253 ...</code></strong></td><td align="left"><strong>建立同步通道</strong>：创建 HSB 服务 0。配置本端 IP 和对端 IP（Peer IP）。AC1 的本端是 .254，对端填 AC2 的 .253；AC2 则相反。这是数据同步的管道。</td></tr><tr><td align="left"><strong><code>hsb-group 0</code></strong>  <strong><code>bind-service 0</code></strong></td><td align="left"><strong>绑定服务通道</strong>：创建 HSB 备份组 0，并将其与上面创建的“服务通道 0”绑定，打通数据通路。</td></tr><tr><td align="left"><strong><code>track vrrp vrid 200 int vlan 200</code></strong></td><td align="left"><strong>监控 VRRP 状态</strong>：HSB 备份组开始监控 VRRP 200 的状态。如果 VRRP 发生主备切换，HSB 也会跟着切换数据流向。</td></tr><tr><td align="left"><strong><code>hsb-service-type ap hsb-group 0</code></strong></td><td align="left"><strong>开启 AP 信息备份</strong>：告诉 AC，要把 AP 的上线状态、配置等信息通过 HSB 组 0 实时同步给对端。</td></tr><tr><td align="left"><strong><code>hsb-service-type dhcp hsb-group 0</code></strong></td><td align="left"><strong>开启 DHCP 信息备份</strong>：如果 AC 开启了 DHCP 服务，需要同步地址池的占用情况，防止备机分配出重复 IP。</td></tr><tr><td align="left"><strong><code>capwap source ip-address 192.168.200.254</code></strong></td><td align="left"><strong>固定隧道源地址</strong>：关键命令！配置 AC 与 AP 通信的源 IP 为 <strong>VRRP 虚拟 IP</strong> (.254)。这样无论主备怎么切换，AP 只认 .254 这个地址，不需要重新建立连接。</td></tr></tbody></table><hr><h3 id="第四部分：最后的收尾"><a href="#第四部分：最后的收尾" class="headerlink" title="第四部分：最后的收尾"></a>第四部分：最后的收尾</h3><table><thead><tr><th align="left">命令</th><th align="left">详细解释</th></tr></thead><tbody><tr><td align="left"><strong><code>hsb enable</code></strong></td><td align="left"><strong>启动热备功能</strong>：在 HSB 组视图下执行此命令，真正激活双机热备功能。执行后，两台 AC 会开始建立连接并同步数据。</td></tr><tr><td align="left"><strong><code>wlan</code></strong>  … <em>(AP和VAP配置)</em></td><td align="left"><strong>业务配置</strong>：这部分是 WLAN 的基础业务（如 SSID 名字、密码等）。<strong>注意</strong>：这些配置需要在两台 AC 上手动保持一致，或者通过 AC1 同步给 AC2，否则切换时业务会中断。</td></tr></tbody></table>]]>
    </content>
    <id>https://netguy6.github.io/2026/02/05/%E5%8F%8C%E6%9C%BA%E7%83%AD%E5%A4%87wlan/</id>
    <link href="https://netguy6.github.io/2026/02/05/%E5%8F%8C%E6%9C%BA%E7%83%AD%E5%A4%87wlan/"/>
    <published>2026-02-04T16:00:00.000Z</published>
    <summary>华为 WLAN 双机热备组网配置，记录 AC 心跳、VRRP 与业务切换要点。</summary>
    <title>双机热备wlan</title>
    <updated>2026-08-13T11:06:31.141Z</updated>
  </entry>
  <entry>
    <author>
      <name>net06</name>
    </author>
    <category term="linux" scheme="https://netguy6.github.io/categories/linux/"/>
    <category term="CentOS 7" scheme="https://netguy6.github.io/tags/CentOS-7/"/>
    <content>
      <![CDATA[<h1 id="云计算平台运维与应用"><a href="#云计算平台运维与应用" class="headerlink" title="云计算平台运维与应用"></a><strong>云计算平台运维与应用</strong></h1><h2 id="1-私有云平台运维"><a href="#1-私有云平台运维" class="headerlink" title="1.私有云平台运维"></a>1.私有云平台运维</h2><h3 id="（1）Keystone-组件运维"><a href="#（1）Keystone-组件运维" class="headerlink" title="（1）Keystone 组件运维"></a>（1）Keystone 组件运维</h3><ul><li>安装keystone服务组件；</li></ul><h4 id="脚本"><a href="#脚本" class="headerlink" title="脚本"></a>脚本</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-meta">#!/bin/bash</span><br><span class="hljs-comment">###############################################</span><br><span class="hljs-comment"># install keystone for Openstack on controller</span><br><span class="hljs-comment"># Author:Ann  Date:2022-1-5</span><br><span class="hljs-comment">###############################################</span><br><br><br>mysql -uroot -p000000 -e <span class="hljs-string">&quot;create database IF NOT EXISTS keystone ;&quot;</span><br>mysql -uroot -p000000 -e <span class="hljs-string">&quot;GRANT ALL PRIVILEGES ON keystone.* TO &#x27;keystone&#x27;@&#x27;localhost&#x27; IDENTIFIED BY &#x27;KEYSTONE_DBPASS&#x27;;&quot;</span><br>mysql -uroot -p000000 -e <span class="hljs-string">&quot;GRANT ALL PRIVILEGES ON keystone.* TO &#x27;keystone&#x27;@&#x27;%&#x27; IDENTIFIED BY &#x27;KEYSTONE_DBPASS&#x27;;&quot;</span><br><br><br>yum -y install openstack-keystone httpd mod_wsgi<br>yum -y install openstack-utils<br><br><span class="hljs-comment">#配置数据库连接</span><br>openstack-config --<span class="hljs-built_in">set</span> /etc/keystone/keystone.conf database connection  mysql+pymysql://keystone:KEYSTONE_DBPASS@controller/keystone<br><span class="hljs-comment">#使用fernet生产token</span><br>openstack-config --<span class="hljs-built_in">set</span> /etc/keystone/keystone.conf token provider  fernet<br><span class="hljs-comment">#同步数据库</span><br>su -s /bin/sh -c <span class="hljs-string">&quot;keystone-manage db_sync&quot;</span> keystone<br><span class="hljs-comment">#初始化fernet</span><br>keystone-manage fernet_setup --keystone-user keystone --keystone-group keystone<br>keystone-manage credential_setup --keystone-user keystone --keystone-group keystone<br><span class="hljs-comment">#注册keystone</span><br>keystone-manage bootstrap --bootstrap-password ADMIN_PASS \<br>--bootstrap-admin-url http://controller:5000/v3/ \<br>--bootstrap-internal-url http://controller:5000/v3/ \<br>--bootstrap-public-url http://controller:5000/v3/ \<br>--bootstrap-region-id RegionOne<br><br><span class="hljs-comment">#修改apache配置</span><br>sed -i <span class="hljs-string">&quot;s/#ServerName www.example.com:80/ServerName controller/g&quot;</span> /etc/httpd/conf/httpd.conf <br><span class="hljs-built_in">ln</span> -s /usr/share/keystone/wsgi-keystone.conf /etc/httpd/conf.d/<br>systemctl restart httpd<br>systemctl <span class="hljs-built_in">enable</span> httpd<br><br><span class="hljs-comment">#配置临时管理账户</span><br><span class="hljs-built_in">export</span> OS_USERNAME=admin<br><span class="hljs-built_in">export</span> OS_PASSWORD=ADMIN_PASS<br><span class="hljs-built_in">export</span> OS_PROJECT_NAME=admin<br><span class="hljs-built_in">export</span> OS_USER_DOMAIN_NAME=Default<br><span class="hljs-built_in">export</span> OS_PROJECT_DOMAIN_NAME=Default<br><span class="hljs-built_in">export</span> OS_AUTH_URL=http://controller:5000/v3<br><span class="hljs-built_in">export</span> OS_IDENTITY_API_VERSION=3<br><br><br><span class="hljs-comment">#创建域、项目、用户和角色</span><br>openstack domain create --description <span class="hljs-string">&quot;An Example Domain&quot;</span> example<br>openstack project create --domain default --description <span class="hljs-string">&quot;Service Project&quot;</span> service<br>openstack project create --domain default --description <span class="hljs-string">&quot;Demo Project&quot;</span> demo<br>openstack user create --domain default --password DEMO_PASS demo<br>openstack role create user<br>openstack role add --project demo --user demo user<br><br><br><span class="hljs-built_in">unset</span> OS_AUTH_URL OS_PASSWORD<br><br><span class="hljs-built_in">cat</span> &gt; ~/admin-openrc.sh &lt;&lt;-<span class="hljs-string">EOF</span><br><span class="hljs-string">export OS_PROJECT_DOMAIN_NAME=Default</span><br><span class="hljs-string">export OS_USER_DOMAIN_NAME=Default</span><br><span class="hljs-string">export OS_PROJECT_NAME=admin</span><br><span class="hljs-string">export OS_USERNAME=admin</span><br><span class="hljs-string">export OS_PASSWORD=ADMIN_PASS</span><br><span class="hljs-string">export OS_AUTH_URL=http://controller:5000/v3</span><br><span class="hljs-string">export OS_IDENTITY_API_VERSION=3</span><br><span class="hljs-string">export OS_IMAGE_API_VERSION=2</span><br><span class="hljs-string">EOF</span><br><br><span class="hljs-built_in">cat</span> &gt; ~/demo-openrc.sh &lt;&lt;-<span class="hljs-string">EOF</span><br><span class="hljs-string">export OS_PROJECT_DOMAIN_NAME=Default</span><br><span class="hljs-string">export OS_USER_DOMAIN_NAME=Default</span><br><span class="hljs-string">export OS_PROJECT_NAME=demo</span><br><span class="hljs-string">export OS_USERNAME=demo</span><br><span class="hljs-string">export OS_PASSWORD=DEMO_PASS</span><br><span class="hljs-string">export OS_AUTH_URL=http://controller:5000/v3</span><br><span class="hljs-string">export OS_IDENTITY_API_VERSION=3</span><br><span class="hljs-string">export OS_IMAGE_API_VERSION=2</span><br><span class="hljs-string">EOF</span><br><br><span class="hljs-built_in">echo</span> <span class="hljs-string">&quot;source ~/admin-openrc.sh&quot;</span> &gt;&gt; ~/.bashrc<br>bash<br></code></pre></td></tr></table></figure><h4 id="执行"><a href="#执行" class="headerlink" title="执行"></a>执行</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-comment">#执行脚本</span><br><span class="hljs-built_in">cd</span> <br> <span class="hljs-comment">#给可执行权限</span><br><span class="hljs-built_in">chmod</span> +x *.sh<br>./openstack-keystone-install.sh<br><br><span class="hljs-comment">#验证</span><br><span class="hljs-built_in">source</span> admin-openrc.sh<br>openstack token issue<br></code></pre></td></tr></table></figure><p><img src="https://i.ibb.co/6JV8SpYs/image-20251230134101386.png" alt="image-20251230134101386"></p><ul><li>创建一个名称为“bob”账户，密码为“mypassword123”，邮箱为“<a href="mailto:&#x62;&#111;&#x62;&#x40;&#x65;&#x78;&#97;&#109;&#x70;&#x6c;&#101;&#46;&#99;&#111;&#x6d;">bob@example.com</a>”；</li></ul><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-built_in">source</span> /etc/keystone/admin-openrc.sh<br><span class="hljs-comment"># 创建名为 &#x27;domain&#x27; 的域</span><br>openstack domain create domain<br><span class="hljs-comment">#创建用户</span><br>openstack user create --password mypassword123 --email bob@example.com --domain domain bob<br></code></pre></td></tr></table></figure><p><img src="https://i.ibb.co/mghhKjx/image-20260106105154677.png" alt="image-20260106105154677"></p><ul><li>创建一个名为“acme”项目；</li></ul><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">openstack project create --domain domain acme<br></code></pre></td></tr></table></figure><p><img src="https://i.ibb.co/Nd4hx1x0/image-20260106105415488.png" alt="image-20260106105415488"></p><ul><li>角色限定了用户的操作权限。例如，创建一个角色“compute-user”；</li></ul><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">openstack role create compute-user<br></code></pre></td></tr></table></figure><p><img src="https://i.ibb.co/MkHYqpgL/image-20260106105833198.png" alt="image-20260106105833198"></p><ul><li>添加的用户需要分配一定的权限，这就需要把用户关联绑定到对应的项目和角色，例如，给用户“bob”分配“acme”项目下的“compute-user”角色。</li></ul><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">openstack role add --user bob --project acme compute-user<br></code></pre></td></tr></table></figure><p><img src="https://i.ibb.co/bj3kLHYD/image-20260106110601001.png" alt="image-20260106110601001"></p><h3 id="（2）Glance-组件运维"><a href="#（2）Glance-组件运维" class="headerlink" title="（2）Glance 组件运维"></a>（2）Glance 组件运维</h3><ul><li>安装glance服务组件，</li></ul><h4 id="脚本-1"><a href="#脚本-1" class="headerlink" title="脚本"></a>脚本</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-meta">#!/bin/bash</span><br><span class="hljs-comment">###############################################</span><br><span class="hljs-comment"># install glance for Openstack on controller</span><br><span class="hljs-comment"># Author:Ann  Date:2022-1-5</span><br><span class="hljs-comment">###############################################</span><br><br><br><span class="hljs-built_in">source</span>  ~/admin-openrc.sh <br>mysql -uroot -p000000 -e <span class="hljs-string">&quot;create database IF NOT EXISTS glance;&quot;</span><br>mysql -uroot -p000000 -e <span class="hljs-string">&quot;GRANT ALL PRIVILEGES ON glance.* TO &#x27;glance&#x27;@&#x27;localhost&#x27; IDENTIFIED BY &#x27;GLANCE_DBPASS&#x27; ;&quot;</span><br>mysql -uroot -p000000 -e <span class="hljs-string">&quot;GRANT ALL PRIVILEGES ON glance.* TO &#x27;glance&#x27;@&#x27;%&#x27; IDENTIFIED BY &#x27;GLANCE_DBPASS&#x27; ;&quot;</span><br><br>openstack user create --domain default --password GLANCE_PASS glance<br>openstack role add --project service --user glance admin<br>openstack service create --name glance --description <span class="hljs-string">&quot;OpenStack Image&quot;</span> image<br><br>openstack endpoint create --region RegionOne image public http://controller:9292<br>openstack endpoint create --region RegionOne image internal http://controller:9292<br>openstack endpoint create --region RegionOne image admin http://controller:9292<br><br>yum install -y openstack-glance <br><br>openstack-config --<span class="hljs-built_in">set</span> /etc/glance/glance-api.conf database connection  mysql+pymysql://glance:GLANCE_DBPASS@controller/glance<br>openstack-config --<span class="hljs-built_in">set</span> /etc/glance/glance-api.conf keystone_authtoken auth_uri http://controller:5000<br>openstack-config --<span class="hljs-built_in">set</span> /etc/glance/glance-api.conf keystone_authtoken auth_url http://controller:5000<br>openstack-config --<span class="hljs-built_in">set</span> /etc/glance/glance-api.conf keystone_authtoken memcached_servers  controller:11211<br>openstack-config --<span class="hljs-built_in">set</span> /etc/glance/glance-api.conf keystone_authtoken auth_type password<br>openstack-config --<span class="hljs-built_in">set</span> /etc/glance/glance-api.conf keystone_authtoken project_domain_name default<br>openstack-config --<span class="hljs-built_in">set</span> /etc/glance/glance-api.conf keystone_authtoken user_domain_name default<br>openstack-config --<span class="hljs-built_in">set</span> /etc/glance/glance-api.conf keystone_authtoken project_name service<br>openstack-config --<span class="hljs-built_in">set</span> /etc/glance/glance-api.conf keystone_authtoken username glance<br>openstack-config --<span class="hljs-built_in">set</span> /etc/glance/glance-api.conf keystone_authtoken password GLANCE_PASS<br>openstack-config --<span class="hljs-built_in">set</span> /etc/glance/glance-api.conf paste_deploy flavor keystone<br>openstack-config --<span class="hljs-built_in">set</span> /etc/glance/glance-api.conf glance_store stores file,http<br>openstack-config --<span class="hljs-built_in">set</span> /etc/glance/glance-api.conf glance_store default_store file<br>openstack-config --<span class="hljs-built_in">set</span> /etc/glance/glance-api.conf glance_store filesystem_store_datadir /var/lib/glance/images/<br><br>openstack-config --<span class="hljs-built_in">set</span> /etc/glance/glance-registry.conf database connection  mysql+pymysql://glance:GLANCE_DBPASS@controller/glance<br>openstack-config --<span class="hljs-built_in">set</span> /etc/glance/glance-registry.conf keystone_authtoken auth_uri http://controller:5000<br>openstack-config --<span class="hljs-built_in">set</span> /etc/glance/glance-registry.conf keystone_authtoken auth_url http://controller:35357<br>openstack-config --<span class="hljs-built_in">set</span> /etc/glance/glance-registry.conf keystone_authtoken memcached_servers controller:11211<br>openstack-config --<span class="hljs-built_in">set</span> /etc/glance/glance-registry.conf keystone_authtoken auth_type password<br>openstack-config --<span class="hljs-built_in">set</span> /etc/glance/glance-registry.conf keystone_authtoken project_domain_name default<br>openstack-config --<span class="hljs-built_in">set</span> /etc/glance/glance-registry.conf keystone_authtoken user_domain_name default<br>openstack-config --<span class="hljs-built_in">set</span> /etc/glance/glance-registry.conf keystone_authtoken project_name service<br>openstack-config --<span class="hljs-built_in">set</span> /etc/glance/glance-registry.conf keystone_authtoken username glance<br>openstack-config --<span class="hljs-built_in">set</span> /etc/glance/glance-registry.conf keystone_authtoken password GLANCE_PASS<br>openstack-config --<span class="hljs-built_in">set</span> /etc/glance/glance-registry.conf paste_deploy flavor keystone<br><br><br>su -s /bin/sh -c <span class="hljs-string">&quot;glance-manage db_sync&quot;</span> glance<br><br>systemctl <span class="hljs-built_in">enable</span> openstack-glance-api.service openstack-glance-registry.service<br>systemctl restart openstack-glance-api.service openstack-glance-registry.service<br><br></code></pre></td></tr></table></figure><h4 id="执行-1"><a href="#执行-1" class="headerlink" title="执行"></a>执行</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-comment">#执行脚本</span><br><span class="hljs-built_in">cd</span> <br>./openstack-glance-install.sh<br><br><span class="hljs-comment">#验证glance</span><br>wget http://download.cirros-cloud.net/0.4.0/cirros-0.4.0-i386-disk.img<br></code></pre></td></tr></table></figure><p><img src="https://i.ibb.co/gZv79mMN/image-20251230135643267.png" alt="image-20251230135643267"></p><ul><li>创建一个名称为“cirros”镜像，镜像文件使用提供的为“cirros-0.3.4-x86_64-disk.img”，</li></ul><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-comment">#镜像上传到/root下</span><br>glance image-create --name <span class="hljs-string">&quot;cirros&quot;</span> --disk-format qcow2 --container-format bare --progress &lt; cirros-0.3.4-x86_64-disk.img<br></code></pre></td></tr></table></figure><p><img src="https://i.ibb.co/QxkmfPF/image-20260106111715047.png" alt="image-20260106111715047"></p><ul><li>查询镜像列表命令及结果，</li></ul><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">glance image-list<br></code></pre></td></tr></table></figure><p><img src="https://i.ibb.co/6k0qVms/image-20260106111751696.png" alt="image-20260106111751696"></p><ul><li>通过glanceimage-show命令查看镜像的详细信息，其中参数可以是镜像id或者镜像名称。</li></ul><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">glance image-show d376d9a2-9974-4e8d-869d-149af33b4bdd<br></code></pre></td></tr></table></figure><p><img src="https://i.ibb.co/prwYTxcs/image-20260106111851061.png" alt="image-20260106111851061"></p><h3 id="（3）nova组件运维"><a href="#（3）nova组件运维" class="headerlink" title="（3）nova组件运维"></a>（3）nova组件运维</h3><ul><li>安装nova服务组件；</li></ul><h5 id="脚本-2"><a href="#脚本-2" class="headerlink" title="脚本"></a>脚本</h5><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br><span class="line">87</span><br><span class="line">88</span><br><span class="line">89</span><br><span class="line">90</span><br><span class="line">91</span><br><span class="line">92</span><br><span class="line">93</span><br><span class="line">94</span><br><span class="line">95</span><br><span class="line">96</span><br><span class="line">97</span><br><span class="line">98</span><br><span class="line">99</span><br><span class="line">100</span><br><span class="line">101</span><br><span class="line">102</span><br><span class="line">103</span><br><span class="line">104</span><br><span class="line">105</span><br><span class="line">106</span><br><span class="line">107</span><br><span class="line">108</span><br><span class="line">109</span><br><span class="line">110</span><br><span class="line">111</span><br><span class="line">112</span><br><span class="line">113</span><br><span class="line">114</span><br><span class="line">115</span><br><span class="line">116</span><br><span class="line">117</span><br><span class="line">118</span><br><span class="line">119</span><br><span class="line">120</span><br><span class="line">121</span><br><span class="line">122</span><br><span class="line">123</span><br><span class="line">124</span><br><span class="line">125</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-meta">#!/bin/bash</span><br><span class="hljs-comment">###############################################</span><br><span class="hljs-comment"># install nova for Openstack on controller</span><br><span class="hljs-comment"># Author:Ann  Date:2022-1-5</span><br><span class="hljs-comment">###############################################</span><br><br><br><span class="hljs-built_in">source</span> ~/admin-openrc.sh<br><br>mysql -uroot -p000000 -e <span class="hljs-string">&quot;create database IF NOT EXISTS nova;&quot;</span><br>mysql -uroot -p000000 -e <span class="hljs-string">&quot;create database IF NOT EXISTS nova_api;&quot;</span><br>mysql -uroot -p000000 -e <span class="hljs-string">&quot;create database IF NOT EXISTS nova_cell0 ;&quot;</span><br><br>mysql -uroot -p000000 -e <span class="hljs-string">&quot; GRANT ALL PRIVILEGES ON nova_api.* TO &#x27;nova&#x27;@&#x27;localhost&#x27; IDENTIFIED BY &#x27;NOVA_DBPASS&#x27;;&quot;</span><br>mysql -uroot -p000000 -e <span class="hljs-string">&quot; GRANT ALL PRIVILEGES ON nova_api.* TO &#x27;nova&#x27;@&#x27;%&#x27; IDENTIFIED BY &#x27;NOVA_DBPASS&#x27;;&quot;</span><br>mysql -uroot -p000000 -e <span class="hljs-string">&quot; GRANT ALL PRIVILEGES ON nova.* TO &#x27;nova&#x27;@&#x27;localhost&#x27; IDENTIFIED BY &#x27;NOVA_DBPASS&#x27;;&quot;</span><br>mysql -uroot -p000000 -e <span class="hljs-string">&quot; GRANT ALL PRIVILEGES ON nova.* TO &#x27;nova&#x27;@&#x27;%&#x27; IDENTIFIED BY &#x27;NOVA_DBPASS&#x27;;&quot;</span><br>mysql -uroot -p000000 -e <span class="hljs-string">&quot; GRANT ALL PRIVILEGES ON nova_cell0.* TO &#x27;nova&#x27;@&#x27;localhost&#x27; IDENTIFIED BY &#x27;NOVA_DBPASS&#x27;;&quot;</span><br>mysql -uroot -p000000 -e <span class="hljs-string">&quot; GRANT ALL PRIVILEGES ON nova_cell0.* TO &#x27;nova&#x27;@&#x27;%&#x27; IDENTIFIED BY &#x27;NOVA_DBPASS&#x27;;&quot;</span><br><br><br>openstack user create --domain default --password NOVA_PASS nova<br>openstack role add --project service --user nova admin<br>openstack service create --name nova --description <span class="hljs-string">&quot;OpenStack Compute&quot;</span> compute<br>openstack endpoint create --region RegionOne compute public http://controller:8774/v2.1<br>openstack endpoint create --region RegionOne compute internal http://controller:8774/v2.1<br>openstack endpoint create --region RegionOne compute admin http://controller:8774/v2.1<br><br>openstack user create --domain default --password PLACEMENT_PASS placement<br>openstack role add --project service --user placement admin<br>openstack service create --name placement --description <span class="hljs-string">&quot;Placement API&quot;</span> placement<br>openstack endpoint create --region RegionOne placement public http://controller:8778<br>openstack endpoint create --region RegionOne placement internal http://controller:8778<br>openstack endpoint create --region RegionOne placement admin http://controller:8778<br><br>yum install -y openstack-nova-api openstack-nova-conductor openstack-nova-console openstack-nova-novncproxy openstack-nova-scheduler openstack-nova-placement-api<br><br>openstack-config --<span class="hljs-built_in">set</span> /etc/nova/nova.conf database connection mysql+pymysql://nova:NOVA_DBPASS@controller/nova <br>openstack-config --<span class="hljs-built_in">set</span> /etc/nova/nova.conf DEFAULT  transport_url  rabbit://openstack:RABBIT_PASS@controller<br>openstack-config --<span class="hljs-built_in">set</span> /etc/nova/nova.conf DEFAULT  enabled_apis osapi_compute,metadata<br>openstack-config --<span class="hljs-built_in">set</span> /etc/nova/nova.conf DEFAULT  my_ip  10.0.0.11<br>openstack-config --<span class="hljs-built_in">set</span> /etc/nova/nova.conf DEFAULT  use_neutron  True<br>openstack-config --<span class="hljs-built_in">set</span> /etc/nova/nova.conf DEFAULT  firewall_driver  nova.virt.firewall.NoopFirewallDriver<br>openstack-config --<span class="hljs-built_in">set</span> /etc/nova/nova.conf api auth_strategy keystone<br>openstack-config --<span class="hljs-built_in">set</span> /etc/nova/nova.conf api_database connection mysql+pymysql://nova:NOVA_DBPASS@controller/nova_api<br>openstack-config --<span class="hljs-built_in">set</span> /etc/nova/nova.conf keystone_authtoken auth_url http://controller:5000/v3<br>openstack-config --<span class="hljs-built_in">set</span> /etc/nova/nova.conf keystone_authtoken memcached_servers controller:11211<br>openstack-config --<span class="hljs-built_in">set</span> /etc/nova/nova.conf keystone_authtoken auth_type  password<br>openstack-config --<span class="hljs-built_in">set</span> /etc/nova/nova.conf keystone_authtoken project_domain_name default<br>openstack-config --<span class="hljs-built_in">set</span> /etc/nova/nova.conf keystone_authtoken user_domain_name  default<br>openstack-config --<span class="hljs-built_in">set</span> /etc/nova/nova.conf keystone_authtoken project_name service<br>openstack-config --<span class="hljs-built_in">set</span> /etc/nova/nova.conf keystone_authtoken username nova<br>openstack-config --<span class="hljs-built_in">set</span> /etc/nova/nova.conf keystone_authtoken password NOVA_PASS<br>openstack-config --<span class="hljs-built_in">set</span> /etc/nova/nova.conf vnc enabled  <span class="hljs-literal">true</span><br>openstack-config --<span class="hljs-built_in">set</span> /etc/nova/nova.conf vnc server_listen <span class="hljs-string">&#x27;$my_ip&#x27;</span><br>openstack-config --<span class="hljs-built_in">set</span> /etc/nova/nova.conf vnc server_proxyclient_address  <span class="hljs-string">&#x27;$my_ip&#x27;</span><br>openstack-config --<span class="hljs-built_in">set</span> /etc/nova/nova.conf glance api_servers http://controller:9292<br>openstack-config --<span class="hljs-built_in">set</span> /etc/nova/nova.conf oslo_concurrency lock_path  /var/lib/nova/tmp<br>openstack-config --<span class="hljs-built_in">set</span> /etc/nova/nova.conf placement os_region_name  RegionOne<br>openstack-config --<span class="hljs-built_in">set</span> /etc/nova/nova.conf placement  project_domain_name  Default<br>openstack-config --<span class="hljs-built_in">set</span> /etc/nova/nova.conf placement  project_name  service<br>openstack-config --<span class="hljs-built_in">set</span> /etc/nova/nova.conf placement  auth_type  password<br>openstack-config --<span class="hljs-built_in">set</span> /etc/nova/nova.conf placement  user_domain_name  Default<br>openstack-config --<span class="hljs-built_in">set</span> /etc/nova/nova.conf placement  auth_url  http://controller:5000/v3<br>openstack-config --<span class="hljs-built_in">set</span> /etc/nova/nova.conf placement  username  placement<br>openstack-config --<span class="hljs-built_in">set</span> /etc/nova/nova.conf placement  password  PLACEMENT_PASS<br><br><span class="hljs-built_in">cat</span> &gt; /etc/httpd/conf.d/00-nova-placement-api.conf &lt;&lt;-<span class="hljs-string">EOF</span><br><span class="hljs-string">Listen 8778</span><br><span class="hljs-string"></span><br><span class="hljs-string">&lt;VirtualHost *:8778&gt;</span><br><span class="hljs-string">  WSGIProcessGroup nova-placement-api</span><br><span class="hljs-string">  WSGIApplicationGroup %&#123;GLOBAL&#125;</span><br><span class="hljs-string">  WSGIPassAuthorization On</span><br><span class="hljs-string">  WSGIDaemonProcess nova-placement-api processes=3 threads=1 user=nova group=nova</span><br><span class="hljs-string">  WSGIScriptAlias / /usr/bin/nova-placement-api</span><br><span class="hljs-string">  &lt;IfVersion &gt;= 2.4&gt;</span><br><span class="hljs-string">    ErrorLogFormat &quot;%M&quot;</span><br><span class="hljs-string">  &lt;/IfVersion&gt;</span><br><span class="hljs-string">  ErrorLog /var/log/nova/nova-placement-api.log</span><br><span class="hljs-string">  &lt;Directory /usr/bin&gt;</span><br><span class="hljs-string">   &lt;IfVersion &gt;= 2.4&gt;</span><br><span class="hljs-string">      Require all granted</span><br><span class="hljs-string">   &lt;/IfVersion&gt;</span><br><span class="hljs-string">   &lt;IfVersion &lt; 2.4&gt;</span><br><span class="hljs-string">      Order allow,deny</span><br><span class="hljs-string">      Allow from all</span><br><span class="hljs-string">   &lt;/IfVersion&gt;</span><br><span class="hljs-string">  &lt;/Directory&gt;</span><br><span class="hljs-string"></span><br><span class="hljs-string">  #SSLEngine On</span><br><span class="hljs-string">  #SSLCertificateFile ...</span><br><span class="hljs-string">  #SSLCertificateKeyFile ...</span><br><span class="hljs-string">&lt;/VirtualHost&gt;</span><br><span class="hljs-string"></span><br><span class="hljs-string">Alias /nova-placement-api /usr/bin/nova-placement-api</span><br><span class="hljs-string">&lt;Location /nova-placement-api&gt;</span><br><span class="hljs-string">  SetHandler wsgi-script</span><br><span class="hljs-string">  Options +ExecCGI</span><br><span class="hljs-string">  WSGIProcessGroup nova-placement-api</span><br><span class="hljs-string">  WSGIApplicationGroup %&#123;GLOBAL&#125;</span><br><span class="hljs-string">  WSGIPassAuthorization On</span><br><span class="hljs-string">&lt;/Location&gt;</span><br><span class="hljs-string"></span><br><span class="hljs-string">&lt;Directory /usr/bin&gt;</span><br><span class="hljs-string">   &lt;IfVersion &gt;= 2.4&gt;</span><br><span class="hljs-string">      Require all granted</span><br><span class="hljs-string">   &lt;/IfVersion&gt;</span><br><span class="hljs-string">   &lt;IfVersion &lt; 2.4&gt;</span><br><span class="hljs-string">      Order allow,deny</span><br><span class="hljs-string">      Allow from all</span><br><span class="hljs-string">   &lt;/IfVersion&gt;</span><br><span class="hljs-string">&lt;/Directory&gt;</span><br><span class="hljs-string">EOF</span><br>systemctl restart httpd<br><br>su -s /bin/sh -c <span class="hljs-string">&quot;nova-manage api_db sync&quot;</span> nova<br>su -s /bin/sh -c <span class="hljs-string">&quot;nova-manage cell_v2 map_cell0&quot;</span> nova<br>su -s /bin/sh -c <span class="hljs-string">&quot;nova-manage cell_v2 create_cell --name=cell1&quot;</span> nova<br>su -s /bin/sh -c <span class="hljs-string">&quot;nova-manage db sync&quot;</span> nova<br><br>systemctl <span class="hljs-built_in">enable</span> openstack-nova-api.service openstack-nova-consoleauth.service openstack-nova-scheduler.service openstack-nova-conductor.service openstack-nova-novncproxy.service<br>systemctl start openstack-nova-api.service openstack-nova-consoleauth.service openstack-nova-scheduler.service openstack-nova-conductor.service openstack-nova-novncproxy.service<br>nova service-list<br><br></code></pre></td></tr></table></figure><h5 id="执行-2"><a href="#执行-2" class="headerlink" title="执行"></a>执行</h5><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-comment">#执行脚本</span><br><span class="hljs-built_in">cd</span> <br>./openstack-nova-install-controller.sh<br></code></pre></td></tr></table></figure><ul><li>使用命令创建一个名为test，ID为6，内存为2048MB，磁盘为20GB，vcpu数量为2的云主机类型；</li></ul><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">nova flavor-create <span class="hljs-built_in">test</span> 6 2048 20 2<br></code></pre></td></tr></table></figure><p><img src="https://i.ibb.co/Nn7tBHGY/image-20260106112232550.png" alt="image-20260106112232550"></p><ul><li>查看test云主机类型的详细信息。</li></ul><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">nova flavor-show <span class="hljs-built_in">test</span><br></code></pre></td></tr></table></figure><p><img src="https://i.ibb.co/C3MXBzd0/image-20260106112302589.png" alt="image-20260106112302589"></p><h3 id="（4）neutron组件运维"><a href="#（4）neutron组件运维" class="headerlink" title="（4）neutron组件运维"></a>（4）neutron组件运维</h3><ul><li>安装neutron服务组件；</li></ul><h5 id="脚本-3"><a href="#脚本-3" class="headerlink" title="脚本"></a>脚本</h5><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br><span class="line">87</span><br><span class="line">88</span><br><span class="line">89</span><br><span class="line">90</span><br><span class="line">91</span><br><span class="line">92</span><br><span class="line">93</span><br><span class="line">94</span><br><span class="line">95</span><br><span class="line">96</span><br><span class="line">97</span><br><span class="line">98</span><br><span class="line">99</span><br><span class="line">100</span><br><span class="line">101</span><br><span class="line">102</span><br><span class="line">103</span><br><span class="line">104</span><br><span class="line">105</span><br><span class="line">106</span><br><span class="line">107</span><br><span class="line">108</span><br><span class="line">109</span><br><span class="line">110</span><br><span class="line">111</span><br><span class="line">112</span><br><span class="line">113</span><br><span class="line">114</span><br><span class="line">115</span><br><span class="line">116</span><br><span class="line">117</span><br><span class="line">118</span><br><span class="line">119</span><br><span class="line">120</span><br><span class="line">121</span><br><span class="line">122</span><br><span class="line">123</span><br><span class="line">124</span><br><span class="line">125</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-meta">#!/bin/bash</span><br><span class="hljs-comment">###############################################</span><br><span class="hljs-comment"># install nova for Openstack on controller</span><br><span class="hljs-comment"># Author:Ann  Date:2022-1-5</span><br><span class="hljs-comment">###############################################</span><br><br><br><span class="hljs-built_in">source</span> ~/admin-openrc.sh<br><br>mysql -uroot -p000000 -e <span class="hljs-string">&quot;create database IF NOT EXISTS nova;&quot;</span><br>mysql -uroot -p000000 -e <span class="hljs-string">&quot;create database IF NOT EXISTS nova_api;&quot;</span><br>mysql -uroot -p000000 -e <span class="hljs-string">&quot;create database IF NOT EXISTS nova_cell0 ;&quot;</span><br><br>mysql -uroot -p000000 -e <span class="hljs-string">&quot; GRANT ALL PRIVILEGES ON nova_api.* TO &#x27;nova&#x27;@&#x27;localhost&#x27; IDENTIFIED BY &#x27;NOVA_DBPASS&#x27;;&quot;</span><br>mysql -uroot -p000000 -e <span class="hljs-string">&quot; GRANT ALL PRIVILEGES ON nova_api.* TO &#x27;nova&#x27;@&#x27;%&#x27; IDENTIFIED BY &#x27;NOVA_DBPASS&#x27;;&quot;</span><br>mysql -uroot -p000000 -e <span class="hljs-string">&quot; GRANT ALL PRIVILEGES ON nova.* TO &#x27;nova&#x27;@&#x27;localhost&#x27; IDENTIFIED BY &#x27;NOVA_DBPASS&#x27;;&quot;</span><br>mysql -uroot -p000000 -e <span class="hljs-string">&quot; GRANT ALL PRIVILEGES ON nova.* TO &#x27;nova&#x27;@&#x27;%&#x27; IDENTIFIED BY &#x27;NOVA_DBPASS&#x27;;&quot;</span><br>mysql -uroot -p000000 -e <span class="hljs-string">&quot; GRANT ALL PRIVILEGES ON nova_cell0.* TO &#x27;nova&#x27;@&#x27;localhost&#x27; IDENTIFIED BY &#x27;NOVA_DBPASS&#x27;;&quot;</span><br>mysql -uroot -p000000 -e <span class="hljs-string">&quot; GRANT ALL PRIVILEGES ON nova_cell0.* TO &#x27;nova&#x27;@&#x27;%&#x27; IDENTIFIED BY &#x27;NOVA_DBPASS&#x27;;&quot;</span><br><br><br>openstack user create --domain default --password NOVA_PASS nova<br>openstack role add --project service --user nova admin<br>openstack service create --name nova --description <span class="hljs-string">&quot;OpenStack Compute&quot;</span> compute<br>openstack endpoint create --region RegionOne compute public http://controller:8774/v2.1<br>openstack endpoint create --region RegionOne compute internal http://controller:8774/v2.1<br>openstack endpoint create --region RegionOne compute admin http://controller:8774/v2.1<br><br>openstack user create --domain default --password PLACEMENT_PASS placement<br>openstack role add --project service --user placement admin<br>openstack service create --name placement --description <span class="hljs-string">&quot;Placement API&quot;</span> placement<br>openstack endpoint create --region RegionOne placement public http://controller:8778<br>openstack endpoint create --region RegionOne placement internal http://controller:8778<br>openstack endpoint create --region RegionOne placement admin http://controller:8778<br><br>yum install -y openstack-nova-api openstack-nova-conductor openstack-nova-console openstack-nova-novncproxy openstack-nova-scheduler openstack-nova-placement-api<br><br>openstack-config --<span class="hljs-built_in">set</span> /etc/nova/nova.conf database connection mysql+pymysql://nova:NOVA_DBPASS@controller/nova <br>openstack-config --<span class="hljs-built_in">set</span> /etc/nova/nova.conf DEFAULT  transport_url  rabbit://openstack:RABBIT_PASS@controller<br>openstack-config --<span class="hljs-built_in">set</span> /etc/nova/nova.conf DEFAULT  enabled_apis osapi_compute,metadata<br>openstack-config --<span class="hljs-built_in">set</span> /etc/nova/nova.conf DEFAULT  my_ip  10.0.0.11<br>openstack-config --<span class="hljs-built_in">set</span> /etc/nova/nova.conf DEFAULT  use_neutron  True<br>openstack-config --<span class="hljs-built_in">set</span> /etc/nova/nova.conf DEFAULT  firewall_driver  nova.virt.firewall.NoopFirewallDriver<br>openstack-config --<span class="hljs-built_in">set</span> /etc/nova/nova.conf api auth_strategy keystone<br>openstack-config --<span class="hljs-built_in">set</span> /etc/nova/nova.conf api_database connection mysql+pymysql://nova:NOVA_DBPASS@controller/nova_api<br>openstack-config --<span class="hljs-built_in">set</span> /etc/nova/nova.conf keystone_authtoken auth_url http://controller:5000/v3<br>openstack-config --<span class="hljs-built_in">set</span> /etc/nova/nova.conf keystone_authtoken memcached_servers controller:11211<br>openstack-config --<span class="hljs-built_in">set</span> /etc/nova/nova.conf keystone_authtoken auth_type  password<br>openstack-config --<span class="hljs-built_in">set</span> /etc/nova/nova.conf keystone_authtoken project_domain_name default<br>openstack-config --<span class="hljs-built_in">set</span> /etc/nova/nova.conf keystone_authtoken user_domain_name  default<br>openstack-config --<span class="hljs-built_in">set</span> /etc/nova/nova.conf keystone_authtoken project_name service<br>openstack-config --<span class="hljs-built_in">set</span> /etc/nova/nova.conf keystone_authtoken username nova<br>openstack-config --<span class="hljs-built_in">set</span> /etc/nova/nova.conf keystone_authtoken password NOVA_PASS<br>openstack-config --<span class="hljs-built_in">set</span> /etc/nova/nova.conf vnc enabled  <span class="hljs-literal">true</span><br>openstack-config --<span class="hljs-built_in">set</span> /etc/nova/nova.conf vnc server_listen <span class="hljs-string">&#x27;$my_ip&#x27;</span><br>openstack-config --<span class="hljs-built_in">set</span> /etc/nova/nova.conf vnc server_proxyclient_address  <span class="hljs-string">&#x27;$my_ip&#x27;</span><br>openstack-config --<span class="hljs-built_in">set</span> /etc/nova/nova.conf glance api_servers http://controller:9292<br>openstack-config --<span class="hljs-built_in">set</span> /etc/nova/nova.conf oslo_concurrency lock_path  /var/lib/nova/tmp<br>openstack-config --<span class="hljs-built_in">set</span> /etc/nova/nova.conf placement os_region_name  RegionOne<br>openstack-config --<span class="hljs-built_in">set</span> /etc/nova/nova.conf placement  project_domain_name  Default<br>openstack-config --<span class="hljs-built_in">set</span> /etc/nova/nova.conf placement  project_name  service<br>openstack-config --<span class="hljs-built_in">set</span> /etc/nova/nova.conf placement  auth_type  password<br>openstack-config --<span class="hljs-built_in">set</span> /etc/nova/nova.conf placement  user_domain_name  Default<br>openstack-config --<span class="hljs-built_in">set</span> /etc/nova/nova.conf placement  auth_url  http://controller:5000/v3<br>openstack-config --<span class="hljs-built_in">set</span> /etc/nova/nova.conf placement  username  placement<br>openstack-config --<span class="hljs-built_in">set</span> /etc/nova/nova.conf placement  password  PLACEMENT_PASS<br><br><span class="hljs-built_in">cat</span> &gt; /etc/httpd/conf.d/00-nova-placement-api.conf &lt;&lt;-<span class="hljs-string">EOF</span><br><span class="hljs-string">Listen 8778</span><br><span class="hljs-string"></span><br><span class="hljs-string">&lt;VirtualHost *:8778&gt;</span><br><span class="hljs-string">  WSGIProcessGroup nova-placement-api</span><br><span class="hljs-string">  WSGIApplicationGroup %&#123;GLOBAL&#125;</span><br><span class="hljs-string">  WSGIPassAuthorization On</span><br><span class="hljs-string">  WSGIDaemonProcess nova-placement-api processes=3 threads=1 user=nova group=nova</span><br><span class="hljs-string">  WSGIScriptAlias / /usr/bin/nova-placement-api</span><br><span class="hljs-string">  &lt;IfVersion &gt;= 2.4&gt;</span><br><span class="hljs-string">    ErrorLogFormat &quot;%M&quot;</span><br><span class="hljs-string">  &lt;/IfVersion&gt;</span><br><span class="hljs-string">  ErrorLog /var/log/nova/nova-placement-api.log</span><br><span class="hljs-string">  &lt;Directory /usr/bin&gt;</span><br><span class="hljs-string">   &lt;IfVersion &gt;= 2.4&gt;</span><br><span class="hljs-string">      Require all granted</span><br><span class="hljs-string">   &lt;/IfVersion&gt;</span><br><span class="hljs-string">   &lt;IfVersion &lt; 2.4&gt;</span><br><span class="hljs-string">      Order allow,deny</span><br><span class="hljs-string">      Allow from all</span><br><span class="hljs-string">   &lt;/IfVersion&gt;</span><br><span class="hljs-string">  &lt;/Directory&gt;</span><br><span class="hljs-string"></span><br><span class="hljs-string">  #SSLEngine On</span><br><span class="hljs-string">  #SSLCertificateFile ...</span><br><span class="hljs-string">  #SSLCertificateKeyFile ...</span><br><span class="hljs-string">&lt;/VirtualHost&gt;</span><br><span class="hljs-string"></span><br><span class="hljs-string">Alias /nova-placement-api /usr/bin/nova-placement-api</span><br><span class="hljs-string">&lt;Location /nova-placement-api&gt;</span><br><span class="hljs-string">  SetHandler wsgi-script</span><br><span class="hljs-string">  Options +ExecCGI</span><br><span class="hljs-string">  WSGIProcessGroup nova-placement-api</span><br><span class="hljs-string">  WSGIApplicationGroup %&#123;GLOBAL&#125;</span><br><span class="hljs-string">  WSGIPassAuthorization On</span><br><span class="hljs-string">&lt;/Location&gt;</span><br><span class="hljs-string"></span><br><span class="hljs-string">&lt;Directory /usr/bin&gt;</span><br><span class="hljs-string">   &lt;IfVersion &gt;= 2.4&gt;</span><br><span class="hljs-string">      Require all granted</span><br><span class="hljs-string">   &lt;/IfVersion&gt;</span><br><span class="hljs-string">   &lt;IfVersion &lt; 2.4&gt;</span><br><span class="hljs-string">      Order allow,deny</span><br><span class="hljs-string">      Allow from all</span><br><span class="hljs-string">   &lt;/IfVersion&gt;</span><br><span class="hljs-string">&lt;/Directory&gt;</span><br><span class="hljs-string">EOF</span><br>systemctl restart httpd<br><br>su -s /bin/sh -c <span class="hljs-string">&quot;nova-manage api_db sync&quot;</span> nova<br>su -s /bin/sh -c <span class="hljs-string">&quot;nova-manage cell_v2 map_cell0&quot;</span> nova<br>su -s /bin/sh -c <span class="hljs-string">&quot;nova-manage cell_v2 create_cell --name=cell1&quot;</span> nova<br>su -s /bin/sh -c <span class="hljs-string">&quot;nova-manage db sync&quot;</span> nova<br><br>systemctl <span class="hljs-built_in">enable</span> openstack-nova-api.service openstack-nova-consoleauth.service openstack-nova-scheduler.service openstack-nova-conductor.service openstack-nova-novncproxy.service<br>systemctl start openstack-nova-api.service openstack-nova-consoleauth.service openstack-nova-scheduler.service openstack-nova-conductor.service openstack-nova-novncproxy.service<br>nova service-list<br><br></code></pre></td></tr></table></figure><h5 id="执行-3"><a href="#执行-3" class="headerlink" title="执行"></a>执行</h5><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-comment">#执行脚本</span><br><span class="hljs-built_in">cd</span> <br>./openstack-nova-install-controller.sh<br></code></pre></td></tr></table></figure><ul><li>使用Neutron相关命令查询网络服务的列表信息中的“binary”一列；</li></ul><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">neutron agent-list -c binary<br></code></pre></td></tr></table></figure><p><img src="https://i.ibb.co/mkB8b5c/image-20260106112712689.png" alt="image-20260106112712689"></p><ul><li>使用Neutron相关命令查询网络服务DHCPagent的详细信息。</li></ul><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><code class="hljs bash">neutron agent-list<br>neutron agent-show 245ae2f9-6220-4c00-a36d-542a746a3f9e<br></code></pre></td></tr></table></figure><p><img src="https://i.ibb.co/sLkFJ3M/image-20260106112908274.png" alt="image-20260106112908274"></p><p><img src="https://i.ibb.co/cKnJN8G7/image-20260106113111941.png" alt="image-20260106113111941"></p><h3 id="（5）dashboard运维"><a href="#（5）dashboard运维" class="headerlink" title="（5）dashboard运维"></a>（5）dashboard运维</h3><ul><li>安装dashboard服务组件；</li></ul><h5 id="脚本-4"><a href="#脚本-4" class="headerlink" title="脚本"></a>脚本</h5><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br><span class="line">87</span><br><span class="line">88</span><br><span class="line">89</span><br><span class="line">90</span><br><span class="line">91</span><br><span class="line">92</span><br><span class="line">93</span><br><span class="line">94</span><br><span class="line">95</span><br><span class="line">96</span><br><span class="line">97</span><br><span class="line">98</span><br><span class="line">99</span><br><span class="line">100</span><br><span class="line">101</span><br><span class="line">102</span><br><span class="line">103</span><br><span class="line">104</span><br><span class="line">105</span><br><span class="line">106</span><br><span class="line">107</span><br><span class="line">108</span><br><span class="line">109</span><br><span class="line">110</span><br><span class="line">111</span><br><span class="line">112</span><br><span class="line">113</span><br><span class="line">114</span><br><span class="line">115</span><br><span class="line">116</span><br><span class="line">117</span><br><span class="line">118</span><br><span class="line">119</span><br><span class="line">120</span><br><span class="line">121</span><br><span class="line">122</span><br><span class="line">123</span><br><span class="line">124</span><br><span class="line">125</span><br><span class="line">126</span><br><span class="line">127</span><br><span class="line">128</span><br><span class="line">129</span><br><span class="line">130</span><br><span class="line">131</span><br><span class="line">132</span><br><span class="line">133</span><br><span class="line">134</span><br><span class="line">135</span><br><span class="line">136</span><br><span class="line">137</span><br><span class="line">138</span><br><span class="line">139</span><br><span class="line">140</span><br><span class="line">141</span><br><span class="line">142</span><br><span class="line">143</span><br><span class="line">144</span><br><span class="line">145</span><br><span class="line">146</span><br><span class="line">147</span><br><span class="line">148</span><br><span class="line">149</span><br><span class="line">150</span><br><span class="line">151</span><br><span class="line">152</span><br><span class="line">153</span><br><span class="line">154</span><br><span class="line">155</span><br><span class="line">156</span><br><span class="line">157</span><br><span class="line">158</span><br><span class="line">159</span><br><span class="line">160</span><br><span class="line">161</span><br><span class="line">162</span><br><span class="line">163</span><br><span class="line">164</span><br><span class="line">165</span><br><span class="line">166</span><br><span class="line">167</span><br><span class="line">168</span><br><span class="line">169</span><br><span class="line">170</span><br><span class="line">171</span><br><span class="line">172</span><br><span class="line">173</span><br><span class="line">174</span><br><span class="line">175</span><br><span class="line">176</span><br><span class="line">177</span><br><span class="line">178</span><br><span class="line">179</span><br><span class="line">180</span><br><span class="line">181</span><br><span class="line">182</span><br><span class="line">183</span><br><span class="line">184</span><br><span class="line">185</span><br><span class="line">186</span><br><span class="line">187</span><br><span class="line">188</span><br><span class="line">189</span><br><span class="line">190</span><br><span class="line">191</span><br><span class="line">192</span><br><span class="line">193</span><br><span class="line">194</span><br><span class="line">195</span><br><span class="line">196</span><br><span class="line">197</span><br><span class="line">198</span><br><span class="line">199</span><br><span class="line">200</span><br><span class="line">201</span><br><span class="line">202</span><br><span class="line">203</span><br><span class="line">204</span><br><span class="line">205</span><br><span class="line">206</span><br><span class="line">207</span><br><span class="line">208</span><br><span class="line">209</span><br><span class="line">210</span><br><span class="line">211</span><br><span class="line">212</span><br><span class="line">213</span><br><span class="line">214</span><br><span class="line">215</span><br><span class="line">216</span><br><span class="line">217</span><br><span class="line">218</span><br><span class="line">219</span><br><span class="line">220</span><br><span class="line">221</span><br><span class="line">222</span><br><span class="line">223</span><br><span class="line">224</span><br><span class="line">225</span><br><span class="line">226</span><br><span class="line">227</span><br><span class="line">228</span><br><span class="line">229</span><br><span class="line">230</span><br><span class="line">231</span><br><span class="line">232</span><br><span class="line">233</span><br><span class="line">234</span><br><span class="line">235</span><br><span class="line">236</span><br><span class="line">237</span><br><span class="line">238</span><br><span class="line">239</span><br><span class="line">240</span><br><span class="line">241</span><br><span class="line">242</span><br><span class="line">243</span><br><span class="line">244</span><br><span class="line">245</span><br><span class="line">246</span><br><span class="line">247</span><br><span class="line">248</span><br><span class="line">249</span><br><span class="line">250</span><br><span class="line">251</span><br><span class="line">252</span><br><span class="line">253</span><br><span class="line">254</span><br><span class="line">255</span><br><span class="line">256</span><br><span class="line">257</span><br><span class="line">258</span><br><span class="line">259</span><br><span class="line">260</span><br><span class="line">261</span><br><span class="line">262</span><br><span class="line">263</span><br><span class="line">264</span><br><span class="line">265</span><br><span class="line">266</span><br><span class="line">267</span><br><span class="line">268</span><br><span class="line">269</span><br><span class="line">270</span><br><span class="line">271</span><br><span class="line">272</span><br><span class="line">273</span><br><span class="line">274</span><br><span class="line">275</span><br><span class="line">276</span><br><span class="line">277</span><br><span class="line">278</span><br><span class="line">279</span><br><span class="line">280</span><br><span class="line">281</span><br><span class="line">282</span><br><span class="line">283</span><br><span class="line">284</span><br><span class="line">285</span><br><span class="line">286</span><br><span class="line">287</span><br><span class="line">288</span><br><span class="line">289</span><br><span class="line">290</span><br><span class="line">291</span><br><span class="line">292</span><br><span class="line">293</span><br><span class="line">294</span><br><span class="line">295</span><br><span class="line">296</span><br><span class="line">297</span><br><span class="line">298</span><br><span class="line">299</span><br><span class="line">300</span><br><span class="line">301</span><br><span class="line">302</span><br><span class="line">303</span><br><span class="line">304</span><br><span class="line">305</span><br><span class="line">306</span><br><span class="line">307</span><br><span class="line">308</span><br><span class="line">309</span><br><span class="line">310</span><br><span class="line">311</span><br><span class="line">312</span><br><span class="line">313</span><br><span class="line">314</span><br><span class="line">315</span><br><span class="line">316</span><br><span class="line">317</span><br><span class="line">318</span><br><span class="line">319</span><br><span class="line">320</span><br><span class="line">321</span><br><span class="line">322</span><br><span class="line">323</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-meta">#!/bin/bash</span><br><span class="hljs-comment">###############################################</span><br><span class="hljs-comment"># install dashboard for Openstack on controller</span><br><span class="hljs-comment"># Author:Ann  Date:2022-1-6</span><br><span class="hljs-comment">###############################################</span><br><br><span class="hljs-built_in">source</span>  ~/admin-openrc.sh<br>yum -y install openstack-dashboard<br><span class="hljs-built_in">cat</span> &gt; /etc/openstack-dashboard/local_settings &lt;&lt;-<span class="hljs-string">EOF</span><br><span class="hljs-string">import os</span><br><span class="hljs-string">from django.utils.translation import ugettext_lazy as _</span><br><span class="hljs-string">from openstack_dashboard.settings import HORIZON_CONFIG</span><br><span class="hljs-string">DEBUG = False</span><br><span class="hljs-string">WEBROOT = &#x27;/dashboard/&#x27;</span><br><span class="hljs-string">ALLOWED_HOSTS = [&#x27;*&#x27;,]</span><br><span class="hljs-string">SESSION_ENGINE = &#x27;django.contrib.sessions.backends.cache&#x27;</span><br><span class="hljs-string">OPENSTACK_API_VERSIONS = &#123;</span><br><span class="hljs-string">    &quot;identity&quot;: 3,</span><br><span class="hljs-string">    &quot;image&quot;: 2,</span><br><span class="hljs-string">    &quot;volume&quot;: 2,</span><br><span class="hljs-string">&#125;</span><br><span class="hljs-string">OPENSTACK_KEYSTONE_MULTIDOMAIN_SUPPORT = True</span><br><span class="hljs-string">OPENSTACK_KEYSTONE_DEFAULT_DOMAIN = &#x27;Default&#x27;</span><br><span class="hljs-string">LOCAL_PATH = &#x27;/tmp&#x27;</span><br><span class="hljs-string">SECRET_KEY=&#x27;a98fb726ae49aeefb5ab&#x27;</span><br><span class="hljs-string">CACHES = &#123;</span><br><span class="hljs-string">    &#x27;default&#x27;: &#123;</span><br><span class="hljs-string">        &#x27;BACKEND&#x27;: &#x27;django.core.cache.backends.memcached.MemcachedCache&#x27;,</span><br><span class="hljs-string">        &#x27;LOCATION&#x27;: &#x27;controller:11211&#x27;,</span><br><span class="hljs-string">    &#125;,</span><br><span class="hljs-string">&#125;</span><br><span class="hljs-string">EMAIL_BACKEND = &#x27;django.core.mail.backends.console.EmailBackend&#x27;</span><br><span class="hljs-string">OPENSTACK_HOST = &quot;controller&quot;</span><br><span class="hljs-string">OPENSTACK_KEYSTONE_URL = &quot;http://%s:5000/v3&quot; % OPENSTACK_HOST</span><br><span class="hljs-string">OPENSTACK_KEYSTONE_DEFAULT_ROLE = &quot;user&quot;</span><br><span class="hljs-string">OPENSTACK_KEYSTONE_BACKEND = &#123;</span><br><span class="hljs-string">    &#x27;name&#x27;: &#x27;native&#x27;,</span><br><span class="hljs-string">    &#x27;can_edit_user&#x27;: True,</span><br><span class="hljs-string">    &#x27;can_edit_group&#x27;: True,</span><br><span class="hljs-string">    &#x27;can_edit_project&#x27;: True,</span><br><span class="hljs-string">    &#x27;can_edit_domain&#x27;: True,</span><br><span class="hljs-string">    &#x27;can_edit_role&#x27;: True,</span><br><span class="hljs-string">&#125;</span><br><span class="hljs-string">OPENSTACK_HYPERVISOR_FEATURES = &#123;</span><br><span class="hljs-string">    &#x27;can_set_mount_point&#x27;: False,</span><br><span class="hljs-string">    &#x27;can_set_password&#x27;: False,</span><br><span class="hljs-string">    &#x27;requires_keypair&#x27;: False,</span><br><span class="hljs-string">    &#x27;enable_quotas&#x27;: True</span><br><span class="hljs-string">&#125;</span><br><span class="hljs-string">OPENSTACK_CINDER_FEATURES = &#123;</span><br><span class="hljs-string">    &#x27;enable_backup&#x27;: False,</span><br><span class="hljs-string">&#125;</span><br><span class="hljs-string">OPENSTACK_NEUTRON_NETWORK = &#123;</span><br><span class="hljs-string">    &#x27;enable_router&#x27;: False,</span><br><span class="hljs-string">    &#x27;enable_quotas&#x27;: False,</span><br><span class="hljs-string">    &#x27;enable_distributed_router&#x27;: False,</span><br><span class="hljs-string">    &#x27;enable_ha_router&#x27;: False,</span><br><span class="hljs-string">    &#x27;enable_lb&#x27;: False,</span><br><span class="hljs-string">    &#x27;enable_firewall&#x27;: False,</span><br><span class="hljs-string">    &#x27;enable_vpn&#x27;: False,</span><br><span class="hljs-string">    &#x27;enable_fip_topology_check&#x27;: False,</span><br><span class="hljs-string">    &#x27;supported_vnic_types&#x27;: [&#x27;*&#x27;],</span><br><span class="hljs-string">    &#x27;physical_networks&#x27;: [],</span><br><span class="hljs-string">&#125;</span><br><span class="hljs-string">OPENSTACK_HEAT_STACK = &#123;</span><br><span class="hljs-string">    &#x27;enable_user_pass&#x27;: True,</span><br><span class="hljs-string">&#125;</span><br><span class="hljs-string">IMAGE_CUSTOM_PROPERTY_TITLES = &#123;</span><br><span class="hljs-string">    &quot;architecture&quot;: _(&quot;Architecture&quot;),</span><br><span class="hljs-string">    &quot;kernel_id&quot;: _(&quot;Kernel ID&quot;),</span><br><span class="hljs-string">    &quot;ramdisk_id&quot;: _(&quot;Ramdisk ID&quot;),</span><br><span class="hljs-string">    &quot;image_state&quot;: _(&quot;Euca2ools state&quot;),</span><br><span class="hljs-string">    &quot;project_id&quot;: _(&quot;Project ID&quot;),</span><br><span class="hljs-string">    &quot;image_type&quot;: _(&quot;Image Type&quot;),</span><br><span class="hljs-string">&#125;</span><br><span class="hljs-string">IMAGE_RESERVED_CUSTOM_PROPERTIES = []</span><br><span class="hljs-string">API_RESULT_LIMIT = 1000</span><br><span class="hljs-string">API_RESULT_PAGE_SIZE = 20</span><br><span class="hljs-string">SWIFT_FILE_TRANSFER_CHUNK_SIZE = 512 * 1024</span><br><span class="hljs-string">INSTANCE_LOG_LENGTH = 35</span><br><span class="hljs-string">DROPDOWN_MAX_ITEMS = 30</span><br><span class="hljs-string">TIME_ZONE = &quot;Asia/Shanghai&quot;</span><br><span class="hljs-string">POLICY_FILES_PATH = &#x27;/etc/openstack-dashboard&#x27;</span><br><span class="hljs-string">LOGGING = &#123;</span><br><span class="hljs-string">    &#x27;version&#x27;: 1,</span><br><span class="hljs-string">    &#x27;disable_existing_loggers&#x27;: False,</span><br><span class="hljs-string">    &#x27;formatters&#x27;: &#123;</span><br><span class="hljs-string">        &#x27;console&#x27;: &#123;</span><br><span class="hljs-string">            &#x27;format&#x27;: &#x27;%(levelname)s %(name)s %(message)s&#x27;</span><br><span class="hljs-string">        &#125;,</span><br><span class="hljs-string">        &#x27;operation&#x27;: &#123;</span><br><span class="hljs-string">            &#x27;format&#x27;: &#x27;%(message)s&#x27;</span><br><span class="hljs-string">        &#125;,</span><br><span class="hljs-string">    &#125;,</span><br><span class="hljs-string">    &#x27;handlers&#x27;: &#123;</span><br><span class="hljs-string">        &#x27;null&#x27;: &#123;</span><br><span class="hljs-string">            &#x27;level&#x27;: &#x27;DEBUG&#x27;,</span><br><span class="hljs-string">            &#x27;class&#x27;: &#x27;logging.NullHandler&#x27;,</span><br><span class="hljs-string">        &#125;,</span><br><span class="hljs-string">        &#x27;console&#x27;: &#123;</span><br><span class="hljs-string">            &#x27;level&#x27;: &#x27;INFO&#x27;,</span><br><span class="hljs-string">            &#x27;class&#x27;: &#x27;logging.StreamHandler&#x27;,</span><br><span class="hljs-string">            &#x27;formatter&#x27;: &#x27;console&#x27;,</span><br><span class="hljs-string">        &#125;,</span><br><span class="hljs-string">        &#x27;operation&#x27;: &#123;</span><br><span class="hljs-string">            &#x27;level&#x27;: &#x27;INFO&#x27;,</span><br><span class="hljs-string">            &#x27;class&#x27;: &#x27;logging.StreamHandler&#x27;,</span><br><span class="hljs-string">            &#x27;formatter&#x27;: &#x27;operation&#x27;,</span><br><span class="hljs-string">        &#125;,</span><br><span class="hljs-string">    &#125;,</span><br><span class="hljs-string">    &#x27;loggers&#x27;: &#123;</span><br><span class="hljs-string">        &#x27;horizon&#x27;: &#123;</span><br><span class="hljs-string">            &#x27;handlers&#x27;: [&#x27;console&#x27;],</span><br><span class="hljs-string">            &#x27;level&#x27;: &#x27;DEBUG&#x27;,</span><br><span class="hljs-string">            &#x27;propagate&#x27;: False,</span><br><span class="hljs-string">        &#125;,</span><br><span class="hljs-string">        &#x27;horizon.operation_log&#x27;: &#123;</span><br><span class="hljs-string">            &#x27;handlers&#x27;: [&#x27;operation&#x27;],</span><br><span class="hljs-string">            &#x27;level&#x27;: &#x27;INFO&#x27;,</span><br><span class="hljs-string">            &#x27;propagate&#x27;: False,</span><br><span class="hljs-string">        &#125;,</span><br><span class="hljs-string">        &#x27;openstack_dashboard&#x27;: &#123;</span><br><span class="hljs-string">            &#x27;handlers&#x27;: [&#x27;console&#x27;],</span><br><span class="hljs-string">            &#x27;level&#x27;: &#x27;DEBUG&#x27;,</span><br><span class="hljs-string">            &#x27;propagate&#x27;: False,</span><br><span class="hljs-string">        &#125;,</span><br><span class="hljs-string">        &#x27;novaclient&#x27;: &#123;</span><br><span class="hljs-string">            &#x27;handlers&#x27;: [&#x27;console&#x27;],</span><br><span class="hljs-string">            &#x27;level&#x27;: &#x27;DEBUG&#x27;,</span><br><span class="hljs-string">            &#x27;propagate&#x27;: False,</span><br><span class="hljs-string">        &#125;,</span><br><span class="hljs-string">        &#x27;cinderclient&#x27;: &#123;</span><br><span class="hljs-string">            &#x27;handlers&#x27;: [&#x27;console&#x27;],</span><br><span class="hljs-string">            &#x27;level&#x27;: &#x27;DEBUG&#x27;,</span><br><span class="hljs-string">            &#x27;propagate&#x27;: False,</span><br><span class="hljs-string">        &#125;,</span><br><span class="hljs-string">        &#x27;keystoneauth&#x27;: &#123;</span><br><span class="hljs-string">            &#x27;handlers&#x27;: [&#x27;console&#x27;],</span><br><span class="hljs-string">            &#x27;level&#x27;: &#x27;DEBUG&#x27;,</span><br><span class="hljs-string">            &#x27;propagate&#x27;: False,</span><br><span class="hljs-string">        &#125;,</span><br><span class="hljs-string">        &#x27;keystoneclient&#x27;: &#123;</span><br><span class="hljs-string">            &#x27;handlers&#x27;: [&#x27;console&#x27;],</span><br><span class="hljs-string">            &#x27;level&#x27;: &#x27;DEBUG&#x27;,</span><br><span class="hljs-string">            &#x27;propagate&#x27;: False,</span><br><span class="hljs-string">        &#125;,</span><br><span class="hljs-string">        &#x27;glanceclient&#x27;: &#123;</span><br><span class="hljs-string">            &#x27;handlers&#x27;: [&#x27;console&#x27;],</span><br><span class="hljs-string">            &#x27;level&#x27;: &#x27;DEBUG&#x27;,</span><br><span class="hljs-string">            &#x27;propagate&#x27;: False,</span><br><span class="hljs-string">        &#125;,</span><br><span class="hljs-string">        &#x27;neutronclient&#x27;: &#123;</span><br><span class="hljs-string">            &#x27;handlers&#x27;: [&#x27;console&#x27;],</span><br><span class="hljs-string">            &#x27;level&#x27;: &#x27;DEBUG&#x27;,</span><br><span class="hljs-string">            &#x27;propagate&#x27;: False,</span><br><span class="hljs-string">        &#125;,</span><br><span class="hljs-string">        &#x27;swiftclient&#x27;: &#123;</span><br><span class="hljs-string">            &#x27;handlers&#x27;: [&#x27;console&#x27;],</span><br><span class="hljs-string">            &#x27;level&#x27;: &#x27;DEBUG&#x27;,</span><br><span class="hljs-string">            &#x27;propagate&#x27;: False,</span><br><span class="hljs-string">        &#125;,</span><br><span class="hljs-string">        &#x27;oslo_policy&#x27;: &#123;</span><br><span class="hljs-string">            &#x27;handlers&#x27;: [&#x27;console&#x27;],</span><br><span class="hljs-string">            &#x27;level&#x27;: &#x27;DEBUG&#x27;,</span><br><span class="hljs-string">            &#x27;propagate&#x27;: False,</span><br><span class="hljs-string">        &#125;,</span><br><span class="hljs-string">        &#x27;openstack_auth&#x27;: &#123;</span><br><span class="hljs-string">            &#x27;handlers&#x27;: [&#x27;console&#x27;],</span><br><span class="hljs-string">            &#x27;level&#x27;: &#x27;DEBUG&#x27;,</span><br><span class="hljs-string">            &#x27;propagate&#x27;: False,</span><br><span class="hljs-string">        &#125;,</span><br><span class="hljs-string">        &#x27;nose.plugins.manager&#x27;: &#123;</span><br><span class="hljs-string">            &#x27;handlers&#x27;: [&#x27;console&#x27;],</span><br><span class="hljs-string">            &#x27;level&#x27;: &#x27;DEBUG&#x27;,</span><br><span class="hljs-string">            &#x27;propagate&#x27;: False,</span><br><span class="hljs-string">        &#125;,</span><br><span class="hljs-string">        &#x27;django&#x27;: &#123;</span><br><span class="hljs-string">            &#x27;handlers&#x27;: [&#x27;console&#x27;],</span><br><span class="hljs-string">            &#x27;level&#x27;: &#x27;DEBUG&#x27;,</span><br><span class="hljs-string">            &#x27;propagate&#x27;: False,</span><br><span class="hljs-string">        &#125;,</span><br><span class="hljs-string">        &#x27;django.db.backends&#x27;: &#123;</span><br><span class="hljs-string">            &#x27;handlers&#x27;: [&#x27;null&#x27;],</span><br><span class="hljs-string">            &#x27;propagate&#x27;: False,</span><br><span class="hljs-string">        &#125;,</span><br><span class="hljs-string">        &#x27;requests&#x27;: &#123;</span><br><span class="hljs-string">            &#x27;handlers&#x27;: [&#x27;null&#x27;],</span><br><span class="hljs-string">            &#x27;propagate&#x27;: False,</span><br><span class="hljs-string">        &#125;,</span><br><span class="hljs-string">        &#x27;urllib3&#x27;: &#123;</span><br><span class="hljs-string">            &#x27;handlers&#x27;: [&#x27;null&#x27;],</span><br><span class="hljs-string">            &#x27;propagate&#x27;: False,</span><br><span class="hljs-string">        &#125;,</span><br><span class="hljs-string">        &#x27;chardet.charsetprober&#x27;: &#123;</span><br><span class="hljs-string">            &#x27;handlers&#x27;: [&#x27;null&#x27;],</span><br><span class="hljs-string">            &#x27;propagate&#x27;: False,</span><br><span class="hljs-string">        &#125;,</span><br><span class="hljs-string">        &#x27;iso8601&#x27;: &#123;</span><br><span class="hljs-string">            &#x27;handlers&#x27;: [&#x27;null&#x27;],</span><br><span class="hljs-string">            &#x27;propagate&#x27;: False,</span><br><span class="hljs-string">        &#125;,</span><br><span class="hljs-string">        &#x27;scss&#x27;: &#123;</span><br><span class="hljs-string">            &#x27;handlers&#x27;: [&#x27;null&#x27;],</span><br><span class="hljs-string">            &#x27;propagate&#x27;: False,</span><br><span class="hljs-string">        &#125;,</span><br><span class="hljs-string">    &#125;,</span><br><span class="hljs-string">&#125;</span><br><span class="hljs-string">SECURITY_GROUP_RULES = &#123;</span><br><span class="hljs-string">    &#x27;all_tcp&#x27;: &#123;</span><br><span class="hljs-string">        &#x27;name&#x27;: _(&#x27;All TCP&#x27;),</span><br><span class="hljs-string">        &#x27;ip_protocol&#x27;: &#x27;tcp&#x27;,</span><br><span class="hljs-string">        &#x27;from_port&#x27;: &#x27;1&#x27;,</span><br><span class="hljs-string">        &#x27;to_port&#x27;: &#x27;65535&#x27;,</span><br><span class="hljs-string">    &#125;,</span><br><span class="hljs-string">    &#x27;all_udp&#x27;: &#123;</span><br><span class="hljs-string">        &#x27;name&#x27;: _(&#x27;All UDP&#x27;),</span><br><span class="hljs-string">        &#x27;ip_protocol&#x27;: &#x27;udp&#x27;,</span><br><span class="hljs-string">        &#x27;from_port&#x27;: &#x27;1&#x27;,</span><br><span class="hljs-string">        &#x27;to_port&#x27;: &#x27;65535&#x27;,</span><br><span class="hljs-string">    &#125;,</span><br><span class="hljs-string">    &#x27;all_icmp&#x27;: &#123;</span><br><span class="hljs-string">        &#x27;name&#x27;: _(&#x27;All ICMP&#x27;),</span><br><span class="hljs-string">        &#x27;ip_protocol&#x27;: &#x27;icmp&#x27;,</span><br><span class="hljs-string">        &#x27;from_port&#x27;: &#x27;-1&#x27;,</span><br><span class="hljs-string">        &#x27;to_port&#x27;: &#x27;-1&#x27;,</span><br><span class="hljs-string">    &#125;,</span><br><span class="hljs-string">    &#x27;ssh&#x27;: &#123;</span><br><span class="hljs-string">        &#x27;name&#x27;: &#x27;SSH&#x27;,</span><br><span class="hljs-string">        &#x27;ip_protocol&#x27;: &#x27;tcp&#x27;,</span><br><span class="hljs-string">        &#x27;from_port&#x27;: &#x27;22&#x27;,</span><br><span class="hljs-string">        &#x27;to_port&#x27;: &#x27;22&#x27;,</span><br><span class="hljs-string">    &#125;,</span><br><span class="hljs-string">    &#x27;smtp&#x27;: &#123;</span><br><span class="hljs-string">        &#x27;name&#x27;: &#x27;SMTP&#x27;,</span><br><span class="hljs-string">        &#x27;ip_protocol&#x27;: &#x27;tcp&#x27;,</span><br><span class="hljs-string">        &#x27;from_port&#x27;: &#x27;25&#x27;,</span><br><span class="hljs-string">        &#x27;to_port&#x27;: &#x27;25&#x27;,</span><br><span class="hljs-string">    &#125;,</span><br><span class="hljs-string">    &#x27;dns&#x27;: &#123;</span><br><span class="hljs-string">        &#x27;name&#x27;: &#x27;DNS&#x27;,</span><br><span class="hljs-string">        &#x27;ip_protocol&#x27;: &#x27;tcp&#x27;,</span><br><span class="hljs-string">        &#x27;from_port&#x27;: &#x27;53&#x27;,</span><br><span class="hljs-string">        &#x27;to_port&#x27;: &#x27;53&#x27;,</span><br><span class="hljs-string">    &#125;,</span><br><span class="hljs-string">    &#x27;http&#x27;: &#123;</span><br><span class="hljs-string">        &#x27;name&#x27;: &#x27;HTTP&#x27;,</span><br><span class="hljs-string">        &#x27;ip_protocol&#x27;: &#x27;tcp&#x27;,</span><br><span class="hljs-string">        &#x27;from_port&#x27;: &#x27;80&#x27;,</span><br><span class="hljs-string">        &#x27;to_port&#x27;: &#x27;80&#x27;,</span><br><span class="hljs-string">    &#125;,</span><br><span class="hljs-string">    &#x27;pop3&#x27;: &#123;</span><br><span class="hljs-string">        &#x27;name&#x27;: &#x27;POP3&#x27;,</span><br><span class="hljs-string">        &#x27;ip_protocol&#x27;: &#x27;tcp&#x27;,</span><br><span class="hljs-string">        &#x27;from_port&#x27;: &#x27;110&#x27;,</span><br><span class="hljs-string">        &#x27;to_port&#x27;: &#x27;110&#x27;,</span><br><span class="hljs-string">    &#125;,</span><br><span class="hljs-string">    &#x27;imap&#x27;: &#123;</span><br><span class="hljs-string">        &#x27;name&#x27;: &#x27;IMAP&#x27;,</span><br><span class="hljs-string">        &#x27;ip_protocol&#x27;: &#x27;tcp&#x27;,</span><br><span class="hljs-string">        &#x27;from_port&#x27;: &#x27;143&#x27;,</span><br><span class="hljs-string">        &#x27;to_port&#x27;: &#x27;143&#x27;,</span><br><span class="hljs-string">    &#125;,</span><br><span class="hljs-string">    &#x27;ldap&#x27;: &#123;</span><br><span class="hljs-string">        &#x27;name&#x27;: &#x27;LDAP&#x27;,</span><br><span class="hljs-string">        &#x27;ip_protocol&#x27;: &#x27;tcp&#x27;,</span><br><span class="hljs-string">        &#x27;from_port&#x27;: &#x27;389&#x27;,</span><br><span class="hljs-string">        &#x27;to_port&#x27;: &#x27;389&#x27;,</span><br><span class="hljs-string">    &#125;,</span><br><span class="hljs-string">    &#x27;https&#x27;: &#123;</span><br><span class="hljs-string">        &#x27;name&#x27;: &#x27;HTTPS&#x27;,</span><br><span class="hljs-string">        &#x27;ip_protocol&#x27;: &#x27;tcp&#x27;,</span><br><span class="hljs-string">        &#x27;from_port&#x27;: &#x27;443&#x27;,</span><br><span class="hljs-string">        &#x27;to_port&#x27;: &#x27;443&#x27;,</span><br><span class="hljs-string">    &#125;,</span><br><span class="hljs-string">    &#x27;smtps&#x27;: &#123;</span><br><span class="hljs-string">        &#x27;name&#x27;: &#x27;SMTPS&#x27;,</span><br><span class="hljs-string">        &#x27;ip_protocol&#x27;: &#x27;tcp&#x27;,</span><br><span class="hljs-string">        &#x27;from_port&#x27;: &#x27;465&#x27;,</span><br><span class="hljs-string">        &#x27;to_port&#x27;: &#x27;465&#x27;,</span><br><span class="hljs-string">    &#125;,</span><br><span class="hljs-string">    &#x27;imaps&#x27;: &#123;</span><br><span class="hljs-string">        &#x27;name&#x27;: &#x27;IMAPS&#x27;,</span><br><span class="hljs-string">        &#x27;ip_protocol&#x27;: &#x27;tcp&#x27;,</span><br><span class="hljs-string">        &#x27;from_port&#x27;: &#x27;993&#x27;,</span><br><span class="hljs-string">        &#x27;to_port&#x27;: &#x27;993&#x27;,</span><br><span class="hljs-string">    &#125;,</span><br><span class="hljs-string">    &#x27;pop3s&#x27;: &#123;</span><br><span class="hljs-string">        &#x27;name&#x27;: &#x27;POP3S&#x27;,</span><br><span class="hljs-string">        &#x27;ip_protocol&#x27;: &#x27;tcp&#x27;,</span><br><span class="hljs-string">        &#x27;from_port&#x27;: &#x27;995&#x27;,</span><br><span class="hljs-string">        &#x27;to_port&#x27;: &#x27;995&#x27;,</span><br><span class="hljs-string">    &#125;,</span><br><span class="hljs-string">    &#x27;ms_sql&#x27;: &#123;</span><br><span class="hljs-string">        &#x27;name&#x27;: &#x27;MS SQL&#x27;,</span><br><span class="hljs-string">        &#x27;ip_protocol&#x27;: &#x27;tcp&#x27;,</span><br><span class="hljs-string">        &#x27;from_port&#x27;: &#x27;1433&#x27;,</span><br><span class="hljs-string">        &#x27;to_port&#x27;: &#x27;1433&#x27;,</span><br><span class="hljs-string">    &#125;,</span><br><span class="hljs-string">    &#x27;mysql&#x27;: &#123;</span><br><span class="hljs-string">        &#x27;name&#x27;: &#x27;MYSQL&#x27;,</span><br><span class="hljs-string">        &#x27;ip_protocol&#x27;: &#x27;tcp&#x27;,</span><br><span class="hljs-string">        &#x27;from_port&#x27;: &#x27;3306&#x27;,</span><br><span class="hljs-string">        &#x27;to_port&#x27;: &#x27;3306&#x27;,</span><br><span class="hljs-string">    &#125;,</span><br><span class="hljs-string">    &#x27;rdp&#x27;: &#123;</span><br><span class="hljs-string">        &#x27;name&#x27;: &#x27;RDP&#x27;,</span><br><span class="hljs-string">        &#x27;ip_protocol&#x27;: &#x27;tcp&#x27;,</span><br><span class="hljs-string">        &#x27;from_port&#x27;: &#x27;3389&#x27;,</span><br><span class="hljs-string">        &#x27;to_port&#x27;: &#x27;3389&#x27;,</span><br><span class="hljs-string">    &#125;,</span><br><span class="hljs-string">&#125;</span><br><span class="hljs-string">REST_API_REQUIRED_SETTINGS = [&#x27;OPENSTACK_HYPERVISOR_FEATURES&#x27;,</span><br><span class="hljs-string">                              &#x27;LAUNCH_INSTANCE_DEFAULTS&#x27;,</span><br><span class="hljs-string">                              &#x27;OPENSTACK_IMAGE_FORMATS&#x27;,</span><br><span class="hljs-string">                              &#x27;OPENSTACK_KEYSTONE_DEFAULT_DOMAIN&#x27;,</span><br><span class="hljs-string">                              &#x27;CREATE_IMAGE_DEFAULTS&#x27;,</span><br><span class="hljs-string">                              &#x27;ENFORCE_PASSWORD_CHECK&#x27;]</span><br><span class="hljs-string">ALLOWED_PRIVATE_SUBNET_CIDR = &#123;&#x27;ipv4&#x27;: [], &#x27;ipv6&#x27;: []&#125;</span><br><span class="hljs-string">EOF</span><br><br>sed -i <span class="hljs-string">&#x27;1i\WSGIApplicationGroup %&#123;GLOBAL&#125;&#x27;</span> /etc/httpd/conf.d/openstack-dashboard.conf<br>systemctl restart httpd.service memcached.service<br><br></code></pre></td></tr></table></figure><h5 id="执行-4"><a href="#执行-4" class="headerlink" title="执行"></a>执行</h5><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-built_in">cd</span><br>./openstack-dashboard-install.sh<br></code></pre></td></tr></table></figure><ul><li>安装云平台web管理界面，安装成功后通过浏览器访问，并使用admin登录dashboard。</li></ul><p><img src="https://i.ibb.co/KcN2pGD6/image-20260106114708548.png" alt="image-20260106114708548"></p><p><img src="https://i.ibb.co/twmfZCTL/image-20260106114734786.png" alt="image-20260106114734786"></p><h2 id="2-企业级应用系统集群部署与管理"><a href="#2-企业级应用系统集群部署与管理" class="headerlink" title="2.企业级应用系统集群部署与管理"></a>2.企业级应用系统集群部署与管理</h2><p>项目背景：</p><p>  现A公司需完成构建企业级网站集群项目，要求给出一个企业级中小规模网站集群的架构解决方案。</p><p>  要求整套架构从需求出发，以生产实战为标准，作出具体的IP地址规划、主机名规划、服务部署及目录结构规划等，并对每一个集群节点要部署的应用做细致设计，并最终完成整个项目的搭建。</p><p><img src="https://i.ibb.co/rRGP6B03/image-20260106093213833.png" alt="image-20260106093213833"></p><h3 id="1）节点IP地址及主机名规划"><a href="#1）节点IP地址及主机名规划" class="headerlink" title="1）节点IP地址及主机名规划"></a>1）节点IP地址及主机名规划</h3><p>对集群中各节点的IP地址、主机名，必要的域名、VIP等作出详细规划。（以表格形式呈现）</p><table><thead><tr><th>节点名称</th><th>IP 地址</th><th>角色说明</th><th>域名</th></tr></thead><tbody><tr><td><code>dns-ftp</code></td><td>172.16.19.101</td><td>DNS + FTP</td><td>-</td></tr><tr><td><code>web-apache</code></td><td>172.16.19.102</td><td>Apache HTTPS</td><td>web.zaxcloud.com, bbs.zaxcloud.com</td></tr><tr><td><code>lb</code></td><td>172.16.19.103</td><td>Nginx + Keepalived（主）</td><td>-</td></tr><tr><td><code>lb2</code></td><td>172.16.19.109</td><td>Nginx + Keepalived（备）</td><td>-</td></tr><tr><td><code>web1</code></td><td>172.16.19.104</td><td>LNMP Web 节点（权重 5）</td><td>-</td></tr><tr><td><code>web2-nfs</code></td><td>172.16.19.105</td><td>LNMP Web 节点 + NFS（权重 10）</td><td>-</td></tr><tr><td><code>db-master</code></td><td>172.16.19.106</td><td>MySQL 主库</td><td>-</td></tr><tr><td><code>db-slave</code></td><td>172.16.19.107</td><td>MySQL 从库</td><td>-</td></tr><tr><td><code>mycat</code></td><td>172.16.19.108</td><td>Mycat 中间件</td><td>-</td></tr><tr><td>VIP</td><td>172.16.19.100</td><td>虚拟 IP</td><td>wordpress.zaxcloud.com</td></tr></tbody></table><h3 id="2）完成集群服务器搭建"><a href="#2）完成集群服务器搭建" class="headerlink" title="2）完成集群服务器搭建"></a>2）完成集群服务器搭建</h3><p>要求给出详细的配置过程文档，包括配置代码，测试验证过程及结果返回截图。关于各服务器实现功能要求如下：</p><p>（1）为了实现域名解析，须构建一台DNS服务器，使用户可以通过域名访问apache服务器及LNMP web服务器集群。</p><p>（2）该公司为了实现文件的传输和资源共享，需要搭建一台FTP服务器，基于服务器的性能和安全考虑，不允许匿名用户登录并要求将登录用户锁定在自己的家目录中，服务器开启日志功能，设置无任何操作的超时时间为5分钟，设置数据连接的超时时间为10分钟，该FTP服务器允许的最大连接数为5000，每个IP地址允许与FTP服务器同时建立15个连接，限制本地用户所能使用的最大传输速度为512KB&#x2F;s。</p><p>（3）为了对外宣传，搭建一台web服务器，搭载公司门户网及论坛。分别申请的域名为web.A.com和bbs.A.com。该Web服务器只有一个IP地址。并要求通过https协议访问网站。</p><p>（4）部署高可用、具有负载均衡功能的LNMP web服务器集群，构建wordpress博客系统。后端数据库为主从复制、读写分离分布式架构，NFS服务器作为静态资源共享存储，在本例中，请将.&#x2F;wordpress&#x2F;wp-admin&#x2F;images目录存放在NFS共享目录中并共享给web服务器。两台LNMP web服务器权重分别为5和10。</p><h4 id="部署步骤"><a href="#部署步骤" class="headerlink" title="部署步骤"></a>部署步骤</h4><h5 id="基础配置"><a href="#基础配置" class="headerlink" title="基础配置"></a>基础配置</h5><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-comment"># 停止防火墙服务</span><br>systemctl stop firewalld<br><span class="hljs-comment"># 禁止防火墙开机自启</span><br>systemctl <span class="hljs-built_in">disable</span> firewalld<br><span class="hljs-comment">#临时关闭selinux</span><br>setenforce 0<br><span class="hljs-comment">#永久关闭</span><br>vim /etc/selinux/config<br>SELINUX=disabled <br><span class="hljs-comment">#或</span><br>sed -i <span class="hljs-string">&#x27;s/^SELINUX=.*/SELINUX=disabled/&#x27;</span> /etc/selinux/config<br><br><span class="hljs-comment">#配置yum源</span><br><span class="hljs-built_in">mv</span> /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup<br>curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo<br><br><span class="hljs-comment">#安装基础工具</span><br>yum install -y vim wget net-tools<br></code></pre></td></tr></table></figure><h5 id="DNS服务器部署"><a href="#DNS服务器部署" class="headerlink" title="DNS服务器部署"></a>DNS服务器部署</h5><ul><li>安装bind软件</li></ul><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">yum install <span class="hljs-built_in">bind</span> bind-utils -y<br></code></pre></td></tr></table></figure><ul><li>配置主要配置文件</li></ul><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><code class="hljs bash">vim /etc/named.conf<br><br>options &#123;<br>        listen-on port 53 &#123; any; &#125;;<br>        directory       <span class="hljs-string">&quot;/var/named&quot;</span>;<br>        allow-query     &#123; any; &#125;;<br></code></pre></td></tr></table></figure><p><img src="https://i.ibb.co/hFWwFXrB/image-20260107220155058.png" alt="image-20260107220155058"></p><ul><li>配置区域文件</li></ul><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><code class="hljs bash">vim /etc/named.rfc1912.zones<br><br>zone <span class="hljs-string">&quot;zaxcloud.com&quot;</span> IN &#123;<br>    <span class="hljs-built_in">type</span> master;<br>    file <span class="hljs-string">&quot;zaxcloud.com.zone&quot;</span>;<br>    allow-update &#123; none; &#125;;<br>&#125;;<br></code></pre></td></tr></table></figure><p><img src="https://i.ibb.co/v6kFPqw8/image-20260107214549827.png" alt="image-20260107214549827"></p><ul><li>创建正向解析文件</li></ul><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br></pre></td><td class="code"><pre><code class="hljs bash">vim /var/named/zaxcloud.com.zone<br><br><span class="hljs-variable">$TTL</span> 86400<br>@ IN SOA ns1.zaxcloud.com. admin.zaxcloud.com. (<br>    2023010101 ; Serial<br>    3600        ; Refresh<br>    1800        ; Retry<br>    604800      ; Expire<br>    86400       ; Minimum TTL<br>)<br>@ IN NS ns1.zaxcloud.com.<br>ns1 IN A 172.16.19.101<br>web IN A 172.16.19.102<br>bbs IN A 172.16.19.102<br>wordpress IN A 172.16.19.100<br></code></pre></td></tr></table></figure><p><img src="https://i.ibb.co/chvLLDQF/image-20260107215046664.png" alt="image-20260107215046664"></p><ul><li>启动服务</li></ul><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><code class="hljs bash">systemctl start named<br>systemctl <span class="hljs-built_in">enable</span> named<br></code></pre></td></tr></table></figure><h5 id="FTP服务器部署"><a href="#FTP服务器部署" class="headerlink" title="FTP服务器部署"></a>FTP服务器部署</h5><ul><li>安装vsftpd</li></ul><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">yum install vsftpd -y<br></code></pre></td></tr></table></figure><ul><li>配置FTP服务器</li></ul><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-built_in">mv</span> /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.bak<br><br>vim /etc/vsftpd/vsftpd.conf <br>anonymous_enable=NO<br><br><span class="hljs-comment">#无任何操作的超时</span><br>idle_session_timeout=300<br><span class="hljs-comment">#数据连接的超时时间</span><br>data_connection_timeout=600<br><span class="hljs-comment">#允许的最大连接数</span><br>max_clients=5000<br><span class="hljs-comment">#每个IP地址允许与FTP服务器同时建立</span><br>max_per_ip=15<br><span class="hljs-comment">#限制本地用户所能使用的最大传输速度</span><br>local_max_rate=524288<br></code></pre></td></tr></table></figure><p><img src="https://i.ibb.co/ynThkZjt/image-20260108144854550.png" alt="image-20260108144854550"></p><ul><li>创建虚拟用户设置权限</li></ul><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><code class="hljs bash">useradd -s /sbin/nologin -d /var/ftp/user1 user1<br>passwd user1<br><br><span class="hljs-built_in">mkdir</span> /var/ftp/user1<br><span class="hljs-built_in">touch</span> /var/ftp/user1/test.txt<br><span class="hljs-built_in">chown</span> -R user1:user1 /var/ftp/user1<br><span class="hljs-built_in">chmod</span> -R 755 /var/ftp/user1<br><br><span class="hljs-built_in">echo</span> <span class="hljs-string">&quot;/sbin/nologin&quot;</span> &gt;&gt; /etc/shells<br></code></pre></td></tr></table></figure><p><img src="https://i.ibb.co/nMcjcKHV/image-20260108153823681.png" alt="image-20260108153823681"></p><ul><li>启动服务</li></ul><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><code class="hljs bash">systemctl start vsftpd<br>systemctl <span class="hljs-built_in">enable</span> vsftpd<br>systemctl status vsftpd<br></code></pre></td></tr></table></figure><h5 id="web服务器"><a href="#web服务器" class="headerlink" title="web服务器"></a>web服务器</h5><ul><li>安装Apache</li></ul><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">yum install httpd mod_ssl -y<br></code></pre></td></tr></table></figure><h6 id="获取SSL证书"><a href="#获取SSL证书" class="headerlink" title="获取SSL证书"></a>获取SSL证书</h6><ul><li>CA配置</li></ul><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-comment"># 创建CA主目录及子目录（private存私钥、certs存证书、csr存请求文件、newcerts存签发后的证书副本）</span><br><span class="hljs-built_in">mkdir</span> -p ~/my_ca/&#123;private,certs,csr,newcerts&#125;<br><br><span class="hljs-comment"># 设置private目录权限为“仅当前用户可读/写”（私钥是敏感文件，必须限制权限）</span><br><span class="hljs-built_in">chmod</span> 700 ~/my_ca/private<br><br><span class="hljs-comment"># 初始化CA证书数据库（记录所有签发过的证书，后续可查询）</span><br><span class="hljs-built_in">touch</span> ~/my_ca/index.txt<br><br><span class="hljs-comment"># 初始化证书序列号（签发的第一个证书序号为01，后续自动递增）</span><br><span class="hljs-built_in">echo</span> 01 &gt; ~/my_ca/serial<br></code></pre></td></tr></table></figure><p><img src="https://i.ibb.co/B5Rcnxdr/image-20260108165319419.png" alt="image-20260108165319419"></p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-comment">#创建自签 CA 根证书</span><br><span class="hljs-comment">#生成 CA 根私钥</span><br>openssl genrsa -out my_ca/private/ca.key 2048<br><br><span class="hljs-comment">#生成 CA 自签根证书</span><br>openssl req -new -x509 -days 3650 -key my_ca/private/ca.key -out my_ca/certs/ca.crt<br><br>CN<br>sichuan<br>Chengdu<br>zaxcloud<br>CA<br>zaxcloud CA Root<br>admin@zaxcloud.com<br></code></pre></td></tr></table></figure><p><img src="https://i.ibb.co/ZpSz4w9K/image-20260108165829600.png" alt="image-20260108165829600"></p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-comment">#创建 CA 签发配置文件</span><br>vim my_ca/ca.cnf<br><br>[ca]<br>default_ca = myca  <span class="hljs-comment"># 指定默认CA配置段</span><br><br>[myca]<br><span class="hljs-built_in">dir</span> = /root/my_ca       <span class="hljs-comment"># CA工作目录</span><br>certs = <span class="hljs-variable">$dir</span>/certs  <span class="hljs-comment"># CA根证书存放路径</span><br>crl_dir = <span class="hljs-variable">$dir</span>/crl  <span class="hljs-comment"># 吊销列表存放路径（暂用不到）</span><br>database = <span class="hljs-variable">$dir</span>/index.txt  <span class="hljs-comment"># 证书数据库文件</span><br>new_certs_dir = <span class="hljs-variable">$dir</span>/newcerts  <span class="hljs-comment"># 签发后的证书副本存放路径</span><br>certificate = <span class="hljs-variable">$dir</span>/certs/ca.crt  <span class="hljs-comment"># CA根证书路径</span><br>serial = <span class="hljs-variable">$dir</span>/serial  <span class="hljs-comment"># 证书序列号文件</span><br>private_key = <span class="hljs-variable">$dir</span>/private/ca.key  <span class="hljs-comment"># CA私钥路径</span><br>RANDFILE = <span class="hljs-variable">$dir</span>/private/.rand  <span class="hljs-comment"># 随机数文件（自动生成）</span><br>default_days = 365  <span class="hljs-comment"># 签发的证书有效期（1年）</span><br>default_md = sha256  <span class="hljs-comment"># 哈希算法（安全标准）</span><br>policy = myca_policy  <span class="hljs-comment"># 证书信息匹配规则</span><br>x509_extensions = usr_cert  <span class="hljs-comment"># 证书扩展配置段（定义证书用途）</span><br><br>[myca_policy]<br>countryName = match  <span class="hljs-comment"># 要求域名证书的“国家”与CA根证书一致</span><br>stateOrProvinceName = match  <span class="hljs-comment"># 要求“省份”与CA根证书一致</span><br>organizationName = match  <span class="hljs-comment"># 要求“组织名”与CA根证书一致</span><br>organizationalUnitName = optional  <span class="hljs-comment"># “部门名”可选（可自定义）</span><br>commonName = supplied  <span class="hljs-comment"># 必须提供“通用名（域名）”</span><br>emailAddress = optional  <span class="hljs-comment"># “邮箱”可选</span><br><br>[usr_cert]<br>basicConstraints = CA:FALSE  <span class="hljs-comment"># 禁止该证书再签发其他证书（仅CA根证书可签发）</span><br>keyUsage = digitalSignature, keyEncipherment  <span class="hljs-comment"># 证书用途：数字签名、密钥加密</span><br>extendedKeyUsage = serverAuth  <span class="hljs-comment"># 扩展用途：服务器身份认证（HTTPS用）</span><br>subjectKeyIdentifier = <span class="hljs-built_in">hash</span>  <span class="hljs-comment"># 生成主题密钥标识</span><br>authorityKeyIdentifier = keyid,issuer  <span class="hljs-comment"># 生成颁发者密钥标识（关联CA根证书）</span><br></code></pre></td></tr></table></figure><ul><li>web.zaxcloud.com</li></ul><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-comment">#生成 web 域名的私钥</span><br>openssl genrsa -out ~/my_ca/private/web.zaxcloud.com.key 2048<br><br><span class="hljs-comment">#生成 web 域名的证书请求</span><br>openssl req -new -key ~/my_ca/private/web.zaxcloud.com.key -out ~/my_ca/csr/web.zaxcloud.com.csr<br><br><span class="hljs-comment">#前四个必须和ca保持一致</span><br>CN<br>sichuan<br>Chengdu<br>zaxcloud<br>web-service<br>web.zaxcloud.com<br>admin@zaxcloud.com<br></code></pre></td></tr></table></figure><p><img src="https://i.ibb.co/fbQrmNL/image-20260108171033516.png" alt="image-20260108171033516"></p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-comment">#用 CA 根证书签发 web 域名的正式证书</span><br>openssl ca -config ~/my_ca/ca.cnf -<span class="hljs-keyword">in</span> ~/my_ca/csr/web.zaxcloud.com.csr -out ~/my_ca/certs/web.zaxcloud.com.crt<br><br>y<br>y<br></code></pre></td></tr></table></figure><p><img src="https://i.ibb.co/My9B6Gk4/image-20260108171744186.png" alt="image-20260108171744186"></p><ul><li>bbs.zaxcloud.com</li></ul><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-comment">#生成 bbs 域名的私钥</span><br>openssl genrsa -out ~/my_ca/private/bbs.zaxcloud.com.key 2048<br><br><span class="hljs-comment">##生成 bbs 域名的证书请求</span><br>openssl req -new -key ~/my_ca/private/bbs.zaxcloud.com.key -out ~/my_ca/csr/bbs.zaxcloud.com.csr<br><br><span class="hljs-comment">#前四个必须和ca保持一致</span><br>CN<br>sichuan<br>Chengdu<br>zaxcloud<br>bbs-service<br>bbs.zaxcloud.com<br>admin@zaxcloud.com<br></code></pre></td></tr></table></figure><p><img src="https://i.ibb.co/zTdZYnb6/image-20260108172443751.png" alt="image-20260108172443751"></p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-comment">#用 CA 根证书签发 bbs 域名的正式证书</span><br>openssl ca -config ~/my_ca/ca.cnf -<span class="hljs-keyword">in</span> ~/my_ca/csr/bbs.zaxcloud.com.csr -out ~/my_ca/certs/bbs.zaxcloud.com.crt<br><br>y<br>y<br></code></pre></td></tr></table></figure><p><img src="https://i.ibb.co/JW0LLPY9/image-20260108172645999.png" alt="image-20260108172645999"></p><ul><li>移动证书</li></ul><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-built_in">mkdir</span> -pv /etc/httpd/ssl<br><span class="hljs-built_in">cp</span> ~/my_ca/certs/web.zaxcloud.com.crt /etc/httpd/ssl/<br><span class="hljs-built_in">cp</span> ~/my_ca/private/web.zaxcloud.com.key /etc/httpd/ssl/<br><span class="hljs-built_in">cp</span> ~/my_ca/certs/bbs.zaxcloud.com.crt /etc/httpd/ssl/<br><span class="hljs-built_in">cp</span> ~/my_ca/private/bbs.zaxcloud.com.key /etc/httpd/ssl/<br></code></pre></td></tr></table></figure><h6 id="配置虚拟主机"><a href="#配置虚拟主机" class="headerlink" title="配置虚拟主机"></a>配置虚拟主机</h6><ul><li>配置&#x2F;etc&#x2F;httpd&#x2F;conf.d&#x2F;web.conf</li></ul><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br></pre></td><td class="code"><pre><code class="hljs bash">vim /etc/httpd/conf.d/web.conf<br><br>&lt;VirtualHost *:80&gt;<br>    ServerName web.zaxcloud.com<br>    Redirect permanent / https://web.zaxcloud.com/<br>&lt;/VirtualHost&gt;<br><br>&lt;VirtualHost *:443&gt;<br>    ServerName web.zaxcloud.com<br>    DocumentRoot <span class="hljs-string">&quot;/var/www/html/web&quot;</span><br>    SSLEngine on<br>    SSLCertificateFile <span class="hljs-string">&quot;/etc/httpd/ssl/web.zaxcloud.com.crt&quot;</span><br>    SSLCertificateKeyFile <span class="hljs-string">&quot;/etc/httpd/ssl/web.zaxcloud.com.key&quot;</span><br>&lt;/VirtualHost&gt;<br><br>&lt;VirtualHost *:80&gt;<br>    ServerName bbs.zaxcloud.com<br>    Redirect permanent / https://bbs.zaxcloud.com/<br>&lt;/VirtualHost&gt;<br><br>&lt;VirtualHost *:443&gt;<br>    ServerName bbs.zaxcloud.com<br>    DocumentRoot <span class="hljs-string">&quot;/var/www/html/bbs&quot;</span><br>    SSLEngine on<br>    SSLCertificateFile <span class="hljs-string">&quot;/etc/httpd/ssl/bbs.zaxcloud.com.crt&quot;</span><br>    SSLCertificateKeyFile <span class="hljs-string">&quot;/etc/httpd/ssl/bbs.zaxcloud.com.key&quot;</span><br>&lt;/VirtualHost&gt;<br></code></pre></td></tr></table></figure><p><img src="https://i.ibb.co/k6wRH1Ct/image-20260108173611183.png" alt="image-20260108173611183"></p><ul><li>搭建门户网站</li></ul><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-built_in">mkdir</span> /var/www/html/web <br><span class="hljs-comment">#修改主配置文件的目录和索引文件</span><br>vim /etc/httpd/conf/httpd.conf<br><br>systemctl start httpd<br>systemctl <span class="hljs-built_in">enable</span> httpd<br>systemctl status httpd<br></code></pre></td></tr></table></figure><p><img src="https://i.ibb.co/MDzN5xGn/image-20260108174650297.png" alt="image-20260108174650297"></p><p><img src="https://i.ibb.co/1G8yg6n2/image-20260108174659509.png" alt="image-20260108174659509"></p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-comment">#网上随便下载一个静态网站上传到/var/www/html/web</span><br><span class="hljs-built_in">ls</span> /var/www/html/web/<br></code></pre></td></tr></table></figure><p><img src="https://i.ibb.co/RTKHZ0Gd/image-20260108180535095.png" alt="image-20260108180535095"></p><ul><li>搭建论坛网站</li></ul><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-comment">#安装需要的服务</span><br>yum install -y php php-mysql mariadb mariadb-server<br><br>systemctl start mariadb<br>systemctl <span class="hljs-built_in">enable</span> mariadb<br><span class="hljs-comment">#初始化数据库</span><br>mysql_secure_installation<br>y<br>n<br>y<br>y<br><span class="hljs-comment">#设置数据库权限</span><br>mysql -uroot  -p000000<br>grant all privileges on *.* to root@<span class="hljs-string">&#x27;%&#x27;</span> identified by <span class="hljs-string">&quot;000000&quot;</span>; <br>flush privileges; <br></code></pre></td></tr></table></figure><p><img src="https://i.ibb.co/bj9qbpvb/image-20260108181940831.png" alt="image-20260108181940831"></p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-comment">#创建网站目录，并设置权限 </span><br><span class="hljs-built_in">mkdir</span> /var/www/html/bbs<br><span class="hljs-built_in">cd</span> /var/www/html/bbs<br><span class="hljs-comment">#上传 解压文件</span><br>yum install -y unzip<br>unzip lamp-Discuz_X3.4_SC_GBK_20191201.zip<br><span class="hljs-built_in">cp</span> -r upload/* . <br><span class="hljs-built_in">chmod</span> -R 777 /var/www/html/bbs<br>systemctl restart httpd<br></code></pre></td></tr></table></figure><p><img src="https://i.ibb.co/zHsTwWJy/image-20260108183335352.png" alt="image-20260108183335352"></p><p><img src="https://i.ibb.co/k2q51605/image-20260108183508227.png" alt="image-20260108183508227"></p><p><img src="https://i.ibb.co/rLWRnrz/image-20260108183653821.png" alt="image-20260108183653821"></p><p><img src="https://i.ibb.co/jv2PKydz/image-20260108183742257.png" alt="image-20260108183742257"></p><h5 id="nfs服务器"><a href="#nfs服务器" class="headerlink" title="nfs服务器"></a>nfs服务器</h5><ul><li>安装nfs</li></ul><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">yum install nfs-utils rpcbind -y<br></code></pre></td></tr></table></figure><ul><li>配置共享目录</li></ul><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-built_in">mkdir</span> -p /usr/share/nginx/html/wordpress/wp-admin/images<br></code></pre></td></tr></table></figure><ul><li>编辑&#x2F;etc&#x2F;exports</li></ul><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><code class="hljs bash">vim /etc/exports<br><br>/usr/share/nginx/html/wordpress *(rw,<span class="hljs-built_in">sync</span>,no_subtree_check)<br></code></pre></td></tr></table></figure><p><img src="https://i.ibb.co/Q7PMPqYJ/image-20260108194453258.png" alt="image-20260108194453258"></p><ul><li>启动服务</li></ul><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><code class="hljs bash">systemctl start rpcbind<br>systemctl start nfs-server<br>systemctl <span class="hljs-built_in">enable</span> rpcbind<br>systemctl <span class="hljs-built_in">enable</span> nfs-server<br><br><span class="hljs-comment"># 刷新NFS配置  </span><br>exportfs -a  <br>exportfs -rv<br></code></pre></td></tr></table></figure><h5 id="mysql主从"><a href="#mysql主从" class="headerlink" title="mysql主从"></a>mysql主从</h5><ul><li>基础配置</li></ul><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-comment"># 关闭防火墙</span><br>systemctl stop firewalld<br>systemctl <span class="hljs-built_in">disable</span> firewalld<br><br><span class="hljs-comment"># 关闭SELinux</span><br>sed -i <span class="hljs-string">&#x27;s/SELINUX=enforcing/SELINUX=disabled/&#x27;</span> /etc/selinux/config<br>setenforce 0<br></code></pre></td></tr></table></figure><ul><li>添加hosts文件</li></ul><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-built_in">echo</span> -e <span class="hljs-string">&quot;172.16.19.106    db-master\n172.16.19.107    db-slave\n172.16.19.108    mycat&quot;</span> | <span class="hljs-built_in">sudo</span> <span class="hljs-built_in">tee</span> -a /etc/hosts &gt; /dev/null<br></code></pre></td></tr></table></figure><ul><li>安装服务</li></ul><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">yum install -y mariadb mariadb-server <br></code></pre></td></tr></table></figure><ul><li>初始化数据库</li></ul><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><code class="hljs bash">systemctl start mariadb<br>systemctl <span class="hljs-built_in">enable</span> mariadb<br>mysql_secure_installation <br><span class="hljs-comment">#回车&gt; y &gt;输入密码&gt; y n y y </span><br></code></pre></td></tr></table></figure><p><img src="https://i.ibb.co/Q71QZTNR/image-20260108211108420.png" alt="image-20260108211108420"></p><ul><li>配置主从库</li></ul><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-comment">#主库的基础配置</span><br>vim /etc/my.cnf <br>server-id=106<br>log-bin=mysql-bin<br>binlog-format=ROW<br>innodb_file_per_table=1<br>character-set-server=utf8<br><br><span class="hljs-comment">#从库也是相同的操作了id改成自己ip的主机数</span><br>vim /etc/my.cnf<br><br>server-id=107<br>relay-log=mysqld-relay-bin<br>log-slave-updates=1<br>read-only=1<br>innodb_file_per_table=1<br>character-set-server=utf8<br><span class="hljs-comment">#两台都重新启动</span><br>systemctl restart mariadb<br></code></pre></td></tr></table></figure><p><img src="https://i.ibb.co/HTdQFhFC/image-20260108212603696.png" alt="image-20260108212603696"></p><ul><li>开放主从库的权限</li></ul><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><code class="hljs bash">mysql -uroot -p000000<br><span class="hljs-comment">#授权在任何都可以 root 用户登录到数据库(两台)</span><br>grant all privileges on *.* to root@<span class="hljs-string">&#x27;%&#x27;</span> identified by <span class="hljs-string">&#x27;000000&#x27;</span>; <br><span class="hljs-comment">#主库还有创建一个供从库连接的账号</span><br>-- 创建新复制用户<br>CREATE USER <span class="hljs-string">&#x27;user1&#x27;</span>@<span class="hljs-string">&#x27;%&#x27;</span> IDENTIFIED BY <span class="hljs-string">&#x27;000000&#x27;</span>;<br>-- 授予复制权限<br>GRANT ALL PRIVILEGES ON wordpress.* TO <span class="hljs-string">&#x27;user1&#x27;</span>@<span class="hljs-string">&#x27;%&#x27;</span> IDENTIFIED BY <span class="hljs-string">&#x27;000000&#x27;</span>;<br><br>FLUSH PRIVILEGES;<br></code></pre></td></tr></table></figure><ul><li>同步节点</li></ul><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-comment">#主库查看File 和 Position值</span><br>SHOW MASTER STATUS;<br><br>mariadb-bin.000001 |      245<br></code></pre></td></tr></table></figure><p><img src="https://i.ibb.co/YB0PVNC6/image-20260108214048110.png" alt="image-20260108214048110"></p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-comment">#从库执行</span><br>CHANGE MASTER TO<br>  MASTER_HOST=<span class="hljs-string">&#x27;db-master&#x27;</span>,<br>  MASTER_USER=<span class="hljs-string">&#x27;user1&#x27;</span>,<br>  MASTER_PASSWORD=<span class="hljs-string">&#x27;000000&#x27;</span>,<br>  MASTER_LOG_FILE=<span class="hljs-string">&#x27;mysql-bin.000001&#x27;</span>,<br>  MASTER_LOG_POS=682; <br> <br> -- 启动同步<br>START SLAVE;<br><br>-- 检查状态<br>SHOW SLAVE STATUS\G<br></code></pre></td></tr></table></figure><p><img src="https://i.ibb.co/NnFV0rHz/image-20260108214317353.png" alt="image-20260108214317353"></p><p><img src="https://i.ibb.co/zHVfTxkG/image-20260109201752954.png" alt="image-20260109201752954"></p><h5 id="Mycat读写分离"><a href="#Mycat读写分离" class="headerlink" title="Mycat读写分离"></a>Mycat读写分离</h5><ul><li>安装mycat服务</li></ul><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-comment"># Mycat需要Java环境</span><br>yum install -y java java-devel   <br>yum install -y mariadb-server mariadb<br><br><span class="hljs-comment">#添加hosts内容</span><br><span class="hljs-built_in">echo</span> -e <span class="hljs-string">&quot;172.16.19.106    db-master\n172.16.19.107    db-slave\n172.16.19.108    mycat&quot;</span> | <span class="hljs-built_in">sudo</span> <span class="hljs-built_in">tee</span> -a /etc/hosts &gt; /dev/null<br><br><span class="hljs-comment">#上传安装包并解压</span><br>tar -zxvf Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz -C /usr/local/<br><br><span class="hljs-comment">#更改权限</span><br><span class="hljs-built_in">chown</span> -R 777 /usr/local/mycat/<br><br><span class="hljs-comment">#添加系统变量</span><br><span class="hljs-built_in">echo</span> <span class="hljs-built_in">export</span> MYCAT_HOME=/usr/local/mycat/ &gt;&gt; /etc/profile<br><span class="hljs-built_in">source</span> /etc/profile<br></code></pre></td></tr></table></figure><p><img src="https://i.ibb.co/TxcCMLfs/image-20260109202644967.png" alt="image-20260109202644967"></p><ul><li>编写逻辑库配置文件</li></ul><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-built_in">cp</span> /usr/local/mycat/conf/schema.xml /usr/local/mycat/conf/schema.xml.bak<br><br><span class="hljs-built_in">cat</span> &gt;/usr/local/mycat/conf/schema.xml &lt;&lt; <span class="hljs-string">EOF</span><br><span class="hljs-string">&lt;?xml version=&quot;1.0&quot;?&gt;</span><br><span class="hljs-string">&lt;!DOCTYPE mycat:schema SYSTEM &quot;schema.dtd&quot;&gt;</span><br><span class="hljs-string">&lt;mycat:schema xmlns:mycat=&quot;http://io.mycat/&quot;&gt;</span><br><span class="hljs-string">    &lt;!-- WordPress 逻辑数据库 --&gt;</span><br><span class="hljs-string">    &lt;schema name=&quot;wordpress&quot; checkSQLschema=&quot;false&quot; sqlMaxLimit=&quot;100&quot;&gt;</span><br><span class="hljs-string">        &lt;!-- % 匹配所有表，路由到同一节点（小站点最优） --&gt;</span><br><span class="hljs-string">        &lt;table name=&quot;wp_%&quot; dataNode=&quot;dn_wordpress&quot; autoIncrement=&quot;true&quot; /&gt;</span><br><span class="hljs-string">    &lt;/schema&gt;</span><br><span class="hljs-string"></span><br><span class="hljs-string">    &lt;!-- 数据节点配置 --&gt;</span><br><span class="hljs-string">    &lt;dataNode name=&quot;dn_wordpress&quot; dataHost=&quot;host_wordpress&quot; database=&quot;wordpress&quot;/&gt;</span><br><span class="hljs-string"></span><br><span class="hljs-string">    &lt;!-- 数据主机配置（读写分离：正确格式） --&gt;</span><br><span class="hljs-string">    &lt;dataHost name=&quot;host_wordpress&quot; maxCon=&quot;1000&quot; minCon=&quot;10&quot; balance=&quot;1&quot;</span><br><span class="hljs-string">              writeType=&quot;0&quot; dbType=&quot;mysql&quot; dbDriver=&quot;native&quot;&gt;</span><br><span class="hljs-string">        &lt;heartbeat&gt;select user()&lt;/heartbeat&gt;</span><br><span class="hljs-string">        &lt;!-- 主库：writeHost（写请求路由到这里） --&gt;</span><br><span class="hljs-string">        &lt;writeHost host=&quot;master&quot; url=&quot;db-master:3306&quot; user=&quot;root&quot; password=&quot;000000&quot;&gt;</span><br><span class="hljs-string">            &lt;!-- 从库：readHost（嵌套在 writeHost 内，读请求路由到这里） --&gt;</span><br><span class="hljs-string">            &lt;readHost host=&quot;slave&quot; url=&quot;db-slave:3306&quot; user=&quot;root&quot; password=&quot;000000&quot;/&gt;</span><br><span class="hljs-string">        &lt;/writeHost&gt;</span><br><span class="hljs-string">    &lt;/dataHost&gt;</span><br><span class="hljs-string">&lt;/mycat:schema&gt;</span><br><span class="hljs-string">EOF</span><br></code></pre></td></tr></table></figure><p><img src="https://i.ibb.co/bgPR9p32/image-20260109204642387.png" alt="image-20260109204642387"></p><ul><li>主库创建 WordPress 数据库</li></ul><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><code class="hljs bash">CREATE DATABASE wordpress;<br>FLUSH PRIVILEGES;<br></code></pre></td></tr></table></figure><p><img src="https://i.ibb.co/Xf9WGRHM/image-20260109205157193.png" alt="image-20260109205157193"></p><ul><li>mycat的访问用户(server.xml)</li></ul><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br></pre></td><td class="code"><pre><code class="hljs bash">vim /usr/local/mycat/conf/server.xml<br><span class="hljs-comment">#找到 &lt;root&gt; 标签段落，改动密码和数据库</span><br>&lt;user name=<span class="hljs-string">&quot;root&quot;</span>&gt;<br>                &lt;property name=<span class="hljs-string">&quot;password&quot;</span>&gt;000000&lt;/property&gt;<br>                &lt;property name=<span class="hljs-string">&quot;schemas&quot;</span>&gt;wordpress&lt;/property&gt;<br><br><br><span class="hljs-comment">#找到 &lt;user&gt; 标签段落，改成wp-config.php中一样的</span><br>&lt;user name=<span class="hljs-string">&quot;user1&quot;</span>&gt; &lt;!-- 这里的name要和wp-config.php里的DB_USER一致 --&gt;<br>    &lt;property name=<span class="hljs-string">&quot;password&quot;</span>&gt;000000&lt;/property&gt; &lt;!-- 这里的password要和wp-config.php里的DB_PASSWORD一致 --&gt;<br>    &lt;property name=<span class="hljs-string">&quot;schemas&quot;</span>&gt;wordpress&lt;/property&gt; &lt;!-- 这里的schemas要和schema.xml里定义的逻辑库名一致 --&gt;<br>&lt;/user&gt;<br></code></pre></td></tr></table></figure><p><img src="https://i.ibb.co/qq1fx5d/image-20260109205947522.png" alt="image-20260109205947522"></p><ul><li>启动mycat</li></ul><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><code class="hljs bash">/bin/bash  /usr/local/mycat/bin/mycat start<br><br><span class="hljs-comment"># 检查启动状态</span><br>netstat -ntlp | grep 8066  <span class="hljs-comment"># Mycat默认端口</span><br></code></pre></td></tr></table></figure><p><img src="https://i.ibb.co/V0q2PrBG/image-20260109213552891.png" alt="image-20260109213552891"></p><h5 id="lb"><a href="#lb" class="headerlink" title="lb"></a>lb</h5><ul><li>安装服务</li></ul><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><code class="hljs bash">curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo<br>yum install nginx keepalived -y<br></code></pre></td></tr></table></figure><ul><li>配置 Nginx 负载均衡</li></ul><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br></pre></td><td class="code"><pre><code class="hljs bash">vim /etc/nginx/nginx.conf<br><br>upstream wordpress &#123;<br>    server 172.16.19.104 weight=5;<br>    server 172.16.19.105 weight=10;<br>&#125;<br><br>server &#123;<br>    listen 80;<br>    server_name wordpress.zaxcloud.com;<br><br>    location / &#123;<br>        proxy_pass http://wordpress;<br>        proxy_set_header Host <span class="hljs-variable">$host</span>;<br>        proxy_set_header X-Real-IP <span class="hljs-variable">$remote_addr</span>;<br>        proxy_set_header X-Forwarded-For <span class="hljs-variable">$proxy_add_x_forwarded_for</span>;<br>    &#125;<br>&#125;<br></code></pre></td></tr></table></figure><p><img src="https://i.ibb.co/TxSz3XTK/image-20260109222735942.png" alt="image-20260109222735942"></p><ul><li>配置 Keepalived 高可用（上面配置完可以在复制一台改为lb2）</li></ul><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br></pre></td><td class="code"><pre><code class="hljs bash">vim /etc/keepalived/keepalived.conf<br><span class="hljs-comment">#lb修改配置文件同有以下内容</span><br>vrrp_instance VI_1 &#123;<br>    state MASTER  <span class="hljs-comment"># 主节点为 MASTER，备节点为 BACKUP</span><br>    interface ens33  <span class="hljs-comment"># 替换成你服务器实际的网卡名（用 ip addr 查看）</span><br>    virtual_router_id 51  <span class="hljs-comment"># 虚拟路由 ID，主备节点必须相同（范围 0-255）</span><br>    priority 100  <span class="hljs-comment"># 优先级，主节点数值高于备节点（如备节点设为 90）</span><br>    advert_int 1  <span class="hljs-comment"># VRRP 通告间隔，1秒</span><br><br>    <span class="hljs-comment"># 认证配置（主备节点必须一致）</span><br>    authentication &#123;<br>        auth_type PASS<br>        auth_pass 1111<br>    &#125;<br><br>    <span class="hljs-comment"># 虚拟 IP（VIP），必须指定，且是未被占用的 IP，主备节点一致</span><br>    virtual_ipaddress &#123;<br>        172.16.19.100/24 dev ens33  <span class="hljs-comment"># 替换成你的网段和网卡名</span><br>    &#125;<br>&#125;<br><br><span class="hljs-comment">#lb2</span><br>vrrp_instance VI_1 &#123;<br>    state BACKUP<br>    interface eth33<br>    virtual_router_id 51<br>    priority 50<br>    advert_int 1<br>    authentication &#123;<br>        auth_type PASS<br>        auth_pass 1111<br>    &#125;<br>    virtual_ipaddress &#123;<br>        172.16.19.100/24 dev ens33<br>    &#125;<br>&#125;<br></code></pre></td></tr></table></figure><p><img src="https://i.ibb.co/gLcF9jR7/image-20260110101139606.png" alt="image-20260110101139606"></p><ul><li>启动服务</li></ul><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><code class="hljs bash">systemctl start nginx keepalived<br>systemctl <span class="hljs-built_in">enable</span> nginx keepalived<br></code></pre></td></tr></table></figure><p><img src="https://i.ibb.co/rfHpncr7/image-20260110101304572.png" alt="image-20260110101304572"></p><h5 id="web1和web2-nfs"><a href="#web1和web2-nfs" class="headerlink" title="web1和web2-nfs"></a>web1和web2-nfs</h5><h6 id="WordPress"><a href="#WordPress" class="headerlink" title="WordPress"></a>WordPress</h6><ul><li>安装LNMP环境</li></ul><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-comment">#安装Nginx、PHP-FPM、MySQL客户端</span><br>curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo<br>yum install -y nginx php-fpm php-mysqlnd<br><br><span class="hljs-comment"># 启动并设置开机自启</span><br>systemctl start nginx php-fpm<br>systemctl <span class="hljs-built_in">enable</span> nginx php-fpm<br></code></pre></td></tr></table></figure><p><img src="https://i.ibb.co/B2GJZsCW/image-20260110105533029.png" alt="image-20260110105533029"></p><ul><li>配置Nginx虚拟主机</li></ul><figure class="highlight php"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br></pre></td><td class="code"><pre><code class="hljs php">vim /etc/nginx/conf.d/wordpress.conf<br><br>server &#123;<br>    listen <span class="hljs-number">80</span>;<br>    server_name wordpress.zaxcloud.com;<br><br>    root /usr/share/nginx/html/wordpress;<br>    index index.php index.html index.htm;<br><br>    access_log /<span class="hljs-keyword">var</span>/log/nginx/wordpress_access.log;<br>    error_log /<span class="hljs-keyword">var</span>/log/nginx/wordpress_error.log;<br><br>    location / &#123;<br>        try_files <span class="hljs-variable">$uri</span> <span class="hljs-variable">$uri</span>/ /index.php?<span class="hljs-variable">$args</span>;<br>    &#125;<br><br>    location ~ \.php$ &#123;<br>        fastcgi_pass <span class="hljs-number">127.0</span>.<span class="hljs-number">0.1</span>:<span class="hljs-number">9000</span>;<br>        fastcgi_index index.php;<br>        fastcgi_param SCRIPT_FILENAME <span class="hljs-variable">$document</span>_root<span class="hljs-variable">$fastcgi_script_name</span>;<br>        <span class="hljs-keyword">include</span> fastcgi_params;<br>        <br>        <span class="hljs-comment"># PHP性能调优参数</span><br>        fastcgi_buffer_size <span class="hljs-number">128</span>k;<br>        fastcgi_buffers <span class="hljs-number">4</span> <span class="hljs-number">256</span>k;<br>        fastcgi_busy_buffers_size <span class="hljs-number">256</span>k;<br>        fastcgi_temp_file_write_size <span class="hljs-number">256</span>k;<br>        fastcgi_intercept_errors on;<br>    &#125;<br><br>    <span class="hljs-comment"># 静态资源缓存设置（可选）</span><br>    location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ &#123;<br>        expires <span class="hljs-number">7</span>d;<br>        add_header Cache-Control <span class="hljs-string">&quot;public, no-transform&quot;</span>;<br>    &#125; <br>&#125;<br></code></pre></td></tr></table></figure><p><img src="https://i.ibb.co/216J5fNp/image-20260110110842754.png" alt="image-20260110110842754"></p><ul><li>配置PHP-FPM</li></ul><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><code class="hljs bash">vim /etc/php-fpm.d/www.conf<br><span class="hljs-comment">#把user和group改成nginx</span><br></code></pre></td></tr></table></figure><p><img src="https://i.ibb.co/yBZZSqgL/image-20260110111323274.png" alt="image-20260110111323274"></p><ul><li>安装WordPress网站</li></ul><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-comment">#创建目录</span><br><span class="hljs-built_in">mkdir</span> -p /usr/share/nginx/html/wordpress  <br><span class="hljs-built_in">chown</span> -R nginx:nginx /usr/share/nginx/html/wordpress<br><span class="hljs-built_in">cd</span> /usr/share/nginx/html/wordpress<br><span class="hljs-comment">#上传后解压给予权限</span><br>tar -zxvf lnmp-wordpress-5.0.3-zh_CN.tar.gz <br><span class="hljs-built_in">mv</span> wordpress/* . <br><span class="hljs-built_in">chmod</span> -R 777  /usr/share/nginx/html/wordpress<br></code></pre></td></tr></table></figure><p><img src="https://i.ibb.co/ym8P4hXQ/image-20260110112340367.png" alt="image-20260110112340367"></p><ul><li>修改WordPress配置文件 wp-config.php</li></ul><figure class="highlight php"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br></pre></td><td class="code"><pre><code class="hljs php">cp  /usr/share/nginx/html/wordpress/wp-config-sample.php /usr/share/nginx/html/wordpress/wp-config.php<br><br>vim /usr/share/nginx/html/wordpress/wp-config.php<br><span class="hljs-comment">#要适配配置数据库当时设置的</span><br><br><span class="hljs-comment">/** 数据库名称 */</span>  <br><span class="hljs-title function_ invoke__">define</span>(<span class="hljs-string">&#x27;DB_NAME&#x27;</span>, <span class="hljs-string">&#x27;wordpress&#x27;</span>);  <br><br><span class="hljs-comment">/** 数据库用户名 */</span>  <br><span class="hljs-title function_ invoke__">define</span>(<span class="hljs-string">&#x27;DB_USER&#x27;</span>, <span class="hljs-string">&#x27;user1&#x27;</span>);  <br><br><span class="hljs-comment">/** 数据库密码 */</span>  <br><span class="hljs-title function_ invoke__">define</span>(<span class="hljs-string">&#x27;DB_PASSWORD&#x27;</span>, <span class="hljs-string">&#x27;000000&#x27;</span>);  <br><br><span class="hljs-comment">/** 数据库主机 */</span>  <br><span class="hljs-title function_ invoke__">define</span>(<span class="hljs-string">&#x27;DB_HOST&#x27;</span>, <span class="hljs-string">&#x27;172.16.19.108:8066&#x27;</span>); <span class="hljs-comment">// 指向Mycat中间件IP  </span><br><br><span class="hljs-comment">/** 数据库编码 */</span>  <br><span class="hljs-title function_ invoke__">define</span>(<span class="hljs-string">&#x27;DB_CHARSET&#x27;</span>, <span class="hljs-string">&#x27;utf8&#x27;</span>);  <br><br>systemctl restart nginx php-fpm<br></code></pre></td></tr></table></figure><p><img src="https://i.ibb.co/FbkN8wfQ/image-20260110113512661.png" alt="image-20260110113512661"></p><h5 id="nfs服务器-1"><a href="#nfs服务器-1" class="headerlink" title="nfs服务器"></a>nfs服务器</h5><ul><li>安装nfs</li></ul><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">yum install nfs-utils rpcbind -y<br></code></pre></td></tr></table></figure><ul><li>配置共享目录</li></ul><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-comment">#已有可以不创建</span><br><span class="hljs-built_in">mkdir</span> -p /usr/share/nginx/html/wordpress/wp-admin/images<br></code></pre></td></tr></table></figure><ul><li>编辑&#x2F;etc&#x2F;exports</li></ul><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><code class="hljs bash">vim /etc/exports<br><br>/usr/share/nginx/html/wordpress *(rw,<span class="hljs-built_in">sync</span>,no_subtree_check)<br></code></pre></td></tr></table></figure><p><img src="https://i.ibb.co/Q7PMPqYJ/image-20260108194453258.png" alt="image-20260108194453258"></p><ul><li>启动服务</li></ul><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><code class="hljs bash">systemctl start rpcbind<br>systemctl start nfs-server<br>systemctl <span class="hljs-built_in">enable</span> rpcbind<br>systemctl <span class="hljs-built_in">enable</span> nfs-server<br><br><span class="hljs-comment"># 刷新NFS配置  </span><br>exportfs -a  <br>exportfs -rv<br></code></pre></td></tr></table></figure><h6 id="nfs配置"><a href="#nfs配置" class="headerlink" title="nfs配置"></a>nfs配置</h6><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-comment">#必须在location ～ \.php$之前定义此规则</span><br><br><span class="hljs-comment">#配置web2-nfs的Nginx</span><br>vim /etc/nginx/conf.d/wordpress.conf<br><br>    location ~ ^/wp-admin/images/(.+)$ &#123;<br>        <span class="hljs-built_in">alias</span> /usr/share/nginx/html/wordpress/wp-admin/images/<span class="hljs-variable">$1</span>;<br>        add_header X-Content-Type-Options nosniff;<br>        add_header X-Frame-Options SAMEORIGIN;<br>    &#125;<br></code></pre></td></tr></table></figure><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-comment">#重启服务</span><br>systemctl restart nginx php-fpm<br></code></pre></td></tr></table></figure><h5 id="wordpress安装"><a href="#wordpress安装" class="headerlink" title="wordpress安装"></a>wordpress安装</h5><ul><li>web2-nfs</li></ul><p><img src="https://i.ibb.co/wrsH1vzT/image-20260110121156685.png" alt="image-20260110121156685"></p><p>先把wp-config.php文件中的数据库主机改成主库，创建成功后改回来</p><p><img src="https://i.ibb.co/CK8PmNp2/image-20260110135312103.png" alt="image-20260110135312103"></p><h4 id="测试"><a href="#测试" class="headerlink" title="测试"></a>测试</h4><h5 id="dns"><a href="#dns" class="headerlink" title="dns"></a>dns</h5><p><img src="https://i.ibb.co/7m5YxYD/image-20260110142330494.png" alt="image-20260110142330494"></p><h5 id="ftp"><a href="#ftp" class="headerlink" title="ftp"></a>ftp</h5><ul><li>匿名用户登录</li></ul><p><img src="https://i.ibb.co/rR1DLW27/image-20260108142022323.png" alt="image-20260108142022323"></p><ul><li>测试上传、下载、创建目录权限(win)</li></ul><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><code class="hljs bash">ftp 172.16.19.101<br><br><span class="hljs-built_in">pwd</span><br><span class="hljs-built_in">mkdir</span> <span class="hljs-built_in">test</span><br>put D:\test11.txt<br><span class="hljs-built_in">ls</span><br>get test.txt<br></code></pre></td></tr></table></figure><p><img src="https://i.ibb.co/rG0mPh79/image-20260108152333258.png" alt="image-20260108152333258"></p><h5 id="web"><a href="#web" class="headerlink" title="web"></a>web</h5><ul><li>web.zaxcloud.com站点</li></ul><p><img src="https://i.ibb.co/V0QcYzmg/image-20260108180056731.png" alt="image-20260108180056731"></p><ul><li>bbs.zaxcloud.com站点</li></ul><p><img src="https://i.ibb.co/jv2PKydz/image-20260108183742257.png" alt="image-20260108183742257"></p><h5 id="lnmp"><a href="#lnmp" class="headerlink" title="lnmp"></a>lnmp</h5><ul><li>读写分离</li></ul><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">mysql -h127.0.0.1 -P9066 -uuser1 -p000000 -e <span class="hljs-string">&quot;show @@datasource;&quot;</span><br></code></pre></td></tr></table></figure><p><img src="https://i.ibb.co/JW7x3hXV/image-20260110142751658.png" alt="image-20260110142751658"></p><ul><li>wordpress.zaxcloud.com站点</li></ul><p><img src="https://i.ibb.co/xqXvC6yD/image-20260110142202068.png" alt="image-20260110142202068"></p>]]>
    </content>
    <id>https://netguy6.github.io/2026/02/05/%E4%BA%91%E8%AE%A1%E7%AE%97%E5%B9%B3%E5%8F%B0%E8%BF%90%E7%BB%B4%E4%B8%8E%E5%BA%94%E7%94%A8/</id>
    <link href="https://netguy6.github.io/2026/02/05/%E4%BA%91%E8%AE%A1%E7%AE%97%E5%B9%B3%E5%8F%B0%E8%BF%90%E7%BB%B4%E4%B8%8E%E5%BA%94%E7%94%A8/"/>
    <published>2026-02-04T16:00:00.000Z</published>
    <summary>云计算平台运维与应用课程实践笔记，覆盖 OpenStack Keystone 等组件。</summary>
    <title>云计算平台运维与应用</title>
    <updated>2026-08-13T11:06:31.140Z</updated>
  </entry>
</feed>
