Geef wp-config.php hackers een koekje van eigen deeg..

Een van de vuistregels van het beveiligen van WordPress is om wp-config.php van buitenaf ontoegankelijk te maken. Dat kan met nginx in één regel:

location ~* wp-config.php { return 404; }

Dat is vrij standaard, een 404 error geven..

Leuker is om ze door te sturen met een redirect naar een willekeurige pagina, bijvoorbeeld een video op YouTube!

location ~* wp-config.php { return 301 http://www.youtube.com/watch?v=oHg5SJYRHA0; }

Het is niet mogelijk om dit te omzeilen, omdat de webserver deze redirect uitvoert. Intern blijft alles gewoon werken omdat de webserver het bestand vanaf een ander pad opent.

MaartenvandeKamp.nl naar een VPS

Het duurt nog een jaar voordat ik beschik over een glasvezelverbinding aan huis. Dat betekent dat mijn websites niet kunnen groeien, want de snelheid waarmee de site wordt verstuurd is beperkt. Daarom heb ik besloten om MaartenvandeKamp.nl, en misschien nog wel wat andere websites, te verplaatsen naar een VPS van TransIP.nl.

De website draait er nu een dag en tot nu toe is de ervaring matig positief.. De upload snelheid valt nogal tegen, kijken of daar nog iets aan te verbeteren valt! Het betekent ook dat ik grotere foto’s kan plaatsen en dat is wel prettig op een website zoals MaartenvandeKamp.nl!

Piwik

Ik heb iets tegen Google Analytics.. Google plaatst ongevraagd cookies met een enorme lange levensduur die op elke site (gebruikmakend van GA) terugkomen. Dat kan beter en netter en daarom gebruik ik sinds 3 weken Piwik. Het opensource alternatief van Google Analytics.

En het bevalt goed! Het is niet zo uitgebreid als GA maar ik ben ook geen bedrijf wat afhankelijk is van de inkomsten vanuit een of meerdere websites. Daarnaast wordt de DoNotTrack-functie door Piwik ondersteund, net als een opt-out functie. Die informatie is terug te vinden op de Privacy-pagina!

Verder rol ik Piwik uit op een aantal websites die ik gemaakt heb, gewoon als extra gratis service. Om iets terug te doen voor mijn klanten!

Migratie Apache2 nginx & PHP-FPM

Vandaag is de overstap gemaakt naar nginx + php-fpm voor het serveren van websites voor alle grote domeinen die ik host. De snelheidswinst ten opzichte van Apache2 is wel merkbaar.

De constructie die ik eerst had was dat nginx alle statische bestanden serveerde en de rest doorstuurde naar Apache. Tussen deze twee servers werd een nieuwe verbinding opgezet die niet nodig was en dat zorgde voor vertraging. Nu maakt nginx via een socket verbinding met PHP en daardoor is Apache niet meer nodig.

Apache draait alleen nog voor de websites in de test / dev omgeving vanwege het gemak. Voor de rest, alles nginx!

Verbeterde zoekfunctie MaartenvandeKamp.nl

De zoekfunctie van WordPress is vrij standaard en daarom ook beperkt in de mogelijkheden. Ik las pas op internet dat deze zoekfunctie op datum zoekt en niet op relevantie.

Als je zoekt op een algemene term, bijvoorbeeld Lens, dan krijg je alle artikelen te zien waarin het woord Lens voorkomt, maar op datum! Dus het artikel waar de bezoeker naar opzoek is kan ook op pagina 3 staan. En dat wil ik niet.

Relevanssi

Daarom heb ik de plugin Relevanssi geïnstalleerd. Met deze plugin kan ik veel meer instellen en er kan ook op relevantie gezocht worden. Daarvoor wordt MySQL ingezet, de database waarop WordPress is geïnstalleerd. Er wordt gezocht naar text en de afstand waarop woorden bij elkaar staan.

Dat zorgt ervoor dat de meest relevantie artikelen bovenaan staan en daar achteraan komt de rest.

Gerelateerde artikelen zonder plugin

Sinds twee maanden maak ik gebruik van een PHP script wat verwante artikelen opzoekt in de database. De relevantie wordt gebaseerd op de aanwezige tags van het artikel.

Daarvoor wordt een aparte query uitgevoerd die lijkt op de oorspronkelijke query voor het ophalen van het juiste artikel. Het artikel en de bijbehorende tags worden uitgelezen aan de hand van het ID van het artikel.

Dit werkte goed, alleen soms bleven reacties onder artikelen weg, ze werden simpelweg niet weergegeven. Na wat onderzoek bleek dat de query voor de verwante artikelen hiermee te maken had. Deze haalde opnieuw het ID op maar deed er verder niets mee, waardoor het reactieformulier niets ophaalde.

Door 1 regel toe te voegen is dit hele probleem opgelost. Het gaat om de volgende code:

wp_reset_query();

Deze code komt helemaal onderaan het blok code wat voor de verwante artikelen zorgt. De nieuwe query wordt gestopt en WordPress kan weer verder met de oorspronkelijke query waardoor ook het reactieformulier weer de juiste ID’s tot zijn beschikking krijgt. Het resultaat is dat de reacties weer worden getoond!

Juni 2012

Juni 2012 is de eerste maand die volledig is als het gaat om statistieken. Ik registreer mijn bezoekers met de serverlogs en laat deze uitlezen door AWstats.

Daar is het volgende resultaat uitgekomen:

  • Er zijn 1325 unieke bezoekers geweest
  • Er zijn 1962 bezoekers geweest, gemiddeld 1.48 bezoeken per bezoeker
  • Er zijn 7200 pagina’s bekeken
  • Bezoekers hebben voor 173 MB aan verkeer gegenereerd
  • En robots en andere automatische software hebben voor 236 MB aan verkeer gegenereerd. Daarvan ben ik er een heleboel gaan blokkeren omdat het onnodig veel verkeerd veroorzaakt.
  • Google heeft 9000 keer mijn site bezocht en heeft als grootste robot daarvan 132 MB aan verkeer voor zijn rekening genomen.
  • Het meest gelezen artikel is Lightroom Handleidingen en Tutorials, met 540 bezoeken deze maand.
  • Vanaf 19 juni ben ik ook verkeer gaan monitoren vanaf s0.maartenvandekamp.nl en dat heeft tot op heden (30 juni 2012) voor 163 MB aan internetverkeer opgeleverd.

Gemiddeld voor www.maartenvandekamp.nl

  • 62 bezoeken per dag
  • 112 pagina’s bezocht
  • 496 hits
  • 5.78 MB verzonden

Gemiddeld voor s0.maartenvandekamp.nl (sinds 19 juni)

  •  298 hits
  • 5.45 MB verzonden

Nu is het interessant om te zien wat er volgende maand gaat gebeuren. Juli is een maand waarin veel mensen op vakantie gaan én gaan fotograferen. Misschien zorgt dit wel voor een enorme opleving van mijn website.

Voorkom Image Hotlink met Nginx

Voor MaartenvandeKamp.nl gebruik ik de webserver Nginx. Een lichtgewicht webserver met heel veel mogelijkheden. Een daarvan heb ik ingezet om te voorkomen dat websites naar mijn afbeeldingen kunnen linken.

Ik gebruik voor het serveren van statische bestanden het domein s0.maartenvandekamp.nl. Vanaf dit domein worden alle statische bestanden, zoals .jpg, .png en andere, aangeboden aan de bezoeker. Om te voorkomen dat websites gebruik maken van mijn foto’s is het nodig om de directe toegang tot deze bestanden te verbieden. Dat klinkt nogal grof, maar het kan mijn site enorm vertragen, mocht het gebeuren!

Ik heb de volgende code gebruikt om ervoor te zorgen dat bestanden niet direct te openen zijn:

location / {
valid_referers blocked www.maartenvandekamp.nl;
if ($invalid_referer)
{
return 405;
}
}

Wat deze code doet is heel eenvoudig. Het controleert of de aanvraag voor een afbeelding van het domein www.maartenvandekamp.nl komt. Is dat niet het geval? Dan wordt de verbinding direct verbroken.

Nginx kent daar een aparte statuscode voor, namelijk 405 Not Allowed.