Je veux juste pouvoir partager un lien vers plusieurs images à la fois.Y at-il un moyen de créer une galerie d'images statique simple dans nginx sans utilitaires tiers?
Répondre
La manière la plus simple serait de transformer les listes de fichiers de nginx. Vous pouvez le faire en faisant des listes de sortie nginx en XML et ensuite les transformer en utilisant XSLT. Built-in module ngx_http_autoindex_module
fera l'ancien module et généralement dynamique ngx_http_xslt_filter_module
(aka ngx_http_xslt_module
) fera le dernier.
Tout d'abord, charger le module nginx.conf
si nécessaire:
load_module "/usr/lib/nginx/modules/ngx_http_xslt_filter_module.so";
Ensuite, dans votre sites-available/website.com
, ajouter un emplacement qui indique nginx pour transformer l'index XML à l'aide stlylesheet gal.xslt
et passer un nom du dossier que un paramètre.
location ~ /gal/([A-z]+)/$ {
autoindex on;
autoindex_format xml;
xslt_string_param title $1;
xslt_stylesheet gal.xslt;
try_files $uri/ =404;
}
Enfin, créer gal.xslt
dans /etc/nginx
qui dit,
<?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'><!DOCTYPE html></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>
Maintenant mettre des images en /var/www/html/gal/foo
, redémarrez nginx, accédez à website.com/gal/foo
et vous verrez une galerie d'image simple mais utilisable et réactif.
C'est purement incroyable! Je vous remercie. – gerasalus