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.