美化nginx的autoindex页面
昨天发文说到 我上线了一个Steem数据服务,但是 Nginx 自带的 autoindex 功能的 UI 实在是丑爆了,那么怎么美化一下呢?
经过研究发现了三种方案。
方案一
在 Nginx 的配置中,有下面这两个配置项目:
1 | add_before_body /xxx/file1.html; |
这两个选项,可以在 Nginx 输出 HTML 之前和之后分别先输出你设定的文件。
这样我们可以在自定义我们的头部或者尾部,加入我们自己想要的样式表或者用 js 实现更牛逼的功能。
完整的配置大概是这样
1 | location / { |
这里需要注意的是这两个参数的寻址,是基于
root配置项的,也就是在上面的示例中,.beauty目录是在/data/wwwroot/steem目录下面的。另外,如果你的自定义文件里有包含css和js文件,还需要有try_files参数配合一下。
这个功能唯一的不好处就是在查看网页源代码的时候,发现这两个参数的插入位置是在原来 <html> 之前和 </html> 之后。
这就让有代码洁癖的人感到很恶心。。。
方案二
该方案是第三方开发的插件:https://www.nginx.com/resources/wiki/modules/fancy_index/ 。
鉴于我使用的是 Docker 版的 Nginx,要想安装个第三方插件,我还要自己编译打包,很麻烦,所以这个方案就没有尝试。
不过看文档说明,应该是跟方案一思路一样,只不过多加了几个注入位置吧。
方案三
目前,我使用的是方案三。这个方案则是依赖的 Nginx 的这个参数 autoindex_format。
这个参数可以规定输出信息格式,默认是 html,我们可以设置这里为 json。这样就变成了一个 api 接口。
然后自己去开发一套自己喜欢的前端,调用这个 api 接口就可以了。
这里我从网上找了一套现成的 UI 来使用,地址:https://github.com/spring-raining/pretty-autoindex 。
在 Nginx 配置这块,我没有按照这个库的方法配置两个 Server 模块,我是分成了两个 location 来实现。
参考配置如下:
1 | location / { |
通过 alias 实现 /data 为 api 接口,来获取目录结构信息。
经过一下午的折腾,最终终于让 autoindex 页面看上去不是那么丑了,并且还加入了 Google Analytics。
以后如果还有什么想搞的好玩的东西,也可以加入到里面了。