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:

    Leave A Reply