Time To First Byte – WordPress unter Nginx mit SSL langsam

Das Jahr neigt sich dem Ende zu und es ist mal wieder an der Zeit den eigenen Blog etwas auszumisten und zu prüfen, ob alle Systeme sich so verhalten wie man es von ihnen erwartet. Dazu gehören auch Speedtests und Wasserfall Diagramme mit dessen Hilfe man recht gut erkennen, kann – was der eigene Server ausliefert und vor allem auch in welcher Zeit. Was ich jedoch dort sah, wollte mich nicht unbedingt zufrieden stellen, denn in der Kategorie „First Byte Time“ versagte mein System auf voller Linie! Es dauerte in der Tat über 1,2 Sekunden bis mein Webserver mit der Auslieferung der Daten los legte. Ein TTFB Wert, welcher bei Webpagetest mit der Bewertung „F“ gekürt würde!

Wer seine Seite selbst einmal testen möchte, der kann dies hier tun!  Gut dachte ich mir zuerst – vielleicht ein Fehler dieser Seite! Google Insights angesteuert und auch dort die Bemerkung, dass die Datenauslieferung erst nach 1,2 Sekunden beginnt!

Darauf habe ich mir den Aufbau der Kommunikation angesehen und ja – die Ergebnisse waren richtig!

Irgendwas veranlasse meinen Server einfach so ein Pause einzulegen!

So konnte es natürlich nicht bleiben und ich überlegte, was ich in den vergangenen Monaten am System verändert hatte und kam zum Ergebnis – irgendwie muss dies wohl mit SSL zusammen hängen!

Mit meiner Vermutung lag ich sogar sehr richtig, denn wie ich später festgestellt habe. Blockt mein NGINX Server, den ich als reverse Proxy zur Auslieferung der Daten einsetze die Kommunikation, wenn das SSL Protokoll zum Einsatz kommt! Der Fehler war gefunden und so musste nur noch nach einer Lösung gesucht werden, wie die WordPress Installation wieder etwas mehr Wind in die Segel bekam.

Nachdem ich mir die Abhängigkeiten angesehen hatte, lag die Lösung des Problems auf der Hand. Die HTTP/1.X Kommunikation mit Nginx zieht das lange Nachdenken mit sich! Hier sollte es wohl taktisch klüger sein, auf den aktuellen Standard HTTP/2 zu setzen.

Und wie schaffen wir dies?
Nun ja, im Grunde müssen wir unserer Nginx Installation nur sagen, dass die HTTP/2 Basis genutzt werden soll.

server {
  listen 443 ssl http2;
}

Die restlichen Einträge hier bleiben gleich! HTTP2 funktioniert übrigens nur unser SSL.

Tja, und das war es im Grunde schon!

Optional:
Wenn wir schon am optimieren von Nginx sind, könnt ihr folgende Einträge in der Nginx.conf testen:

FastCGI Cache optimieren:

fastcgi_cache_path /etc/nginx-cache levels=1:2 keys_zone=phpcache:100m inactive=60m;
fastcgi_cache_key "$scheme$request_method$host$request_uri";

Im HTTP Bereich:

location ~ [^/]\.php(/|$) {
fastcgi_cache phpcache; 
fastcgi_cache_valid 200 30m;
fastcgi_cache_methods GET HEAD;
add_header X-Fastcgi-Cache $upstream_cache_status; 
}

Ob dies was bringt, liegt etwas daran – was ich mit Eurem Server anstellt. Denn diese Tipps gelten natürlich global und nicht nur für eine WordPress Instanz!

Restart Server:

service nginx restart

 

Ach ja, und bevor ich es vergesse!
So sieht das Ergebnis nach der Änderung aus!

Bedeutend besser!

Und auch die Übersicht verrät, dass die Basis-Kommunikation nun nach etwa 200 ms erledigt ist.
200 bis 300 ms sind hier gute Werte.

Für alle die mit Plesk arbeiten!
Hier die Anleitung zur Aktivierung von HTTP2 unter Plesk.

Die mobile Version verlassen