Magento Hosting mit Plesk 11.5, Apache, Nginx und Varnish Cache
Varnish ist ein sehr beliebter Seitencache für Webseiten.
Der Geschwindigkeitsvorteil kann je nach verwendeten Backend ein vielfaches betragen da Webseiten nicht bei jedem Abruf berechnet sondern statisch ausgeliefert werden.
Gerade im Bereich von Magento Hosting und Shop Hosting wird er sehr häufig eingesetzt.
Ich möchte hier einmal zeigen, wie man den Cache in einer Plesk Umgebung installiert.
Er wird als Daemon installiert und zwischen Webserver und Benutzer gehängt. Seiten werden entweder aus dem Cache geladen oder vom Webserver (Backend Server) abgerufen.
Um den Varnish im Plesk einzubinden sind einige Schritte erforderlich.
1. Installation des Varnish Caches
2. Erstellen einer custom Konfiguration im Plesk (CentOS: /usr/local/psa/admin/conf/templates/custom)
Installation des Varnish Caches für das Magento Hosting
Der Varnish Cache ist auf einem RH/CentOS sehr einfach installiert:
|
1 2 |
rpm --nosignature -i https://repo.varnish-cache.org/redhat/varnish-3.0.el6.rpm yum install varnish |
Dadurch wird der Varnish in der Version 3 installiert.
Vorsicht: Sofern andere Respoitory Varnish zur Verfügung stellen sollte mit yum priorities eine Reihenfolge festgelegt werden.
/etc/varnish/default.vcl:
|
1 2 3 4 |
backend default { .host = "127.0.0.1"; .port = "7080"; } |
/etc/sysconfig/varnish:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 |
# Configuration file for varnish # # /etc/init.d/varnish expects the variable $DAEMON_OPTS to be set from this # shell script fragment. # # Maximum number of open files (for ulimit -n) NFILES=131072 # Locked shared memory (for ulimit -l) # Default log size is 82MB + header MEMLOCK=82000 # Maximum size of corefile (for ulimit -c). Default in Fedora is 0 # DAEMON_COREFILE_LIMIT="unlimited" # Set this to 1 to make init script reload try to switch vcl without restart. # To make this work, you need to set the following variables # explicit: VARNISH_VCL_CONF, VARNISH_ADMIN_LISTEN_ADDRESS, # VARNISH_ADMIN_LISTEN_PORT, VARNISH_SECRET_FILE, or in short, # use Alternative 3, Advanced configuration, below RELOAD_VCL=1 # # See varnishd(1) for more information. # # # Main configuration file. You probably want to change it :) VARNISH_VCL_CONF=/etc/varnish/default.vcl # # # Default address and port to bind to # # Blank address means all IPv4 and IPv6 interfaces, otherwise specify # # a host name, an IPv4 dotted quad, or an IPv6 address in brackets. #VARNISH_LISTEN_ADDRESS=127.0.0.1 VARNISH_LISTEN_PORT=6081 # # # Telnet admin interface listen address and port VARNISH_ADMIN_LISTEN_ADDRESS=127.0.0.1 VARNISH_ADMIN_LISTEN_PORT=6082 # # # Shared secret file for admin interface VARNISH_SECRET_FILE=/etc/varnish/secret # # # The minimum number of worker threads to start VARNISH_MIN_THREADS=100 # # # The Maximum number of worker threads to start VARNISH_MAX_THREADS=2500 # # # Idle timeout for worker threads VARNISH_THREAD_TIMEOUT=120 # # # Cache file location VARNISH_STORAGE_FILE=/var/lib/varnish/varnish_storage.bin # # # Cache file size: in bytes, optionally using k / M / G / T suffix, # # or in percentage of available disk space using the % suffix. VARNISH_STORAGE_SIZE=10G # # # Backend storage specification #VARNISH_STORAGE="file,${VARNISH_STORAGE_FILE},${VARNISH_STORAGE_SIZE}" VARNISH_STORAGE="malloc,2G" # # # Default TTL used when the backend does not specify one VARNISH_TTL=600 # # # DAEMON_OPTS is used by the init script. If you add or remove options, make # # sure you update this section, too. DAEMON_OPTS="-a ${VARNISH_LISTEN_ADDRESS}:${VARNISH_LISTEN_PORT} \ -f ${VARNISH_VCL_CONF} \ -T ${VARNISH_ADMIN_LISTEN_ADDRESS}:${VARNISH_ADMIN_LISTEN_PORT} \ -t ${VARNISH_TTL} \ -w ${VARNISH_MIN_THREADS},${VARNISH_MAX_THREADS},${VARNISH_THREAD_TIMEOUT} \ -u varnish -g varnish \ -S ${VARNISH_SECRET_FILE} \ -s ${VARNISH_STORAGE} \ -p session_linger=50 \ -p cli_buffer=10000 \ -p sess_workspace=262144" |
Erstellen einer custom Konfiguration für Plesk
Damit der Webserver von Plesk die Daten vom Varnish abruft und nicht direkt vom Webserver ist eine Konfigurationserweiterung notwendig.
Plesk ist standardmäßig so konfiguriert, dass eingehende Verbindungen vom NGinx Reverseproxy entgegen genommen werden.
Nginx liefert lokale Dateien ggf. direkt aus und übergibt weiter Anfragen an den Apache Server, welcher i.d.R. auf Port 7080 horcht. Hier klinken wir uns ein und schieben dem System den Varnish Cache unter.
Im Ordner custom können eigene Konfigurationen abgelegt werden, die Plesk statt der eigenen verwendet.
Kopieren Sie die default/nginx.php aus dem default in den custom Ordner.
Bearbeiten Sie die Datei custom/nginx.php und fügen oben (Zeile 3) zwischen den beiden PHP Zeilen den upstream backend_varnish ein:
|
1 2 3 4 5 6 7 8 |
<?php echo AUTOGENERATED_CONFIGS; ?> upstream backend_varnish { server 127.0.0.1:6081; server [lokale ip adresse]:7080 backup; } <?php /** @var Template_VariableAccessor $VAR */ ?> |
[lokale ip adresse] ersetzen Sie bitte durch die Adresse, über die Ihre Webseite erreichbar ist.
Der Upstream Server dient nun als Deklaration, woher der NGinx seine Daten bekommen soll, sobald er als proxy_pass den Namen des Upstreams übergeben bekommen hat.
Sollte der Varnish Cache mal nicht Online sein, verwendet NGinx den Apache Server da dieser als Backup Verbindung hinterlegt ist.
Kopieren Sie die default/domain/service/proxy.php Datei in den custom/domain/service Ordner.
Bearbeiten Sie diese nun wie folgt (custom/domain/service/proxy.php):
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
<?php /** * @var Template_VariableAccessor $VAR * @var array $OPT */ ?> <?php if ($OPT['ssl']) { ?> proxy_pass https://<?php echo $OPT['ipAddress']->proxyEscapedAddress . ':' . $OPT['backendPort'] ?>; <?php } else { if (file_exists("/etc/varnish/".$VAR->domain->asciiName.".enable")) { ?> proxy_pass http://backend_varnish; <?php } else { ?> proxy_pass http://<?php echo $OPT['ipAddress']->proxyEscapedAddress . ':' . $OPT['backendPort'] ?>; <?php } ?> <?php } ?> proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; <?php if (!$VAR->domain->physicalHosting->proxySettings['nginxTransparentMode'] && !$VAR->domain->physicalHosting->proxySettings['nginxServeStatic']): ?> proxy_set_header X-Accel-Internal /internal-nginx-static-location; <?php endif ?> access_log off; |
An der file_exists Funktion läßt sich gut sehen, dass das Script erst prüft, ob eine Datei im /etc/varnish ordner liegt, die als Namen den Domainnamen gefolgt von .enable hat (z.B. lcube-webhosting.de.enable). Ist dies der Fall wird der Varnish aktiviert. Wenn nicht, werden die Dateien normal vom Webserver abgerufen. Auf diese Weise kann der Varnish durch setzen einer Datei aktiviert oder deaktiviert werden.
Nach dem setzen oder löschen der enable Datei muss
|
1 |
/usr/local/psa/admin/bin/httpdmng --reconfigure-all |
ausgeführt werden.
Ggf. muss ein Addon installiert werden. Für Magento kommt z.B. Turpentine in Frage.
Nicht für jede Anwendung ist der Varnish Cache geeignet. Wenn viele Dynamische Daten abgerufen werden und die Aktualität der Daten von entscheidender Bedeutung ist (z.B. bei Warenkörbe sowie beim SVN Hosting oder Git Hosting) sollte man entsprechende URLs in die Ausnahmen eintragen bzw. auf Varnish verzichten.


Hallo,
zunächst vielen Dank für diesen sehr guten Artikel !!
Ich habe versucht, das gleiche mal unter Plesk 12 nachzustellen – leider landen die enabled Sites alle nur auf der Plesk Default-Startseite.
Irgendeine Idee ?
VG
Hallo,
die Frage wäre erstmal, ob alle Konfigurationen vom Plesk einwandfrei übernommen wurden.
Befindet sich im NGinx Ordner für die enstprechende Domain die Plesk Konfigurationsdatei mit dem Paramater proxy_pass http://backend_varnish?
LG
Hallo,
ich habe den Fehler gefunden – in der /etc/varnish/default.vcl muss bei Plesk 12 anstatt 127.0.0.1 die öffentliche IP des Servers eingetragen werden.
Vielen Dank für die Konfig !!
VG
hi, super Anleitung, lieder habe ich jetzt die Plesk 12 Version dort komme ich nicht mit der
upstream backend_varnish {
server 127.0.0.1:6081;
server [lokale ip adresse]:7080 backup;
}
in der custom/nginx.php klar
diesen Eintrag gibt es dort nicht.
hast du vielleicht ein Tipp?
Hallo,
Sorry. Ich werde die Anleitung anpassen.
Diese Section gibt es nicht sondern muss in der Datei neu erstellt werden.
Am Besten gleich oben Zeile 2 oder 3.
Gruß
Lars
Hallo, besten Dank für die Anleitung. Varnish läuft. Allerdings habe ich ein Problem: Bei einem Test wird gemeldet, dass Varnish zwar läuft, aber nichts cachen kann weil max-age=0.
Ich habe das in der htaccess gesetzt. Trotzdem erhalte ich den Fehler. Was mache ich falsch? Besten Dank für eine Antwort
Hallo,
ist turpentine installiert?
Was sagt varnishstat?
Gruß
Lars
Hallo,
mittlerweile habe ichs hinbekommen, Problem gelöst. Es lag zum einen daran, dass ich Varnish 4 laufen hatte und keine passende VCL dafür hatte.
Jetzt habe ich Varnish 3 und eine passende VCL für die Magento Extension Phoenix Varnish Cache, und siehe da, es klappt und Seiten werden gecachet.
Das war wohl zu früh gefreut. Varnish läuft zwar, aber es wird nichts gecached. Hier der Header:
HTTP/1.1 200 OK
Server: nginx
Date: Tue, 13 Oct 2015 11:12:39 GMT
Content-Type: text/html; charset=UTF-8
Content-Length: 18956
Connection: keep-alive
X-Powered-By: PleskLin
X-Cache-Debug: 1
Vary: Accept-Encoding
Content-Encoding: gzip
X-Purge-URL: /
X-Purge-Host: kolkmeyer.joergmaertin.de
Accept-Ranges: bytes
X-Varnish: 1314146646
Via: 1.1 varnish
X-Cache: MISS
X-Cache-Expires: Mon, 31 Mar 2008 10:00:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Expires: Mon, 31 Mar 2008 10:00:00 GMT
HTTP/1.1 200 OK
Server: nginx
Date: Tue, 13 Oct 2015 11:12:39 GMT
Content-Type: text/html; charset=UTF-8
Content-Length: 18956
Connection: keep-alive
X-Powered-By: PleskLin
X-Cache-Debug: 1
Vary: Accept-Encoding
Content-Encoding: gzip
X-Purge-URL: /
X-Purge-Host: kolkmeyer.joergmaertin.de
Accept-Ranges: bytes
X-Varnish: 1314146646
Via: 1.1 varnish
X-Cache: MISS
X-Cache-Expires: Mon, 31 Mar 2008 10:00:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Expires: Mon, 31 Mar 2008 10:00:00 GMT
Age: 0
Ich hab schon die Expires von NGinx und Apache geändert in den vhosts-Dateien, natürlich sind die Expires und Cache-Anweisungen auch in der htaccess-Datei.
Das Ergebnis bleibt immer das gleiche.
Was sagt denn varnishstat wird überhaubt irgendwas abgerufen oder sind nur MISS vorhanden?
Hallo,
Wir benutzen Plesk 12.5. Ist die setting bei diese tutorial für „run php as“ eingestellt auf „FPM application served by nginx“ oder „FPM application server by Apache“? Oder ist beide möglich?
Vielen Dank!
Ronald