Ik heb recent mijn site opnieuw gemaakt. Hiervoor maakte ik altijd gebruik van een “Static site generator”, een script dat markdown bestanden omzetten naar HTML. Omdat ik nu WordPress gebruik is het nuttig dat ik kijk naar het optimaliseren van de performantie van mijn site.
Tag archieven: apache
Cachen met Apache en mod_cache
Een van de eenvoudigste manieren om de performantie van een drukke website te verbeteren is om caching toe te voegen. Er zijn verschillende manieren waarmee dit kan gebeuren: Je kan objecten cachen in code (met Memcached en Redis), of je kan de responses cachen met Varnish, Nginx of in dit geval met Apache’s mod_cache. Ik raad dit op zich niet aan in productie, maar omdat ik Apache gebruik als webserver leek het me een leuk experiment, zonder veel extra configuratie te moeten toevoegen.
Automatische HTTPS met Apache
HTTPS is de dag van vandaag een must voor een website. Er zijn tools om certificaten automatisch aan te vragen (certbot etc), en webservers die gekend zijn om dit automatisch te doen (zoals Caddy), maar wist je dat je met Apache ook geen nood hebt voor Certbot? Met mod_md kan je apache automatisch HTTPS certificaten laten aanvragen via ACME (hetzelfde systeem dat Certbot en de caddy server gebruiken).
Django applicatie hosten met UWSGI
Ik ben recent met Django aan het spelen geweest, en daardoor ben ik ook aan het kijken hoe ik zo’n applicatie kan uitrollen. Ik heb uWSGI gekozen omdat het het eenvoudigste leek om te doen. Ik zal de installatie doen op Debian, aangezien ik dit draai op mijn server.
Apache, PHP en MySQL installeren op FreeBSD
Ik ben de laatste tijd wat aan het experimenteren met FreeBSD. In deze post licht ik toe hoe ik een Apache, MySQL en PHP stack op FreeBSD heb geïnstalleerd.
Caching met apache’s mod_cache
Caching is bij drukbezochte sites een must. Het verminderd de load op de webserver door de gegenereerde pagina’s op te slaan. Hierdoor word de database minder belast bij dynamische websites waardoor de webserver meer tijd heeft voor andere bezoekers.
Apache heeft een module, `mod_cache` die door middel van een paar opslagmechanismen (disk, shared memory, redis, memcached of zelf een DBM file) een snelle cache voorziet voor Apache. mod_cache is standaard als 1e laag in de processing stack, maar dit kan aangepast worden.
Eenvoudige configuratie
In de documentatie staat een voorbeeld van een eenvoudige configuratie. Als we deze
lichtjes aanpassen voor onze omgeving (in dit geval gaan we `/var/cache/httpd` gebruiken om de cache op te slaan, je moet deze map standaard zelf nog aanmaken).
<IfModule mod_cache.c> <IfModule mod_cache_disk.c> CacheRoot "/var/cache/httpd" CacheEnable disk "/" CacheDirLevels 2 CacheDirLength 2 CacheLock on CacheLockMaxAge 5 CacheIgnoreHeaders Vary DNT User-Agent Accept Accept-Encoding Accept-Language </IfModule> </IfModule>
Hierna moeten we zorgen dat mod_cache en mod_cach_disk zijn ingeladen met `a2enmod mod_cache mod_cache_disk`.
Vervolgens moet onze applicatie `Cache-control:` headers meegeven. Deze worden gebruikt om te vertellen hoe lang een pagina mag gecached worden. Afhankelijk van het soort pagina, en de updatefrequentie stel je deze in. Een blog waar vaak updates worden gepost is `300` seconden bijvoorbeeld een goed begin. Vaste pagina’s op die blog die zelden veranderen (zoals de ‘about’ pagina) kunnen dan weer een langere tijd krijgen, zoals `3600` seconden of zelfs `86400` seconden (1 dag).
Met apache komt standaard ook htcacheclean, een tool om de disk cache op te schonen. Deze tool kan je als daemon of als cronjob pereodiek uitvoeren om de groote van de cache map te beperken. Het onderstaande commando zal zorgen dat er maximaal 1GB aan data cachen, of 50000 inodes in gebruik nemen.
htcacheclean -p /var/cache/httpd -l1G -L50000 -n -t
Apache Authenticatie op verschillende manieren
In deze tutorial leg ik uit hoe je op verschillende manieren de toegang tot een website beperkt met apache. Dit kan op enkele manieren: ip-gebaseerd, of uit een bestand, of door middel van een database.
Toegang beperken per IP
Er zijn verschillende manieren, de makkelijkste is om het per IP te beperken. Zo kan je bijvoorbeeld de toegang tot je site beperken tot de ip’s van de developers bijvoorbeeld.
Om dit te doen maak je een bestandje in jouw website aan met de naam `.htaccess`. Zet je dit in een bepaalde map, dan word de toegang tot enkel die map beperkt.
Het stukje hieronder laat enkel gebruikers toe met het IP 12.34.56.78. Wil je meer ip’s toegang geven, dan kan je ze er gewoon aan toe voegen, gesplitst met een spatie.
<RequireAll> Require all denied Require ip 12.34.56.78 </RequireAll>
Ook het omgekeerde is mogenlijk, bijvoorbeeld een bepaald IP de toegang beperken.
<RequireAll> Require all granted Require not ip 78.65.43.21 </RequireAll>
Ook hier kan je gewoon ip’s toevoegen gesplitst met een spatie.
Toegang beperken met een wachtwoord
Eerst moet je een gebruiker & wachtwoord maken. Hiervoor moet je het linux commando `htpasswd` gebruiken
“`s
htpasswd -cB .htpasswd gebruikersnaam
“`
Dit zal je om een wachtwoord vragen en het in het bestand `.htaccess` zetten. om een 2e gebruiker toe te voegen kan je enkel `htpasswd -B .htpasswd gebruiker2` gebruiken, de `-c` vlag maakt namelijk een nieuw bestand aan.
Om dit te doen maak je een bestandje in jouw website aan met de naam `.htaccess`. Zet je dit in een bepaalde map, dan word de toegang tot enkel die map beperkt, je zet er het volgende in:
AuthName "Beveiligd gedeelte" AuthUserFile /pad/naar/.htpasswd AuthGroupFile /dev/null AuthType Basic require valid-user
Je moet uiteraard het pad vervangen naar het pad naar het htpasswd bestand.
Als je hierna de site bezoekt zal je gevraagd worden om een gebruikersnaam & wachtwoord in te geven.