on demand proxy_store

Vasiliy G Tolstov v.tolstov на selfip.ru
Ср Ноя 17 15:45:12 MSK 2010


On Wed, 2010-11-17 at 14:42 +0200, Olexander Shtepa wrote:
> > Всем добрый день.
> > Захотелось сделать зеркало debian и тп, но не полное, а по запросу с
> > юзерский серверов. В итоге хранить самый употребительный минимум
> > постоянно, остальное только некоторое время.
> > 
> > Прочел про proxy_store/upstream но есть проблема - если я в апстриме
> > пропишу mirror.yandex.ru, то надо делать set_header на его хост, если я
> > в апстриме укажу, например 5 разных серверов, мне каким-то образом надо
> > знать как передать им правильный Host:... 
> > 
> > Кто-то уже пробовал реализовать такое?
> 
> С целью поиграться создал у себя такую схему:
> nginx-0.7.67
> 
>     resolver 192.168.1.110;
> 
>     server {
>         listen 192.168.1.4:80;
>         server_name repo.local.priv;
> 
>         location ^~ /local/ {
>             alias /data/repo/;
>         }
>                                                                                                                                                             
>         location ~ ^/fetch/([^/]+)(/.*)$ {                                                                                                                  
>             internal;                                                                                                                                       
>             set $site $1;                                                                                                                                   
>             set $file  $2;                                                                                                                                  
>             alias                /data/repo_cache/$1$2;                                                                                                     
>             proxy_pass           http://$site$file;                                                                                                         
>             proxy_store          on;                                                                                                                        
>             proxy_store_access   user:rw  group:rw  all:r;                                                                                                  
>             proxy_temp_path      /data/repo_cache_tmp;                                                                                                      
>             proxy_ignore_headers X-Accel-Redirect X-Accel-Expires Expires Cache-Control;                                                                    
>         }                                                                                                                                                   
>                                                                                                                                                             
>         location ~ ^/([^/]+)(/.*)$ {                                                                                                                        
>             set $site $1;                                                                                                                                   
>             set $file $2;                                                                                                                                   
>             root       /data/repo_cache;
>             error_page 404 = /fetch/$site$file;
>         }
>     }
> 
> /data/repo - локальные файлы
> /data/repo_cache - закешированые файлы
> /data/repo_cache_tmp - каталок для временных файлов
> 
> Обращение происходит по так:
> к локальным файлам - http://repo.local.priv/local/CentOS-5/i386/nginx-0.7.67-1.el5.centos.i386.rpm
> кеширующий запрос - http://repo.local.priv/mirror.centos.org/centos/5/updates/i386/RPMS/python-2.4.3-27.el5_5.3.i386.rpm
> 
> Работает кеширование так:
> по УРЛУ http://repo.local.priv/mirror.centos.org/centos/5/updates/i386/RPMS/python-2.4.3-27.el5_5.3.i386.rpm
> проверяется файл /data/repo_cache/mirror.centos.org/centos/5/updates/i386/RPMS/python-2.4.3-27.el5_5.3.i386.rpm
> если его нету, то делается запрос http://mirror.centos.org/centos/5/updates/i386/RPMS/python-2.4.3-27.el5_5.3.i386.rpm и файл сохраняется.
> 
> Из плюсов:
>  - удобная и понятная иерархия закешированых файлов
> Из недостатков:
>  - nginx екранирует символ + и другие. например libstdc++-4.1.2-48.el5.i386.rpm при закачке превращается в libstdc%2b%2b-4.1.2-48.el5.i386.rpm
>   как боротся не придумал, просто вручную качаю через wget, благо таких файлов мало.
>  - нету TTL, поетому все что может устареть чищу кроном
> _______________________________________________


Без апстрима я такое тоже делал, спасибо :). Просто хотел сделать
failover через апстрим, мало ли маршрут до яндекса ляжет :)

-- 
Vasiliy G Tolstov <v.tolstov at selfip.ru>
Selfip.Ru




Подробная информация о списке рассылки nginx-ru