介绍
nginx 具备很强的代理功能,因此我们可以利用nginx 的特性实现一个简单的文件浏览器,本文基于nginx实现一个文件浏览器功能,且文件按照创建的时间递减排序(即最新创建的文件排序在最上面,方便用户查看最新文件)。
操作&测试
准备配置文件:
default
$ vim default
# Default server configuration
#
server {
listen 80 default_server;
listen [::]:80 default_server;
root /var/www/html;
# Add index.php to the list if you are using PHP
index index.html index.htm index.nginx-debian.html;
server_name _;
location / {
# First attempt to serve request as file, then
# as directory, then fall back to displaying a 404.
try_files $uri $uri/ =404;
}
location /log {
alias /home/log/;
autoindex on;
autoindex_format xml;
xslt_stylesheet /etc/nginx/autoindex.xslt;
}
}
autoindex.xslt
$ vim autoindex.xslt
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<body>
<table border="0" style="width:100%">
<tr bgcolor="#9acd32">
<th>Name</th>
<th>Size</th>
<th>Time</th>
</tr>
<xsl:for-each select="list/*">
<xsl:sort select="@mtime" order="descending" />
<xsl:variable name="name">
<xsl:value-of select="."/>
</xsl:variable>
<xsl:variable name="size">
<xsl:if test="string-length(@size) > 0">
<xsl:if test="number(@size) > 0">
<xsl:choose>
<xsl:when test="round(@size div 1024) < 1"><xsl:value-of select="@size" /></xsl:when>
<xsl:when test="round(@size div 1048576) < 1"><xsl:value-of select="format-number((@size div 1024), '0.0')" />K</xsl:when>
<xsl:otherwise><xsl:value-of select="format-number((@size div 1048576), '0.00')" />M</xsl:otherwise>
</xsl:choose>
</xsl:if>
</xsl:if>
</xsl:variable>
<xsl:variable name="date">
<xsl:value-of select="substring(@mtime,1,4)"/>-<xsl:value-of select="substring(@mtime,6,2)"/>-<xsl:value-of select="substring(@mtime,9,2)"/><xsl:text> </xsl:text>
<xsl:value-of select="substring(@mtime,12,2)"/>:<xsl:value-of select="substring(@mtime,15,2)"/>:<xsl:value-of select="substring(@mtime,18,2)"/>
</xsl:variable>
<tr>
<td><a href="{$name}"><xsl:value-of select="."/></a></td>
<td align="center"><xsl:value-of select="$size"/></td>
<td align="center"><xsl:value-of select="$date"/></td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
Dockerfile
$ vim Dockerfile
FROM ubuntu/nginx:1.18-20.04_beta
# FROM ubuntu/nginx:latest
COPY default /etc/nginx/sites-enabled/default
COPY autoindex.xslt /etc/nginx/autoindex.xslt
打包镜像:
docker build -t log-nginx:v1 .
拉起容器:
docker run -d --name=log-nginx -v /var/log:/home/log -p 80:80 log-nginx:v1
测试效果:
http://127.0.0.1/
http://127.0.0.1/log/
先后创建 3个文件(022-05-09.txt 022-05-08.txt 022-05-07.txt),其自动按照创建的时间递减排序,即最新创建的文件在最上面
说明
基础镜像: ubuntu/nginx:1.18-20.04_beta
default文件: 直接从 ubuntu/nginx 中/etc/nginx/sites-enabled/default处拷贝,然后新增一个 /log项即可
autoindex.xslt: 用于文件对齐,会根据文件的名称按照指定的方式排序