on demand proxy_store

Vasiliy G Tolstov v.tolstov на selfip.ru
Вт Ноя 30 17:50:23 MSK 2010


On Wed, 2010-11-17 at 14:42 +0200, Olexander Shtepa wrote:

> 
> Из недостатков:
>  - nginx екранирует символ + и другие. например libstdc++-4.1.2-48.el5.i386.rpm при закачке превращается в libstdc%2b%2b-4.1.2-48.el5.i386.rpm
>   как боротся не придумал, просто вручную качаю через wget, благо таких файлов мало.

Модифицировал слегка Ваш вариант, для борьбы с плюсами:
в главном конфиге nginx:
  perl_set  $unescape  '
    sub {
      my $r = shift;
      my $ret = $r->uri;
      $ret =~ s/\/[a-zA-Z0-9\.]*//;
      return $ret;
    }
  ';


в конфиге зеркала:
  location ~ ^/fetch/([^/]+)(/.*)$ {
    internal;
    set $site $1;
    set $file $2;
    alias                /srv/www/$domain/$1$2;
    proxy_pass           http://$site$file;
    proxy_store          on;
    proxy_store_access   user:rw  group:rw  all:r;
    proxy_temp_path      /srv/www/mirror.selfip.ru/tmp;
    proxy_ignore_headers X-Accel-Redirect X-Accel-Expires Expires
Cache-Control;
  }

  location ~ ^/([^/]+)(/.*)$ {
    set $site $1;
    set $file $unescape;
    root       /srv/www/$domain;
    error_page 404 403 = /fetch/$site$file;
  }

Если кто-то предложит вариант без встроенного Perl буду рад :).
С апстримами пока что не пробовал еще...




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