Astuces pour httpd
man
Je ne peux m'empêcher de vous inciter à lire le man httpd.conf.
On y trouve tout ce qui est écrit ici, et plus encore.
Journaux
Vous pouvez choisir un fichier spécifique où seront enregistrés les logs dans la section de chaque site. Ils sont par défaut enregistrés dans le dossier "/var/www/logs".
log access "nom_du_site.log"
Pour désactiver les logs, écrivez "no log".
Compression gzip
Ajoutez l'instruction "gzip-static" dans la configuration d'un domaine ou dans une section "location". Ainsi, lorsqu'un visiteur demande à afficher un fichier, httpd tentera de lui délivrer un éventuel fichier du même nom avec l'extension ".gz" en plus s'il existe.
Cela peut diminuer drastiquement la bande passante nécessaire, de 2 à 10 fois. Privilégiez de compresser les fichiers texte (html, css, js, svg...).
Pour gzipper un fichier :
$ gzip -vk9 index.html index.html: 49.5% -- replaced with index.html.gz 1395 bytes in, 733 bytes out
Page d'erreur personnalisée
Vous pouvez préciser avec l'instruction "errdocs" le dossier du chroot dans lequel sont stockées des pages d'erreurs personnalisées.
Il peut s'agit d'une page nommée "err.html" ou bien de pages dont le nom correspond au code d'erreur, par exemple "404.html".
Cela donne :
errdocs "/htdocs/chezmoi.tld/err"
Le dossier /var/www/htdocs/chezmoi.tld/err" contient alors le fichier "err.html" suivant :
<!DOCTYPE html> <html> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1"> <link rel="icon" href="/favicon.png" type="image/png" /> <style type="text/css">body, html {height:100%; margin:0} #bg { position: relative; background-position: center; background-repeat: no-repeat; background-size: cover; background-image: url("/img/errimg.jpg"); height: 100%; padding:0; margin:0; } #content { padding:1.5em; } </style> <title> $RESPONSE_CODE : $HTTP_ERROR </title> </head> <body> <div id="bg"> <div id="content"> <h1>Error page 😖</h1> <p>Sorry!</p> </div> </div> </body> </html>
Améliorer la disponibilité
Afin d'augmenter le nombre de processus par défaut, et donc pouvoir servir simultanément du contenu à plusieurs clients, augmentez la valeur par défaut qui est de 3 :
prefork 10
Publier en utf-8
Si vous essayez d'afficher un fichier texte brut, il est possible que le navigateur affiche mal les caractères accentués, à moins que vous sélectionniez l'encodage utf-8 dans les paramètres.
Pour éviter aux lecteur d'avoir à chercher ce paramètre, vous pouvez explicitement indiquer que le contenu est diffusé en utf-8 en modifiant le "httpd.conf" dans la section "types". Ça suppose d'échapper le point-virgule, donc autant avoir un exemple pour les fichiers d'extension ".gmi" et ".txt" :
types { text/"plain;charset=UTF-8" gmi text/"plain;charset=UTF-8" txt }
Accès restreint par mot de passe
Pour protéger l'accès à un site ou une partie du site par un mot de passe, utilisez la commande "htpasswd" pour créer un fichier d'accès :
# htpasswd /var/www/secret.htpw login
Remplacez login par le nom d'utilisateur que vous souhaiterez utiliser, puis définissez un mot de passe solide. Recommencez à chaque fois que vous voulez ajouter un nouvel utilisateur.
Modifiez les permissions sur ce fichier :
# chown www /var/www/secret.htpw # chmod 400 /var/www/secret.htpw
Enfin, dans la configuration de httpd, pour protéger l'accès au sous-dossier "/dossier_protege/*" :
location "/dossier_protege/*" { authenticate "Acces restreint" with "/secret.htpw" }
Remarquez que l'emplacement du fichier secret.htpw est relatif au chroot de httpd, on fait comme si "/var/www" était "/".
Pour protéger un site complet, indiquez :
location "/*"
Ou alors, mettez l'instruction "authenticate" au tout début de la configuration sans jamais préciser de "location".
Index des fichiers
Afin de lister automatiquement dans le navigateur les fichiers présents dans un dossier si aucun fichier "index.html" n'est présent, ajoutez dans le fichier "/etc/httpd.conf" :
location "/dossier/*" { directory auto index }
Inclusions de fichiers de configuration
Si vous avez plusieurs sites, ça peut vite être le bazar de tout configurer dans le fichier /etc/httpd.conf. Il vous est possible de découper la configuration dans plusieurs fichiers avec l'instruction include :
include "/etc/httpd/site1.conf" include "/etc/httpd/site2.conf"
TLS
Pour accélérer les futures négociations TLS si vous servez votre site en https, vous pouvez ajouter un "ticket de session" :
hsts preload tls { certificate "/etc/ssl/chezmoi.tld.crt" key "/etc/ssl/private/chezmoi.tld.key" ticket lifetime default }