WordPress permalinks met Nginx

Meestal werkt WordPress gewoon out-of-the-box met Nginx, je kan al vrij snel beginnen met het plaatsen van je berichten – totdat je permalinks gaat aanzetten. Dan kom je er al snel achter dat Nginx extra configuratie nodig hebt.

Om permalinks mogelijk te kunnen maken moet je het volgende toevoegen aan je configuratie. Zoek op
'location /' {
en voeg het volgende toe:

try_files $uri $uri/ /index.php?$args;

Vervolgens kun je de nginx configuratie ‘reloaden’ en zul je zien dat permalinks nu ook werken!

Jenkins; client drama

Als je ook Jenkins gebruikt, hoef ik je niet vertellen hoe slecht de foutmeldingen zijn. Als er een fout binnen Jenkins optreed (bijv. het niet starten van de slave-client) heb je geen idee waar je moet zoeken.

Zo kreeg ik laatste de volgende melding / stacktrace

[04/14/17 17:22:06] [SSH] Checking java version of java
[04/14/17 17:22:06] [SSH] java -version returned 1.7.0_121.
[04/14/17 17:22:06] [SSH] Starting sftp client.
[04/14/17 17:22:06] [SSH] Copying latest slave.jar...
[04/14/17 17:22:06] [SSH] Copied 719,269 bytes.
Expanded the channel window size to 4MB
[04/14/17 17:22:06] [SSH] Starting slave process: cd "/home/jenkins" && java     -jar slave.jar -text
<===[JENKINS REMOTING CAPACITY]===><===[HUDSON TRANSMISSION BEGINS]===channel started
Slave JVM has not reported exit code. Is it still running?
[04/14/17 17:22:11] Launch failed - cleaning up connection
ERROR: Connection terminated
java.io.EOFException
at java.io.ObjectInputStream$PeekInputStream.readFully(ObjectInputStream.java:2625)
at java.io.ObjectInputStream$BlockDataInputStream.readShort(ObjectInputStream.java:3100)
at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:854)
at java.io.ObjectInputStream.<init>(ObjectInputStream.java:350)
at hudson.remoting.ObjectInputStreamEx.<init>(ObjectInputStreamEx.java:48)
at hudson.remoting.AbstractSynchronousByteArrayCommandTransport.read(AbstractSynchronousByteArrayCommandTransport.java:34)
at hudson.remoting.SynchronousCommandTransport$ReaderThread.run(SynchronousCommandTransport.java:59)
Caused: java.io.IOException: Unexpected termination of the channel
at hudson.remoting.SynchronousCommandTransport$ReaderThread.run(SynchronousCommandTransport.java:73)
[04/14/17 17:22:11] [SSH] Connection closed.

Na eindeloos zoeken; was het een outdated java client. Dit was vervolgens goed op te lossen door gewoonweg java8 te installeren.

Alle HTTP verkeer doorsturen naar HTTPS

Tegenwoordig wilt iedereen https draaien, zo ook mijn werk. Ik moet daarom ook regelmatig nieuwe vhosts toevoegen die alleen op HTTPS mogen draaien. Dit is voor zowel NGINX als Apache2 heel gemakkelijk toe.

Apache configuratie

Voor Apache2 moet je zorgen dat je mod_rewrite aan hebt staan en het volgende defineren in je vhost:

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{SERVER_NAME}/$1 [R,L]

NGINX configuratie

Voor NGINX kan je het volgende defineren:

return 301 https://$host$request_uri;

Zorg wel dat je de server name hebt geconfigureerd, het redirecten gebeurd namelijk o.b.v. de server name!

Kleine tip!

Omdat certificaten kunnen verlopen, kan ik je adviseren om een aparte configuratie bestand te maken en die te includen. Als je dan bijv. een wildcard certificaat hebt, hoef je maar een keer een configuratie bestand te updaten.

Apache includes

Maak een nieuw bestand aan; bijvoorbeeld; /etc/apache2/ssl-configuratie.conf en zet daar je SSL configuratie in. Je kunt dit bestand vervolgens weer includen door het volgende in je normale vhost configuratie te zetten:

Include /etc/apache2/ssl-configuratie.conf

NGINX includes

Maak een nieuw bestand aan; bijvoorbeeld /etc/nginx/ssl-configuratie.conf en zet daar de SSL configuratie in. Je kun het bestand incluen door het volgende in je normale vhost configuratie te plaatsen;

include  /etc/nginx/ssl-configuratie.conf