Mettre en place h5ai avec NGINX

« h5ai is a modern file indexer for HTTP web servers with focus on your files »

h5ai_view

Pour ce petit tuto j'utilise une Debian Stretch sur un Kimsufi chez OVH et h5ai sera là pour lister les images servant à mon bot mastodon @wallhallapaper.

Tout d'abord il va nous falloir récupérer h5ai.

Faites attention à prendre la dernière version en date.

    cd /var/www/votre_repertoire
    wget https://release.larsjung.de/h5ai/h5ai-0.29.0.zip && unzip h5ai-0.29.0.zip
    rm h5ai-0.29.0.zip

Maintenant passons à la configuration de nginx avec un exemple de fichier de configuration. Munissez-vous donc de votre éditeur de texte préféré (pour ma part il s'agit de vim) et créons le fichier .conf.

    vim /etc/nginx/conf.d/wallhallapaper.conf

Suivant votre distribution serveur l'emplacement des fichiers de conf peut varier, ici je suis sur une Debian Stretch donc de base c'est : /etc/nginx/conf.d/ sinon ça se passe ici /etc/nginx/site_avaible/ sans oublier par la suite de le passer dans /etc/nginx/site-enable/.

    # Configuration du HTTPS
    server {
         listen 443 ssl http2;
         listen [::]:443 ssl http2;
         server_name your.domaine.tld;
         root /var/www/your_repertory/;
         index /_h5ai/public/index.php;

    # Emplacements des logs
    access_log /var/log/nginx/make_name-access.log;
    error_log /var/log/nginx/make_name-error.log;

    # Emplacement du certificat si on utilise Letsencrypt
    ssl_certificate         /etc/letsencrypt/live/..../fullchain.pem;
    ssl_certificate_key     /etc/letsencrypt/live/..../privkey.pem;

    ssl_session_timeout     10m;
    ssl_prefer_server_ciphers   on;
    ssl_stapling            on;
    ssl_stapling_verify     on;
    ssl_protocols           TLSv1.1 TLSv1.2;
    ssl_ciphers         "ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA:DES-CBC3-SHA:HIGH:!aNULL:!eNULL:!EXPORT:!DES:!MD5:!PSK:!RC4";

    add_header Strict-Transport-Security "max-age=31557600; includeSubDomains";

    location ~ \.(jpg|jpeg|gif|png|css|js|ico|svg|eot|ttf|woff|woff2|otf)$ {
         access_log        off;
         expires           30d;
    }
    
    # Configuartion pour PHP
    location ~ \.php$ {
         try_files $uri =404;
         fastcgi_index index.php;
         fastcgi_pass 127.0.0.1:9000;
         fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
         include /etc/nginx/fastcgi_params;
    }

    location ^~ /var/www/your_repertory/_h5ai/private {
         deny all;
         return 403;
    }
    }

    # Redirection HTTP vers HTTPS
         server {
         listen 80;
         listen [::]:80;
         server_name domaine.tld;
         return 301 https://your.domaine.tld$request_uri;
    }

On teste la configuration pour éviter de se manger une erreur au reboot de nginx (et de péter éventuellement tout les autres servives/sites) avec nginx -t, qui devrait vous retourner :

    nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
    nginx: configuration file /etc/nginx/nginx.conf test is successful

Et donc on relancer nginx

    systemctl restart nginx

Pour voir si tout fonctionne correctement, direction la page index.php de h5ai : http://your.domain.tld/_h5ai/public/index.php, et cliquez sur login.

Normalement tout est bon

h5ai_validation

Il vous faudra aussi changer le mot de passe histoire de planquer les infos, pour cela direction /your_repertory/_h5ai/private/conf/options.json

Une fois tout bien configuré voila à quoi ressemble mon h5ai pour @wallhallapaper.

Enjoy \o/