ПРОЕКТЫ 


  АРХИВ 


Apache-Talk @lexa.ru 

Inet-Admins @info.east.ru 

Filmscanners @halftone.co.uk 

Security-alerts @yandex-team.ru 

nginx-ru @sysoev.ru 


  СТАТЬИ 


  ПЕРСОНАЛЬНОЕ 


  ПРОГРАММЫ 



ПИШИТЕ
ПИСЬМА












     АРХИВ :: nginx-ru
Nginx-ru mailing list archive (nginx-ru@sysoev.ru)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: on demand proxy_store



> Всем добрый день.
> Захотелось сделать зеркало 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, поетому все что может устареть чищу кроном
_______________________________________________
nginx-ru mailing list
nginx-ru@xxxxxxxxx
http://nginx.org/mailman/listinfo/nginx-ru


 




Copyright © Lexa Software, 1996-2009.