Kiel aldoni kaŝmemoron al nginx-proxy en Docker

Mi gastigas kelkajn retejojn en docker ujoj kaj kelkaj da ili estas Wordpress retejoj, kiuj povas esti iom malrapida. Mi pripensis utiligi HHVM aŭ php-fpm sed unue volis provi simplan kaŝmemoran solvon. Post iom da laboro mi finfine eltrovis la solvon kaj ĝi estas sube. Ĝi antaŭsupozas ke vi jam konas kiel krei Dockerfile kaj munti portilojn en Docker.

Unue, mi aldonis dosieron al la nginx-proxy konservaĵo. Do mia simpla Dockerfile aspektis jene

Dockerfile

FROM jwilder/nginx-proxy

ADD proxy.conf /etc/nginx/proxy.conf

kaj la nova proxy.conf jene

/etc/nginx/proxy.conf:

proxy_cache_path /var/cache/nginx_cache levels=1:2 keys_zone=cxefa:10m max_size=1g  use_temp_path=off;

Kio tion signifas.

  • proxy_cache_path la dosiervojo por la kaŝmemoro
  • levels (niveloj): multfojo la dosierujo povas kreski kaj enhavi tro da dosieroj, do tio signifas uzi subdosierujoj por helpi
  • keys_zone (ŝlosila ejo): la nomo do la kaŝmemoro kaj la unua grandeco
  • max_size (maksimuma grandeco): la plej granda grandeco por la kaŝmemoro
  • use_temp_path (uzu portempan dosierujon): oni povas agordi la kaŝmemoron uzi apartan dosierujon por unue savi la dosierojn antaŭ la translokiĝo al la kaŝmemoro.

Per tio oni havas kaŝmemoron, sed nun por uzi ĝin, nginx-proxy povas uzi portilon por la vhosts dosierujon. Ni bezonas meti la agordojn en la sekcio de loko (location section) de la vhost dosiero do ni povas uzi default_location (baza loko).

/etc/nginx/vhosts/default_location:

proxy_cache cxefa;
proxy_cache_key $scheme$host$uri$is_args$args;
proxy_cache_valid 5m; 
proxy_cache_use_stale error
                      timeout
                      invalid_header
                      http_500
                      http_502
                      http_504
                      http_404;

La unua linio diras uzi la cxefa kaŝmemoron, la dua linio agordas la kaŝmemora ŝlosilo, la trio la tempdaŭro por la kaŝmemoro kaj la lasta linio diras uzi la kaŝmemoro se la fonta servilo de respondas.

Nun, en mia kazo mi peras Wordpress servilon, do mi aldonis du ŝanĝojn. Unue mi bezonis krie variaĵon se la uzanto estas aŭtentigata.

/etc/nginx/vhosts/default:

set $wordpress_auth "";
if ($http_cookie ~* "wordpress_logged_in_[^=]*=([^%]+)%7C") {
  set $wordpress_auth wordpress_logged_in_$1;
}

Due je la fino de default_location mi aldonis

/etc/nginx/vhosts/default_location:

proxy_cache_bypass $wordpress_auth;
proxy_no_cache $wordpress_auth;

Por uzi la variaĵon en default kaj por ne uzi la kaŝmemoron.

Kun ĉio ĉi mi povas uzi la ab ilon kaj kontroli ke miloj da uzantoj povas uzi la sistemon samtempe.