mirror of
https://gitee.com/huanghongxun/HMCL-docs.git
synced 2026-03-19 08:15:26 +08:00
150 lines
34 KiB
HTML
150 lines
34 KiB
HTML
<!doctype html><html lang="zh" class="no-js"><head><meta charset="utf-8"><title>配置客户端自动更新 (Nginx) - HMCL 文档</title><meta name="description" content="本文介绍了如何使用 Nginx 服务器配置客户端自动更新"><meta property="og:type" content="article"><meta property="og:locale" content="zh"><meta property="og:site_name" content="HMCL 文档"><meta property="og:title" content="配置客户端自动更新 (Nginx)"><meta property="og:url" content="https://docs.hmcl.net/modpack/serverpack3.html"><meta property="og:description" content="本文介绍了如何使用 Nginx 服务器配置客户端自动更新"><meta property="article:published_time" content="2023-01-11T14:13:45+08:00"><link rel="canonical" href="https://docs.hmcl.net/modpack/serverpack3.html"><link href="/feed.xml" type="application/atom+xml" rel="alternate" title="HMCL 文档 Feed"><meta name="viewport" content="width=device-width, initial-scale=1.0"> <script> document.documentElement.className = document.documentElement.className.replace(/\bno-js\b/g, '') + ' js '; window.enable_copy_code_button = true; </script><link rel="stylesheet" href="/assets/css/main.css"><link rel="stylesheet" href="/assets/lib/fontawesome/css/all.min.css"> <noscript><link rel="stylesheet" href="/assets/lib/fontawesome/css/all.min.css"></noscript> <script src="/assets/js/settings.js"></script> <script src="/assets/js/theme.js"></script><link rel="shortcut icon" href="/favicon.ico"><link rel="stylesheet" id="skin"></head><body class="layout--document" dir="ltr"><nav class="skip-links"><ul><li><a href="#site-nav" class="screen-reader-shortcut">转到主导航栏</a></li><li><a href="#main" class="screen-reader-shortcut">转到内容</a></li><li><a href="#footer" class="screen-reader-shortcut">转到底部</a></li></ul></nav><div class="masthead"><div class="masthead__inner-wrap"><div class="masthead__menu"><nav id="site-nav" class="greedy-nav"> <a class="site-logo" href="/"><img src="/assets/img/hmcl.png" alt="HMCL 文档"></a> <a class="site-title" href="/"> HMCL 文档 </a><ul class="visible-links"><li class="masthead__menu-item"> <a href="/settings.html" >设置</a></li></ul><button class="greedy-nav__toggle hidden" type="button"> <span class="visually-hidden">切换菜单</span><div class="navicon"></div></button><ul class="hidden-links hidden"></ul></nav></div></div></div><div class="initial-content"><div id="main" role="main"><div class="sidebar sticky"><nav class="nav__list"> <input id="ac-toc" name="accordion-toc" type="checkbox" /> <label for="ac-toc">切换菜单</label><ul class="nav__items"><li> <span class="nav__sub-title">问题集合</span><ul><li><a href="/faq.html">常见问题</a></li><li><a href="/launcher/">启动器使用相关</a></li><li><a href="/modpack/">整合包帮助</a></li><li><a href="/multiplayer/">多人联机帮助</a></li></ul></li><li> <span class="nav__sub-title">使用者帮助</span><ul><li><a href="/launcher/isolation.html">版本隔离</a></li><li><a href="/launcher/offline-skin.html">设置离线皮肤</a></li><li><a href="/launcher/auto-installing.html">HMCL 的自动安装使用教程</a></li><li><a href="/launcher/shader.html">安装光影</a></li><li><a href="/launcher/set-item-details.html">设置项详解</a></li></ul></li><li> <span class="nav__sub-title">开发者帮助</span><ul><li><a href="/launcher/datapack.html">制作 HMCL 格式的数据包</a></li><li><a href="/modpack/serverpack.html">制作整合包</a></li><li><a href="/launcher/authlib-injector.html">添加默认 authlib-injector 验证服务器</a></li></ul></li><li> <span class="nav__sub-title">更新日志</span><ul><li><a href="/changelog/stable.html">稳定版</a></li><li><a href="/changelog/dev.html">开发版</a></li></ul></li><li> <span class="nav__sub-title">其他</span><ul><li><a href="/eula/hmcl.html">用户协议</a></li><li><a href="/contribution.html">贡献指南</a></li><li><a href="https://hmcl.huangyuhui.net">项目官网</a></li><li><a href="https://github.com/HMCL-dev/HMCL">项目仓库</a></li><li><a href="https://github.com/HMCL-dev/HMCL-docs">文档仓库</a></li></ul></li></ul></nav></div><article class="page" itemscope itemtype="https://schema.org/CreativeWork"><meta itemprop="headline" content="配置客户端自动更新 (Nginx)"><meta itemprop="description" content="本文介绍了如何使用 Nginx 服务器配置客户端自动更新"><meta itemprop="datePublished" content="2023-01-11T14:13:45+08:00"><div class="page__inner-wrap"><header><h1 id="page-title" class="page__title" itemprop="headline"> <a href="https://docs.hmcl.net/modpack/serverpack3.html" itemprop="url">配置客户端自动更新 (Nginx) </a></h1></header><section class="page__content" itemprop="text"><aside class="sidebar__right sticky"><nav class="toc"><header><h4 class="nav__title"><i class="fas fa-file-alt"></i> 目录</h4></header><ul class="toc__menu"><li><a href="#前置知识">前置知识</a></li><li><a href="#nginx-安装">Nginx 安装</a></li><li><a href="#新建静态资源文件夹">新建静态资源文件夹</a></li><li><a href="#分配次级域名可选">分配次级域名(可选)</a></li><li><a href="#配置-nginxconf">配置 nginx.conf</a></li><li><a href="#导出整合包">导出整合包</a></li><li><a href="#上传整合包到静态资源服务器">上传整合包到静态资源服务器</a></li><li><a href="#客户端初始化">客户端初始化</a></li><li><a href="#更新客户端">更新客户端</a></li><li><a href="#参考资料">参考资料</a></li></ul></nav></aside><img src="https://hits.zkitefly.eu.org/?tag=https%3A%2F%2Fdocs.hmcl.net%2Fmodpack%2Fserverpack3.html" alt="Hits" decoding="async"><div class="notice--info"><p>本文由 buggzd 创建。</p></div><blockquote><p>阅读本文前,请先阅读<a href="/modpack/serverpack.html">此文章</a></p></blockquote><h1 id="前置知识">前置知识</h1><p>阅读本文你需要具有以下知识储备:</p><ol><li>掌握基础本的 <code class="language-plaintext highlighter-rouge">linux</code> 命令操作,比如 <code class="language-plaintext highlighter-rouge">cd</code> <code class="language-plaintext highlighter-rouge">ls</code> 等</li><li>拥有一个 <code class="language-plaintext highlighter-rouge">linux</code> 服务器(好像不算知识)</li></ol><h1 id="nginx-安装">Nginx 安装</h1><p>这里很基础(但是坑比较多)略过,可以看以下参考文档。</p><blockquote><p>https://zhuanlan.zhihu.com/p/515069497</p></blockquote><h1 id="新建静态资源文件夹">新建静态资源文件夹</h1><p>我为了省事直接在/根目录下新建了一个 <code class="language-plaintext highlighter-rouge">MinecraftClientStatic</code> 文件夹,以后需要作为静态资源的文件都丢这里面。</p><p>命令:</p><div class="language-shell highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c"># 到更目录</span>
|
||
<span class="nb">cd</span> /
|
||
<span class="c"># 新建文件夹</span>
|
||
<span class="nb">mkdir </span>MinecraftClientStatic
|
||
<span class="c"># 防止nginx无法访问,配置文件夹访问权限</span>
|
||
<span class="nb">chmod </span>777 MinecraftClientStatic
|
||
<span class="c"># 进入文件夹</span>
|
||
<span class="nb">cd </span>MinecraftClientStatic
|
||
<span class="c"># 新建一个测试用的文件</span>
|
||
<span class="nb">touch </span>helloMC.html
|
||
<span class="c"># 给文件权限</span>
|
||
<span class="nb">chmod </span>777 helloMC.html
|
||
<span class="c"># 编辑html内容</span>
|
||
vim helloMC.html
|
||
</code></pre></div></div><p>这里为了测试静态资源是否配置成功,需要新建一个 <code class="language-plaintext highlighter-rouge">helloMC.html</code> 的静态测试文件,可以在这个文件内随意写两行字。</p><p>例如:</p><div class="language-html highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c"><!-- helloMC.html --></span>
|
||
<span class="nt"><h1></span>hello static!<span class="nt"></h1></span>
|
||
</code></pre></div></div><p>也可以整点炫的(可选):</p><div class="language-html highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c"><!-- helloMC.html --></span>
|
||
<span class="cp"><!DOCTYPE html></span>
|
||
<span class="nt"><html></span>
|
||
<span class="nt"><head></span>
|
||
<span class="nt"><meta</span> <span class="na">charset=</span><span class="s">"UTF-8"</span><span class="nt">></span>
|
||
<span class="nt"><title></span>MC客户端静态资源<span class="nt"></title></span>
|
||
<span class="nt"><meta</span> <span class="na">name=</span><span class="s">"viewport"</span> <span class="na">content=</span><span class="s">"width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no"</span> <span class="nt">/></span>
|
||
<span class="nt"><style></span>
|
||
<span class="k">@font-face</span><span class="p">{</span>
|
||
<span class="nl">font-family</span><span class="p">:</span><span class="s2">'calligraffittiregular'</span><span class="p">;</span>
|
||
<span class="nl">src</span><span class="p">:</span><span class="nf">url</span><span class="p">(</span><span class="s1">"fonts/calligraffitti-regular-webfont.ttf"</span><span class="p">)</span>
|
||
<span class="p">}</span>
|
||
|
||
<span class="o">*</span> <span class="p">{</span>
|
||
<span class="nl">margin</span><span class="p">:</span> <span class="m">0</span><span class="p">;</span>
|
||
<span class="nl">padding</span><span class="p">:</span> <span class="m">0</span><span class="p">;</span>
|
||
<span class="p">}</span>
|
||
|
||
<span class="nt">body</span> <span class="p">{</span>
|
||
<span class="nl">overflow</span><span class="p">:</span> <span class="nb">hidden</span><span class="p">;</span>
|
||
<span class="p">}</span>
|
||
|
||
<span class="nf">#content</span><span class="p">{</span>
|
||
<span class="nl">position</span><span class="p">:</span> <span class="nb">absolute</span><span class="p">;</span>
|
||
<span class="nl">color</span><span class="p">:</span> <span class="nx">white</span><span class="p">;</span>
|
||
<span class="nl">top</span><span class="p">:</span> <span class="m">30%</span><span class="p">;</span>
|
||
<span class="nl">left</span><span class="p">:</span> <span class="m">50%</span><span class="p">;</span>
|
||
<span class="nl">margin-left</span><span class="p">:</span> <span class="m">-121px</span><span class="p">;</span>
|
||
<span class="p">}</span>
|
||
|
||
<span class="nt">p</span><span class="p">{</span>
|
||
<span class="nl">font-family</span><span class="p">:</span> <span class="n">calligraffittiregular</span>
|
||
<span class="p">}</span>
|
||
|
||
<span class="nt"></style></span>
|
||
<span class="nt"></head></span>
|
||
|
||
<span class="nt"><body></span>
|
||
<span class="nt"><div</span> <span class="na">id=</span><span class="s">"content"</span><span class="nt">></span>
|
||
<span class="nt"><p</span> <span class="na">style=</span><span class="s">"font-size: 40px;font-weight: 1000;"</span><span class="nt">></span>MinecraftClientStatic<span class="nt"></p></span>
|
||
<span class="nt"></div></span>
|
||
<span class="nt"><canvas</span> <span class="na">id=</span><span class="s">"hacker"</span> <span class="na">style=</span><span class="s">"width:100%;height:100%;"</span><span class="nt">></span>请使用最新的浏览器<span class="nt"></canvas></span>
|
||
<span class="nt"></body></span>
|
||
|
||
<span class="nt"></html></span>
|
||
<span class="nt"><script </span><span class="na">type=</span><span class="s">"text/javascript"</span><span class="nt">></span>
|
||
<span class="nb">window</span><span class="p">.</span><span class="nx">onload</span> <span class="o">=</span> <span class="kd">function</span><span class="p">()</span> <span class="p">{</span>
|
||
<span class="kd">var</span> <span class="nx">color_array</span> <span class="o">=</span> <span class="p">[</span><span class="dl">'</span><span class="s1">#00FF00</span><span class="dl">'</span><span class="p">,</span><span class="dl">'</span><span class="s1">#00FF99</span><span class="dl">'</span><span class="p">,</span><span class="dl">'</span><span class="s1">#00FFCC</span><span class="dl">'</span><span class="p">,</span><span class="dl">'</span><span class="s1">#00FFFF</span><span class="dl">'</span><span class="p">,</span><span class="dl">'</span><span class="s1">#00BBFF</span><span class="dl">'</span><span class="p">,</span><span class="dl">'</span><span class="s1">#0066FF</span><span class="dl">'</span><span class="p">,</span><span class="dl">'</span><span class="s1">#0000FF</span><span class="dl">'</span><span class="p">,</span><span class="dl">'</span><span class="s1">#5500FF</span><span class="dl">'</span><span class="p">,</span><span class="dl">'</span><span class="s1">#7700FF</span><span class="dl">'</span><span class="p">,</span><span class="dl">'</span><span class="s1">#9900FF</span><span class="dl">'</span><span class="p">,</span><span class="dl">'</span><span class="s1">#CC00FF</span><span class="dl">'</span><span class="p">,</span><span class="dl">'</span><span class="s1">#FF00FF</span><span class="dl">'</span><span class="p">];</span>
|
||
<span class="kd">var</span> <span class="nx">i</span><span class="o">=</span><span class="mi">0</span><span class="p">;</span>
|
||
<span class="kd">var</span> <span class="nx">color</span><span class="p">;</span>
|
||
<span class="kd">function</span> <span class="nf">changColor</span><span class="p">()</span> <span class="p">{</span>
|
||
<span class="nx">color</span> <span class="o">=</span> <span class="nx">color_array</span><span class="p">[</span><span class="nx">i</span><span class="p">];</span>
|
||
<span class="nx">console</span><span class="p">.</span><span class="nf">log</span><span class="p">(</span><span class="nx">i</span><span class="o">++</span><span class="p">);</span>
|
||
<span class="nx">console</span><span class="p">.</span><span class="nf">log</span><span class="p">(</span><span class="nx">color</span><span class="p">);</span>
|
||
<span class="k">if</span><span class="p">(</span><span class="nx">i</span><span class="o">></span><span class="nx">color_array</span><span class="p">.</span><span class="nx">length</span><span class="o">-</span><span class="mi">1</span><span class="p">){</span>
|
||
<span class="nx">i</span><span class="o">=</span><span class="mi">0</span><span class="p">;</span>
|
||
<span class="p">}</span>
|
||
<span class="nf">setTimeout</span><span class="p">(</span><span class="nx">changColor</span><span class="p">,</span> <span class="mi">2000</span><span class="p">);</span>
|
||
<span class="p">}</span>
|
||
|
||
<span class="kd">var</span> <span class="nx">hacker</span> <span class="o">=</span> <span class="nb">document</span><span class="p">.</span><span class="nf">getElementById</span><span class="p">(</span><span class="dl">"</span><span class="s2">hacker</span><span class="dl">"</span><span class="p">);</span>
|
||
<span class="kd">var</span> <span class="nx">width</span> <span class="o">=</span> <span class="nx">hacker</span><span class="p">.</span><span class="nx">width</span> <span class="o">=</span> <span class="nx">screen</span><span class="p">.</span><span class="nx">width</span><span class="p">;</span>
|
||
<span class="kd">var</span> <span class="nx">height</span> <span class="o">=</span> <span class="nx">hacker</span><span class="p">.</span><span class="nx">height</span> <span class="o">=</span> <span class="nx">screen</span><span class="p">.</span><span class="nx">height</span><span class="p">;</span>
|
||
<span class="kd">var</span> <span class="nx">ctx</span> <span class="o">=</span> <span class="nx">hacker</span><span class="p">.</span><span class="nf">getContext</span><span class="p">(</span><span class="dl">'</span><span class="s1">2d</span><span class="dl">'</span><span class="p">);</span>
|
||
<span class="kd">var</span> <span class="nx">num</span> <span class="o">=</span> <span class="nb">Math</span><span class="p">.</span><span class="nf">ceil</span><span class="p">(</span><span class="nx">width</span> <span class="o">/</span> <span class="mi">12</span><span class="p">);</span>
|
||
<span class="kd">var</span> <span class="nx">y</span> <span class="o">=</span> <span class="nc">Array</span><span class="p">(</span><span class="nx">num</span><span class="p">).</span><span class="nf">join</span><span class="p">(</span><span class="mi">0</span><span class="p">).</span><span class="nf">split</span><span class="p">(</span><span class="dl">''</span><span class="p">);</span>
|
||
<span class="kd">var</span> <span class="nx">draw</span> <span class="o">=</span> <span class="kd">function</span><span class="p">()</span> <span class="p">{</span>
|
||
<span class="nx">ctx</span><span class="p">.</span><span class="nx">fillStyle</span> <span class="o">=</span> <span class="dl">'</span><span class="s1">rgba(0,0,0,.05)</span><span class="dl">'</span><span class="p">;</span>
|
||
<span class="nx">ctx</span><span class="p">.</span><span class="nf">fillRect</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="nx">width</span><span class="p">,</span> <span class="nx">height</span><span class="p">);</span>
|
||
<span class="nx">ctx</span><span class="p">.</span><span class="nx">fillStyle</span> <span class="o">=</span> <span class="nx">color</span><span class="p">;</span>
|
||
<span class="nx">ctx</span><span class="p">.</span><span class="nx">font</span> <span class="o">=</span> <span class="dl">'</span><span class="s1">12px Microsoft YaHei</span><span class="dl">'</span><span class="p">;</span>
|
||
<span class="nx">y</span><span class="p">.</span><span class="nf">map</span><span class="p">(</span><span class="kd">function</span><span class="p">(</span><span class="nx">y1</span><span class="p">,</span><span class="nx">i</span><span class="p">){</span>
|
||
<span class="kd">var</span> <span class="nx">text</span> <span class="o">=</span> <span class="nb">String</span><span class="p">.</span><span class="nf">fromCharCode</span><span class="p">(</span><span class="mi">65</span> <span class="o">+</span> <span class="nb">Math</span><span class="p">.</span><span class="nf">random</span><span class="p">()</span> <span class="o">*</span> <span class="mi">62</span><span class="p">);</span>
|
||
<span class="kd">var</span> <span class="nx">x</span> <span class="o">=</span> <span class="nx">i</span> <span class="o">*</span> <span class="mi">12</span><span class="p">;</span>
|
||
<span class="kd">var</span> <span class="nx">y1</span> <span class="o">=</span> <span class="nx">y</span><span class="p">[</span><span class="nx">i</span><span class="p">];</span>
|
||
<span class="nx">ctx</span><span class="p">.</span><span class="nf">fillText</span><span class="p">(</span><span class="nx">text</span><span class="p">,</span> <span class="nx">x</span><span class="p">,</span> <span class="nx">y1</span><span class="p">);</span>
|
||
<span class="nx">y</span><span class="p">[</span><span class="nx">i</span><span class="p">]</span> <span class="o">=</span> <span class="p">(</span> <span class="nx">y1</span> <span class="o">></span> <span class="nb">Math</span><span class="p">.</span><span class="nf">random</span><span class="p">()</span> <span class="o">*</span> <span class="mi">10</span> <span class="o">*</span> <span class="nx">height</span> <span class="p">?</span> <span class="mi">0</span> <span class="p">:</span> <span class="nf">parseInt</span><span class="p">(</span><span class="nx">y</span><span class="p">[</span><span class="nx">i</span><span class="p">])</span> <span class="o">+</span> <span class="mi">12</span> <span class="p">);</span>
|
||
<span class="p">})</span>
|
||
<span class="p">}</span>
|
||
|
||
<span class="nc">Run</span><span class="p">();</span>
|
||
|
||
<span class="kd">function</span> <span class="nf">Run</span><span class="p">()</span> <span class="p">{</span>
|
||
<span class="nf">changColor</span><span class="p">();</span>
|
||
<span class="nx">Game_Interval</span> <span class="o">=</span> <span class="nf">setInterval</span><span class="p">(</span><span class="nx">draw</span><span class="p">,</span> <span class="mi">50</span><span class="p">);</span>
|
||
<span class="p">}</span>
|
||
<span class="p">}</span>
|
||
<span class="nt"></script></span>
|
||
</code></pre></div></div><h1 id="分配次级域名可选">分配次级域名(可选)</h1><blockquote><p>如果你没有域名,那么这里可以跳过,后面需要域名的地方直接使用服务器ip地址</p></blockquote><p><strong>假设我们的域名是</strong> <code class="language-plaintext highlighter-rouge">buggzd.com</code></p><p>在域名解析新建一个 <code class="language-plaintext highlighter-rouge">A</code> 记录(地址为 <code class="language-plaintext highlighter-rouge">ipv6</code> 时应使用 <code class="language-plaintext highlighter-rouge">AAAA</code> 记录),此处以 <code class="language-plaintext highlighter-rouge">minecraft.buggzd.com</code> 为例,配置记录名称为 <code class="language-plaintext highlighter-rouge">minecraft</code> 配置记录地址为服务器地址,如下图所示。</p><p><img src="https://s2.loli.net/2023/01/11/8V1thbsZWgd6qxp.png" alt="image.png"></p><p>这是我们就有了一个子域名 <code class="language-plaintext highlighter-rouge">minecraft.buggzd.com</code> 添加完成后可以使用 <code class="language-plaintext highlighter-rouge">cmd</code> 去 <code class="language-plaintext highlighter-rouge">ping</code> 一下这个域名<code class="language-plaintext highlighter-rouge">minecraft.buggzd.com</code> 如果返回了正确的ip地址就是已经分配成功了。</p><div class="language-shell highlighter-rouge"><div class="highlight"><pre class="highlight"><code>ping minecraft.buggzd.com
|
||
</code></pre></div></div><h1 id="配置-nginxconf">配置 nginx.conf</h1><p>查找 <code class="language-plaintext highlighter-rouge">nginx</code> 配置文件目录:(如果这里没有 <code class="language-plaintext highlighter-rouge">nginx</code> 指令,那么说明你 <code class="language-plaintext highlighter-rouge">nginx</code> 安装没有成功)</p><div class="language-shell highlighter-rouge"><div class="highlight"><pre class="highlight"><code>nginx <span class="nt">-t</span>
|
||
</code></pre></div></div><p>输出</p><div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
|
||
</code></pre></div></div><p>这里 <code class="language-plaintext highlighter-rouge">/etc/nginx/nginx.conf</code> 就是 <code class="language-plaintext highlighter-rouge">Nginx</code> 配置文件的路径,然后 <code class="language-plaintext highlighter-rouge">cd</code> 到 <code class="language-plaintext highlighter-rouge">nginx</code> 配置目录。</p><div class="language-shell highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nb">cd</span> /etc/nginx
|
||
<span class="c"># 编写配置文件</span>
|
||
vim nginx.conf
|
||
</code></pre></div></div><p>因为之前配置过博客反向代理 <code class="language-plaintext highlighter-rouge">nginx.conf</code> 会带有之前的配置记录不要把他们搞乱,<strong>理清层级关系很重要</strong>!</p><div class="language-conf highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c"># 这是 nginx.conf 的层级目录
|
||
# 每个 nginx.conf 配置文件都只有一个 http 块,所以如果之前配置过 nginx
|
||
# 就只需要粘贴 server 块里的内容,把 server 块放到 http 块内部。
|
||
</span><span class="n">http</span> {
|
||
<span class="n">server</span> { ... }
|
||
<span class="n">server</span> { ... }
|
||
<span class="n">server</span> { ... }
|
||
}
|
||
</code></pre></div></div><p>需要填写的配置:</p><div class="language-conf highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">http</span> {
|
||
<span class="n">server</span> {
|
||
<span class="c"># 需要监听的端口号,可以不动
|
||
</span> <span class="n">listen</span> <span class="m">80</span>;
|
||
<span class="c"># 这里需要把localhost改为上面分配好的域名
|
||
</span> <span class="n">server_name</span> <span class="n">minecraft</span>.<span class="n">buggzd</span>.<span class="n">com</span>;
|
||
<span class="n">location</span> / {
|
||
<span class="c"># root后面是对应的静态资源文件夹的位置
|
||
</span> <span class="n">root</span> /<span class="n">MinecraftClientStatic</span>;
|
||
<span class="c"># 这里是默认加载的首页 html ,这里放的是刚刚新建的测试文件
|
||
</span> <span class="c"># 它是从 root 目录文件夹内开始查找的,所以不要写 /MinecraftClientStatic/helloMC.html
|
||
</span> <span class="n">index</span> <span class="n">helloMC</span>.<span class="n">html</span>;
|
||
}
|
||
}
|
||
}
|
||
</code></pre></div></div><blockquote><p>Q:上面的配置干了什么事?<br> A:比如你访问 <code class="language-plaintext highlighter-rouge">http://minecraft.buggzd.com/test.png</code> 时,<code class="language-plaintext highlighter-rouge">nginx</code> 会访问本地的 <code class="language-plaintext highlighter-rouge">/MinecraftClientStatic/test.png</code> 然后返回。</p></blockquote><p>当正确编写完 <code class="language-plaintext highlighter-rouge">nginx.conf</code> 需要让 <code class="language-plaintext highlighter-rouge">nginx</code> 重新加载一下配置文件。</p><div class="language-shell highlighter-rouge"><div class="highlight"><pre class="highlight"><code>nginx <span class="nt">-s</span> reload
|
||
</code></pre></div></div><p>然后直接访问刚刚配置的域名 <code class="language-plaintext highlighter-rouge">minecraft.buggzd.com</code> 默认会跳转到编写好的 <code class="language-plaintext highlighter-rouge">helloMC.html</code> 页面,你也可以访问 <code class="language-plaintext highlighter-rouge">http://minecraft.buggzd.com/helloMC.html</code></p><p><img src="https://s2.loli.net/2023/01/11/oAx4X1aDE3J6sup.png" alt="image.png"></p><p>当页面出现 <code class="language-plaintext highlighter-rouge">helloMC.html</code> 的内容时,说明已经配置成功了! 放张图片到静态资源文件夹试试。</p><p><img src="https://s2.loli.net/2023/01/11/UCdr8tgq2EVDnP7.png" alt="image.png"></p><p>访问成功,没问题!</p><h1 id="导出整合包">导出整合包</h1><p><img src="https://s2.loli.net/2023/01/11/JwLryPXjdU8HEKo.png" alt="image.png"></p><p>选择服务器自动更新整合包</p><p><img src="https://s2.loli.net/2023/01/11/Yr2e5N1qXAuMiIx.png" alt="image.png"></p><p><strong>整合包下载链接前缀</strong>:填静态资源服务器的地址。 我们需要先去静态资源文件夹下新建一个 <code class="language-plaintext highlighter-rouge">modepack</code> 文件夹(也就是 <code class="language-plaintext highlighter-rouge">/MinecraftClientStatic/modepack</code>)</p><div class="language-shell highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nb">cd</span> /MinecraftClientStatic
|
||
<span class="nb">mkdir </span>modepack
|
||
</code></pre></div></div><p>然后整合包下载链接前缀这里填写 <code class="language-plaintext highlighter-rouge">http://minecraft.buggzd.com/modepack</code></p><p><img src="https://s2.loli.net/2023/01/11/PQfCEkdVAoqm1Ru.png" alt="image.png"></p><h1 id="上传整合包到静态资源服务器">上传整合包到静态资源服务器</h1><p>假设我们刚刚打包的整合包名称为 <code class="language-plaintext highlighter-rouge">client1.0.zip</code> 我们把 <code class="language-plaintext highlighter-rouge">client1.0.zip</code> 通过 <code class="language-plaintext highlighter-rouge">ftp</code> 上传到服务器中,然后使用解压命令将这个整合包解压到 <code class="language-plaintext highlighter-rouge">/MinecraftClientStatic/modepack</code> 文件夹中。</p><div class="language-shell highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c"># 假设我们把client1.0.zip上传到了/home/ftp文件夹中</span>
|
||
<span class="c"># 把 /home/ftp/client1.0.zip 解压到 /minecraftClientStatic/modepack</span>
|
||
unzip /home/ftp/client1.0.zip <span class="nt">-d</span> /minecraftClientStatic/modepack
|
||
</code></pre></div></div><p>解压完以后我们查看一下</p><div class="language-shell highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nb">ls</span> /minecraftClientStatic/modepack
|
||
</code></pre></div></div><p>服务器返回:</p><div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>overrides server-manifest.json
|
||
</code></pre></div></div><p>其中 <code class="language-plaintext highlighter-rouge">overrides</code> 是一个文件夹 <code class="language-plaintext highlighter-rouge">server-manifest.json</code> 是整合包配置文件。</p><h1 id="客户端初始化">客户端初始化</h1><p>第一次使用客户端需要在一个空文件夹以 <code class="language-plaintext highlighter-rouge">newClientPackage</code> 为例,在文件夹中放一个 <code class="language-plaintext highlighter-rouge">hmcl</code> 启动器,打开 <code class="language-plaintext highlighter-rouge">hmcl</code> 导入刚刚做好的 <code class="language-plaintext highlighter-rouge">client1.0.zip</code> 整合包。 然后就可以把这个文件夹 <code class="language-plaintext highlighter-rouge">newClientPackage</code> 打包成一个 <code class="language-plaintext highlighter-rouge">zip</code> 发给玩家了,以后玩家每次打开 <code class="language-plaintext highlighter-rouge">hmcl</code> 登录时,启动器就会自动向静态资源服务器中查询整合包配置信息,当发现更新时会自动下载。 当缺少 <code class="language-plaintext highlighter-rouge">mod</code> 时会自动下载静态资源服务器上的 <code class="language-plaintext highlighter-rouge">mod</code></p><p><img src="https://s2.loli.net/2023/01/11/WpD4Xm7i561YbIj.png" alt="image.png"></p><h1 id="更新客户端">更新客户端</h1><p>目前HMCL版本更新的步骤是这样的:</p><ol><li>启动器对比本地的 <code class="language-plaintext highlighter-rouge">mod</code> 和服务器的 <code class="language-plaintext highlighter-rouge">mod</code> 名称,如发现本地不存在的 <code class="language-plaintext highlighter-rouge">mod</code> 则会从服务器上下载。</li><li>当 <code class="language-plaintext highlighter-rouge">mod</code> 的名称相同时,启动器会继续对比文件 <code class="language-plaintext highlighter-rouge">MD5</code> 哈希值,如果不匹配则重新下载。</li><li>在获得更新的时启动器会对比一次本地的文件,如果旧版本的模组在新版本中消失了,启动器会自动将本地的这个模组删除。</li><li>非远端服务器更新资源不会被更新删除,换句话说就是如果是玩家自己魔改整合包,往里面放的 <code class="language-plaintext highlighter-rouge">mod</code> 是不会被删除的。</li></ol><p>当想要添加新的 <code class="language-plaintext highlighter-rouge">mod</code> 时需要在添加之后重新导出整合包如 <code class="language-plaintext highlighter-rouge">client2.0.zip</code> 导出的整合包版本号增加,然后重新上传整合包到静态资源服务器。</p><div class="language-shell highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nb">cd</span> /minecraftClientStatic
|
||
<span class="c"># 建议直接删除该目录然后重新新建</span>
|
||
<span class="nb">rm </span>modepack <span class="nt">-R</span>
|
||
<span class="c"># 重新新建modepack文件夹</span>
|
||
<span class="nb">mkdir </span>modepack
|
||
<span class="c"># 解压新的客户端整合包</span>
|
||
unzip /home/ftp/client2.0.zip <span class="nt">-d</span> /minecraftClientStatic/modepack
|
||
</code></pre></div></div><p>玩家启动 <code class="language-plaintext highlighter-rouge">hmcl</code> 后,启动器会检测到版本更新并自动更新模组。</p><h1 id="参考资料">参考资料</h1><ul><li><a href="https://blog.csdn.net/pibuliao8626/article/details/110449349">nginx配置文件结构</a></li><li><a href="https://www.muzhuangnet.com/show/86630.html">使用nginx如何部署静态资源</a></li><li><a href="https://zhuanlan.zhihu.com/p/514547633">Nginx 作为静态资源服务器</a></li><li><a href="https://cloud.tencent.com/developer/article/2028983">nginx配置静态静态资源服务器</a></li><li><a href="https://hmcl.huangyuhui.net/help/launcher/serverpack.html">HMCL官方文章</a></li><li><a href="https://www.kdocs.cn/l/ck0hwms5llq8">使用Gitee作为静态资源服务器</a></li><li><a href="https://buggzd.github.io/2023/01/11/Nginx%E9%9D%99%E6%80%81%E8%B5%84%E6%BA%90%E6%9C%8D%E5%8A%A1%E5%99%A8%E4%BD%BF%E7%94%A8/">Nginx配置静态资源服务器</a></li></ul></section><footer class="page__meta"><p class="page__date"><strong><i class="fas fa-fw fa-calendar-alt" aria-hidden="true"></i> 更新时间:</strong> <time class="dt-published" datetime="2023-01-11T14:13:45+08:00">2023-01-11</time></p></footer><nav class="pagination"> <a href="/modpack/bundled-java.html" class="pagination--pager" title="整合包自带 Java 教程">上一页</a> <a href="/modpack/error-handbook.html" class="pagination--pager" title="模组包报错排查手册">下一页</a></nav></div></article></div></div><div id="footer" class="page__footer"><footer><div class="page__footer-follow"><ul class="social-icons"><li><strong>关注:</strong></li><li><a href="https://github.com/HMCL-dev/HMCL" rel="nofollow noopener noreferrer"><i class="fab fa-fw fa-github" aria-hidden="true"></i> Github</a></li><li><a href="https://beian.miit.gov.cn" rel="nofollow noopener noreferrer"><i class="fas fa-link" aria-hidden="true"></i> 粤ICP备18071565号</a></li><li><a href="/feed.xml"><i class="fas fa-fw fa-rss-square" aria-hidden="true"></i> Feed</a></li></ul></div><div class="page__footer-copyright">© 2026 <a href="mailto:hmcl@huangyuhui.net">huanghongxun</a>. 技术来自于 <a href="https://jekyllrb.com" rel="nofollow">Jekyll</a> & <a href="https://mademistakes.com/work/jekyll-themes/minimal-mistakes/" rel="nofollow">Minimal Mistakes</a>.</div></footer></div><script src="/assets/js/main.min.js"></script> <script src="/assets/js/plugins/jquery.auto-redirect.js"></script></body></html>
|