Syscp: nginx 0.8.54-3 mit Ramdisk-Cache

0

Nachdem ich hier beschrieben habe, wie man sich ein aktuelles Debian-Paket von nginx zusammen baut, möchte ich nun kurz erläutern, wie man mit Syscp zusammen mit nginx einen Ramdisk-Cache betreiben kann.

Der Vorteil dieser Konstruktion dürfte klar auf der Hand liegen. Nginx ist von hause aus schon schnell. Kann nginx jedoch auf Daten aus dem RAM zugreifen, so wird dies noch um einiges schneller.

Installation

Installiert habe ich ein selbst compiliertes nginx in der Version 0.8.54-3. Indem Archiv sind folgende Pakete enthalten:

  • nginx_0.8.54-3_all.deb
  • nginx_0.8.54-3_amd64.changes
  • nginx_0.8.54-3.dsc
  • nginx-doc_0.8.54-3_all.deb
  • nginx-extras_0.8.54-3_amd64.deb
  • nginx-extras-dbg_0.8.54-3_amd64.deb
  • nginx-full_0.8.54-3_amd64.deb
  • nginx-full-dbg_0.8.54-3_amd64.deb
  • nginx-light_0.8.54-3_amd64.deb
  • nginx-light-dbg_0.8.54-3_amd64.deb

nginx-full-dbg_0.8.54-3_amd64.deb wurde mit dem purge Modul v1.2 zusammen compiliert.

Konfiguration

Zur Konfiguration von nginx muss einmal die /etc/nginx/nginx.conf sowie eine Konfigurations-Datei für die entsprechende Webseite erstellt bzw. angepasst werden. In meinem Fall heißt die Konfugurations-Datei /etc/nginx/blog.cscholz.io.conf. Des weiteren wird ein Start-Skript für php(5)-cgi benötigt, welches ich unter /etc/init.d/php-cgi abgelegt habe. Ich möchte nicht auf die gesamte Konfiguration eingehen, jedoch auf die wichtigsten Punkte.

Ramdisk

Um die Ramdisk anzulegen, muss lediglich eine Zeile in der /etc/fstab hinzugefügt werden.

/dev/shm   /var/www/nginx_cache  tmpfs defaults,noexec,nodev,nosuid, 
size=52m,mode=750,uid=33,gid=33 0 0

In diesem Fall wird die Ramdisk unter /var/www/nginx_cache eingebunden. Die Größe sind 52MB und uid & gid stehen auf 33, was die ID des Benutzers ist mit dem Apache2 läuft entspricht.

nginx.conf

Die entscheidenden Zeilen in der /etc/nginx/nginx.conf zur Cache-Konfiguration sind:

proxy_cache_path  /var/www/nginx_cache  levels=1:2  
keys_zone=staticfilecache:52m inactive=1d max_size=52m;
fastcgi_cache_path  /var/www/nginx_cache/fastcgi levels=1:2 
keys_zone=php:30m inactive=1d max_size=30m;

Hier wird der Pfad, die Größe sowie die Cache-Dauer der Elemente eingestellt.

Der Abschnitt upstream backendserver ist für alle die interessant, die ihre Webseite auf mehreren Server haben. Hier können mehrere Server eingetragen werden, die Anschließend nach der vergebenen Gewichtung angefragt werden.

blog.cscholz.io.conf

Hier werden alle Websiten spezifischen Einstellungen vorgenommen. Pro location können hier unterschiedliche Einstellungen gesetzt werden. Es macht zum Beispiel Sinn, die wp-admin Seite nicht zu cachen, da sonst ein Login auf der Webseite im Admin-Bereich nicht mehr möglich ist.

location ~ /wp-admin/.*.php {
 # don't cache admin sitesi, get direct from folder
 index  index.php index.html index.htm;
 send_timeout 1800;
 fastcgi_read_timeout 1800;
 fastcgi_ignore_headers  Cache-Control  Expires;
#            fastcgi_pass   127.0.0.1:9000;
 fastcgi_pass unix:/var/lib/apache2/fcgid/sock/php-fastcgi.socket;
 fastcgi_index  index.php;
 fastcgi_param  SCRIPT_FILENAME /var/kunden/webs/cscholz/blog.cscholz.io/$fastcgi_script_name;
 include        /etc/nginx/fastcgi_params;

fastcgi_pass gibt hierbei an, auf welchem Port/socket php(5)-cgi zu finden ist. Ich habe mich für die Socket Konfiguration entschieden. Die Port Möglichkeit habe ich lediglich auskommentiert. Ob Port oder Socket Kommunikation kann in der php-fcgi eingestellt werden.

php-fcgi

#!/bin/bash
#BIND=127.0.0.1:9000
BIND=/var/lib/apache2/fcgid/sock/php-fastcgi.socket
USER=www-data
PHP_FCGI_CHILDREN=15
PHP_FCGI_MAX_REQUESTS=1000

PHP_CGI=/usr/bin/php5-cgi
PHP_CGI_NAME=`basename $PHP_CGI`
PHP_CGI_ARGS="- USER=$USER PATH=/usr/bin PHP_FCGI_CHILDREN=$PHP_FCGI_CHILDREN PHP_FCGI_MAX_REQUESTS=$PHP_FCGI_MAX_REQUESTS $PHP_CGI -b $BIND"
[...]

Wer anstelle des Sockets über einen Port gehen möchte, braucht lediglich die BIND Zeilen entsprechend um zu kommentieren.

Links:

Teilen.

Über den Autor

Seit der Ausbildung zum Fachinformatiker Systemintegration (2002-2005) bei der DaimlerChrysler AG, beruflich im Bereich der E-Mail Kommunikation (Exchange, Linux) sowie des ActiveDirectory, mit entsprechenden Zertifizierungen (MCSE 2003, MCITP Ent.-Admin 2008, MCSE 2012, LPIC 1-3) tätig. Abgeschlossenes Studium zum Master of Science der IT-Management an der FOM sowie zertifizierter Datenschutzbeauftragter. Aktuell im Projektmanagement tätig.

Antworten