有没有办法在没有任何第三方实用程序的情况下在nginx中创建一个简单的静态图像库?

最简单的方法是转换nginx的文件列表。您可以将nginx输出列表制作为XML,然后使用XSLT对其进行转换。内置模块ngx_http_autoindex_module会做前者,通常动态模块​​3210(又名ngx_http_xslt_module)会做后者。

首先,加载模块中nginx.conf如果需要的话:

load_module "/usr/lib/nginx/modules/ngx_http_xslt_filter_module.so"; 

然后,在你sites-available/website.com,添加告诉nginx使用stlylesheet gal.xslt转换XML索引,并通过文件夹的名称的位置一个参数。

location ~ /gal/([A-z]+)/$ { 
    autoindex on; 
    autoindex_format xml; 
    xslt_string_param title $1; 
    xslt_stylesheet gal.xslt; 
    try_files $uri/ =404; 
} 

最后,创建于/etc/nginx,说gal.xslt

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output method="html" encoding="utf-8" indent="yes" /> 
<xsl:template match="/"> 
    <xsl:text disable-output-escaping='yes'>&lt;!DOCTYPE html&gt;</xsl:text> 
    <html> 
    <head> 
    <title><xsl:value-of select="$title" /></title> 
    <meta name="viewport" content="width=device-width, initial-scale=1.0" /> 
    <style> 
    img { 
      display: block; 
      max-width: 20cm; 
      max-height: 20cm; 
      margin: 2mm; 
      vertical-align: bottom; 
     } 
    @media all and (max-width: 20.4cm) { 
     img { 
      max-width: calc(100% - 4mm); 
     } 
    } 
    body { 
      margin: 0; 
    } 
    </style> 
    </head> 
    <body> 
    <xsl:for-each select="list/file"> 
     <img src="{.}" alt="{.}"/> 
    </xsl:for-each> 
    </body> 
    </html> 
</xsl:template> 
</xsl:stylesheet> 

现在把一些图片为/var/www/html/gal/foo,重启nginx的,导航到website.com/gal/foo,你会看到一个简单但实​​用和响应的图片库。

+0

这真是太神奇了!谢谢。 – gerasalus