nginx direkt von memcached lesen lassen

nginx kann ganze Seiten direkt aus memcached auslesen. D.h., wenn eine Webanwendung die Möglichkeit hat, ganze Seiten in memcached abzulegen, kann nginx diese Seite vom memcached auslesen und den kompletten PHP/MySQL-Stack umgehen. Eine Beispielkonfiguration in einem nginx-Vhost sieht folgendermaßen aus:

[...]
        location ~ \.php$ {
                set $no_cache "";
                if ($query_string ~ ".+") {
                        set $no_cache "1";
                }
                if ($request_method !~ ^(GET|HEAD)$ ) {
                        set $no_cache "1";
                }
                if ($request_uri ~ "nocache") {
                        set $no_cache "1";
                }
                if ($no_cache = "1") {
                        return 405;
                }

                set $memcached_key $host$request_uri;
                memcached_pass     127.0.0.1:11211;
                default_type text/html;
                error_page 404 405 502 = @php;
                expires epoch;
        }

        location @php {
                        try_files $uri =404;
                        include /etc/nginx/fastcgi_params;
                        fastcgi_pass unix:/var/lib/php5-fpm/web1.sock;
                        fastcgi_index index.php;
                        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                        fastcgi_param PATH_INFO $fastcgi_script_name;
                        fastcgi_intercept_errors on;
        }
[...]

Wichtig ist, daß die Webanwendung denselben Key zum Speichern der Seiten in memcached benutzt, den nginx zum Auslesen der Seiten aus memcached benutzt (in diesem Beispiel ist das $host$request_uri), ansonsten funktioniert es nicht.

Wenn Sie viele Daten in memcached speichern, prüfen Sie, ob Sie memcached genügend Arbeitsspeicher zugewiesen haben:

vi /etc/memcached.conf

[...]
# Start with a cap of 64 megs of memory. It's reasonable, and the daemon default
# Note that the daemon will grow to this size, but does not start out holding this much
# memory
-m 512
[...]

Nach oben