看到HMCL支持从静态资源服务器直接下载整合包到客户端,这样能方便腐竹更新游戏客户端版本,终于能解决每次更新要重发整个客户端的老大难问题。

HMCL 允许服务器管理员借助服务端自动更新整合包来实现自动分发整合包更新,这将大大方便有需要频繁更新游戏客户端 Mod、配置等信息的服务器管理员。 HMCL 需要服务器管理员额外提供一个 HTTP 服务器(只需要能提供静态文件服务,比如 Apache 和 Nginx 皆可)来提供检查整合包更新并允许 HMCL 下载更新文件。

因此,计划在服务器上开一个静态资源路由,看到HMCL给的提示,Nginx就可以做静态资源服务器,本身我的博客也是使用Nginx逆向代理,说干就干,动手动手!

Nginx安装

这里很基础略过,可以看以下参考文档。

https://zhuanlan.zhihu.com/p/515069497

新建静态资源文件夹

我为了省事直接在/根目录下新建了一个MinecraftClientStatic文件夹,以后需要作为静态资源的文件都丢这里面。
命令:

# 到更目录
cd /
# 新建文件夹
mkdir MinecraftClientStatic
# 防止nginx无法访问,配置文件夹访问权限
chmod 777 MinecraftClientStatic
# 进入文件夹
cd MinecraftClientStatic
# 新建一个测试用的文件
touch helloMC.html
# 给文件权限
chmod 777 helloMC.html
# 编辑html内容
vim helloMC.html

这里为了测试静态资源是否配置成功,需要新建一个helloMC.html的静态测试文件。可以在这个文件内随意写两行字。
例如:

<!-- helloMC.html -->
<h1>hello static!</h1>

也可以整点炫的(可选):

<!-- helloMC.html -->
<!DOCTYPE html>
<html>

	<head>
		<meta charset="UTF-8">
		<title>MC客户端静态资源</title>
		<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no" />
		<style>
			@font-face{
				font-family:'calligraffittiregular';
				src:url("fonts/calligraffitti-regular-webfont.ttf")
			}
			
			* {
				margin: 0;
				padding: 0;
			}
			
			body {
				overflow: hidden;
			}
			
			#content{
				position: absolute;
				color: white;
				top: 30%;
				left: 50%;
				margin-left: -121px;
			}
			
			p{
				font-family: calligraffittiregular
			}
			
		</style>
	</head>

	<body>
		<div id="content">
			<p style="font-size:  40px;font-weight: 1000;">MinecraftClientStatic</p>
		</div>
		<canvas id="hacker" style="width:100%;height:100%;">请使用最新的浏览器</canvas>
	</body>

</html>
<script type="text/javascript">
	window.onload = function() {
		var color_array = ['#00FF00','#00FF99','#00FFCC','#00FFFF','#00BBFF','#0066FF','#0000FF','#5500FF','#7700FF','#9900FF','#CC00FF','#FF00FF'];
		var i=0;
		var color;
		function changColor() {
			color = color_array[i];
			console.log(i++);
			console.log(color);
			if(i>color_array.length-1){
				i=0;
			}
			setTimeout(changColor, 2000);
		}
	
		var hacker = document.getElementById("hacker");
		var width = hacker.width = screen.width;
		var height = hacker.height = screen.height;
		var ctx = hacker.getContext('2d');
		var num = Math.ceil(width / 12);
		var y = Array(num).join(0).split('');
		var draw = function() {
			ctx.fillStyle = 'rgba(0,0,0,.05)';
			ctx.fillRect(0, 0, width, height);
			ctx.fillStyle = color;
			ctx.font = '12px Microsoft YaHei';
			y.map(function(y1,i){
				var text = String.fromCharCode(65 + Math.random() * 62);
				var x = i * 12;  
				var y1 = y[i];
				ctx.fillText(text, x, y1);
				y[i] = ( y1 > Math.random() * 10 * height ? 0 : parseInt(y[i]) + 12 );
			})
		}

		Run();

		function Run() {
			changColor();
			Game_Interval = setInterval(draw, 50);
		}
	}
</script>

分配次级域名(可选)

如果你没有域名,那么这里可以跳过,后面需要域名的地方直接使用服务器ip地址

假设我们的域名是buggzd.com
在域名解析新建一个记录,取名为minecraft,然后加上服务器ip。
image.png
这是我们就有了一个子域名minecraft.buggzd.com
添加完成后可以使用cmd去ping一下这个域名(minecraft.buggzd.com)DNS是否已经记录,如果返回了正确的ip地址就是已经分配成功了。

配置nginx.conf

因为好久没动nginx配置了,甚至都忘了nginx的配置文件放哪里去了,还好可以用指令查一下。
查找nginx配置文件目录:

 $ nginx -t
 $ nginx: the configuration file /etc/nginx/nginx.conf syntax is ok

这里/etc/nginx/nginx.conf就是Nginx的配置文件
然后cd到nginx配置目录。

cd /etc/nginx
# 编写配置文件
vim nginx.conf

因为之前配置过博客逆向代理,nginx.conf会带有之前的配置记录,不能把他们搞乱。所以理清层级关系很重要!

# 这是nginx.conf的层级目录
# 每个nginx.conf配置文件都只有一个http块,所以如果之前配置过nginx
# 就只需要粘贴server块里的内容,把server块放到http块内部。
 http {    
    server { ... }
    server { ... }
    server { ... }
    }

需要填写的配置:

 http {    
    server {       
       # 需要监听的端口号,可以不动
       listen 80;       
       # 这里需要把localhost改为上面分配好的域名
       server_name  minecraft.buggzd.com;      
       location  /{            
       # root后面是对应的静态资源文件夹的位置
            root /MinecraftClientStatic;     
       # 这里是默认加载的首页html,这里放的是刚刚新建的测试文件
       # 它是从root目录文件夹内开始查找的,所以不要写/MinecraftClientStatic/helloMC.html
            index helloMC.html;    
       }
 }  

Q:上面的配置干了什么事?
A:比如你访问http://minecraft.buggzd.com/test.png时,nginx会访问本地的/MinecraftClientStatic/test.png 然后返回。

当正确编写完nginx.conf ,需要让nginx重新加载一下配置文件。

nginx -s reload

然后直接访问刚刚配置的域名(minecraft.buggzd.com),默认会跳转到编写好的helloMC.html,你也可以在域名后加/helloMC.html (minecraft.buggzd.com/helloMC.html)
image.png
当页面出现helloMC.html的文本内容时,说明已经配置成功了!
放张图片到静态资源文件夹试试。
image.png
访问成功,没问题!

参考:
nginx配置文件结构:https://blog.csdn.net/pibuliao8626/article/details/110449349
使用nginx如何部署静态资源:https://www.muzhuangnet.com/show/86630.html
Nginx 作为静态资源服务器:https://zhuanlan.zhihu.com/p/514547633
nginx配置静态静态资源服务器:https://cloud.tencent.com/developer/article/2028983?from=15425

Q.E.D.


寄蜉蝣于天地,渺沧海之一粟