WordPress auf Nginx

Dieses WordPress ist ja nun auf nginx gehostet, alles in allem funktioniert das auch einwandfrei.
Leider scheint es aber ein Bug (ein über 3 Jahre alten Bug) in WordPress zu geben, der die Erkennung ob eine Seite mit SSL oder ohne SSL läuft betrifft.

So betrifft dieses Problem auch meine Konfiguration, nginx + php-fpm und WordPress.

Die Funktion „is_ssl()“ in der ./wp-includes/functions.php, irgendwo bei Zeile 3070. In dieser heißt es:

function is_ssl() {
  if ( isset($_SERVER['HTTPS']) ) {
    if ( 'on' == strtolower($_SERVER['HTTPS']) )
      return true;
    if ( '1' == $_SERVER['HTTPS'] )
      return true;
  } elseif ( isset($_SERVER['SERVER_PORT']) && ( '443' == $_SERVER['SERVER_PORT'] ) ) {
    return true;
  }
  return false;
}

Also wann immer etwas in der $_SERVER[‚HTTPS‘] Variable steht, ist WordPress der Meinung die Seite würde in SSL laufen.
Dadurch ergeben sich seltsame Effekte, einer davon war (bei mir) das die Seite über HTTP, die CSS und JavaScript Dateien über HTTPS geladen wurden.

Ein beherztes Ändern der Funktion in

function is_ssl() {
  return false;
}

Hat zwar erstmal geholfen, bedeutet aber, das ich aktuell kein SSL für diese Seite nutzen kann. Also: hier muss ich noch dran!

UPDATE:

Einfach mal genau schauen: Der nginx Konfiguration muss an der entsprechenden Stelle ein fastcgi_param HTTPS on; hinzugefügt werden.
Somit ist der Teil der nginx Konfiguration jetzt

location ~ \.php$ {
  fastcgi_pass unix:/var/run/php5-fpm.sock;
  fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
  fastcgi_param HTTPS on;
  include fastcgi_params;
  try_files $uri =404;
}

Und, tada: Scheint alles zu laufen!

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.