Warning: count(): Parameter must be an array or an object that implements Countable in /var/www/virtual/benny-baumann.de/blog/htdocs/wp-includes/post-template.php on line 310

Warning: count(): Parameter must be an array or an object that implements Countable in /var/www/virtual/benny-baumann.de/blog/htdocs/wp-includes/post-template.php on line 310

BenBE's humble thoughts Thoughts the world doesn't need yet …

14.12.2014

SSL mit WordPress hinter Reverse Proxy

Filed under: Server — Schlagwörter: , , , , , , — BenBE @ 18:30:47

Nachdem mein Server-Setup letztens nach dem Umzug auf neue Hardware ja etwas umgebaut wurde, hatte ich mit meinem Blog ein wenig zu Kämpfen, da das Blog aus Performance-Gründen nur interne IPs mit HTTP-Requests sieht (die externen IPs sind via Header auch sichtbar). Entsprechend war das Blog auch bei Abruf über SSL ständig der Meinung die Resourcen mit HTTP, also ohne Verschlüsslung abzurufen.

Ursache für dieses Phänomen ist, dass die Funktion is_ssl() von WordPress nicht mit Reverse-Proxy-Konfigurationen kann, und daher das Request-Schema der internen Verbindung für die Entscheidung heranzieht. Dies lässt sich aber leicht ändern.

Mit zwei kleinen Änderungen kann man WordPress vorgaukeln, dass die interne Verbindung HTTPS nutzt. Hierzu fügt man in seiner wp-config.php folgende Zeilen vor dem Include der wp-settings.php ein:

if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') {
    $_SERVER['HTTPS']='on';
}

Nun muss man im Reverse-Proxy nur noch für eine korrekte Weitergabe der Information zum Protokoll der ursprünglichen Verbindung sorgen. In meinem Fall mit nginx ist das exakt eine Zeile:

proxy_set_header X-Forwarded-Proto $scheme;

Und siehe da: Nun klappt das auch mit dem WordPress und SSL.

Flattr this!

Keine Kommentare »

No comments yet.

RSS feed for comments on this post. TrackBack URL

Leave a comment

Powered by WordPress