APT в ALT Linux/NginxAsCache: различия между версиями

Материал из ALT Linux Wiki
Нет описания правки
(Слил изменения)
Строка 2: Строка 2:
{{Викифицировать}}
{{Викифицировать}}


== Использование nginx как кэширующего прокси для APT ==
== Использование nginx как кэширующего прокси для APT<ref>[http://gns-ua.livejournal.com/114453.html этой публикации gns]</ref> ==


При использовании дистрибутивов ALT Linux или Sisyphus часто требуется локальное частичное зеркало APT-источников: для раздачи пакетов группе машин в локальной сети, для разработки и других потребностией. Локальное - для хорошей скорости доступа, частичное - для экономии времени и трафика, которые уходят на поддержание [[Apt/Mirror|полного зеркала]].
При использовании дистрибутивов ALT Linux или Sisyphus часто требуется локальное частичное зеркало APT-источников: для раздачи пакетов группе машин в локальной сети, для разработки и других потребностией. Локальное - для хорошей скорости доступа, частичное - для экономии времени и трафика, которые уходят на поддержание [[Apt/Mirror|полного зеркала]].
Строка 13: Строка 13:


'''nginx.conf''':
'''nginx.conf''':
<pre>location /altlinux/ {
http {
        root /var/www/;
    types_hash_bucket_size 64; # Для nginx < 0.5.35-alt1.1
        error_page 404 = /fetch$uri;
    location /altlinux/ {
}
        root /var/www/;
 
        error_page 404 = /fetch$uri;
location /fetch/altlinux/alt/ {
    }
        internal;
        proxy_pass http://ftp.altlinux.org/;
    location /fetch/altlinux/alt/ {
        proxy_store /var/www/$request_uri;
        internal;
}
        proxy_pass http://ftp.altlinux.org/;
 
        proxy_store /var/www/$request_uri;
location /fetch/altlinux/kiev/ {
    }
        internal;
        proxy_pass http://ftp.linux.kiev.ua/;
    location /fetch/altlinux/kiev/ {
        proxy_store /var/www/$request_uri;
        internal;
}</pre>
        proxy_pass http://ftp.linux.kiev.ua/;
        proxy_store /var/www/$request_uri;
    }


'''/etc/apt/sources.list''':
'''/etc/apt/sources.list''':
<pre>rpm http://**NGINX HOST**/altlinux/alt/pub/Linux/ALT/updates/4.0/ i586 updates
rpm http://**NGINX HOST**/altlinux/alt/pub/Linux/ALT/updates/4.0/ i586 updates
rpm http://**NGINX HOST**/altlinux/alt/pub/Linux/ALT/4.0/branch/ i586 classic
rpm http://**NGINX HOST**/altlinux/alt/pub/Linux/ALT/4.0/branch/ i586 classic
rpm http://**NGINX HOST**/altlinux/alt/pub/Linux/ALT/4.0/branch/ noarch classic</pre>
rpm http://**NGINX HOST**/altlinux/alt/pub/Linux/ALT/4.0/branch/ noarch classic


И сделать
И сделать
<pre>mkdir /var/www/altlinux
mkdir /var/www/altlinux
chown _nginx:_nginx /var/www/altlinux</pre>
chown _nginx:_nginx /var/www/altlinux


=== Более умная конфигурация nginx ===
=== Более умная конфигурация nginx ===
Строка 44: Строка 46:


'''nginx.conf''':
'''nginx.conf''':
<pre>location /altlinux/ {
location /altlinux/ {
    root /var/www/;
    root /var/www/;
    error_page 404 = /fetch$uri;
    error_page 404 = /fetch$uri;
    error_page 403 = /fetch$uri;
    error_page 403 = /fetch$uri;
}
}
 
location /fetch/altlinux/ {
location /fetch/altlinux/ {
    internal;
    internal;
    proxy_pass http://ftp.altlinux.org/pub/distributions/ALTLinux/;
    proxy_pass http://ftp.altlinux.org/pub/distributions/ALTLinux/;
    proxy_store /var/www/$request_uri;
    proxy_pass http://ftp.linux.kiev.ua/pub/Linux/ALT/;
}
 
location /fetch/altlinux/ {
    proxy_store /var/www/$request_uri;
    internal;
}</pre>
    proxy_pass http://ftp.linux.kiev.ua/pub/Linux/ALT/;
    proxy_store /var/www/$request_uri;
}


'''/etc/apt/sources.list''':
'''/etc/apt/sources.list''':
<pre>rpm http://**NGINX HOST**/altlinux/4.0/branch/ i586 classic
rpm http://**NGINX HOST**/altlinux/4.0/branch/ i586 classic
rpm http://**NGINX HOST**/altlinux/4.0/branch/ noarch classic</pre>
rpm http://**NGINX HOST**/altlinux/4.0/branch/ noarch classic


=== Известные проблемы ===
=== Известные проблемы ===
Строка 73: Строка 77:
Эта команда удалит из локального репозитория все файлы, которых нет на сервере, и заодно обновит индексы.
Эта команда удалит из локального репозитория все файлы, которых нет на сервере, и заодно обновит индексы.


=== Информация об авторе ===
=== Ссылки ===
 
Взято из [http://gns-ua.livejournal.com/114453.html этой публикации gns].
 
 
=== Добавлено 24.03.08 by Черносов Денис ===
Пробовал внедрить рецепт на версии nginx-0.5.33-alt1.M40.1
 
обнаружил, что помещение нескольких директив proxy_pass в  один раздел location приводит к ошибке такого вида:
<pre># service nginx restart
Checking configuration sanity for nginx:  2008/03/21 13:42:48 [emerg] 9153#0: "proxy_pass" directive is duplicate in /etc/nginx/nginx.conf:73</pre>
 
Также в моем случае вылезала ошибка:
<pre>Checking configuration sanity for nginx:  2008/03/21 14:09:09 [emerg] 9433#0: could not build the types_hash, you should increase types_hash_bucket_size: 32</pre>
 
После модификаций конфиги выглядят следующим образом:
 
'''/etc/apt/sourses.list'''
<pre>rpm http://localhost/altlinux/updates/4.0/ i586 updates
 
####optional
#rpm http://localhost/altlinux/4.0/branch i586 classic
#rpm http://localhost/altlinux/4.0/branch noarch classic
 
#rpm http://localhost/altlinux/4.0/Server/current i586 main
#rpm http://localhost/altlinux/4.0/Server/current i586 classic
 
#rpm http://localhost/altlinux/backports/4.0/ i586 backports</pre>
 
'''/etc/nginx/nginx.conf'''
<pre>http {
...
      types_hash_bucket_size 64;
...
        location /fetch/altlinux/ {
            internal;
            proxy_pass http://ftp.heanet.ie/mirrors/ftp.altlinux.org/;
            proxy_store /var/www/$request_uri;
        }
 
        location /fetch/altlinux/ {
            internal;
            proxy_pass http://ftp.linux.kiev.ua/pub/Linux/ALT/;
            proxy_store /var/www/$request_uri;
        }
 
        location /fetch/altlinux/ {
            internal;
            proxy_pass http://mirror.yandex.ru/altlinux/;
            proxy_store /var/www/$request_uri;
        }


        location /fetch/altlinux/ {
<references/>
            internal;
            proxy_pass http://ftp.altlinux.org/pub/distributions/ALTLinux/;
            proxy_store /var/www/$request_uri;
        }
...</pre>

Версия от 09:09, 8 ноября 2008

Freesource-logo.png Blue Glass Arrow.svg MediaWiki logo.png
Эта страница была перемещена с freesource.info.
Эта страница наверняка требует чистки и улучшения — смело правьте разметку и ссылки.
Просьба по окончанию убрать этот шаблон со страницы.
42px-Wikitext-ru.svg.png
Эту статью следует викифицировать.


Использование nginx как кэширующего прокси для APT[1]

При использовании дистрибутивов ALT Linux или Sisyphus часто требуется локальное частичное зеркало APT-источников: для раздачи пакетов группе машин в локальной сети, для разработки и других потребностией. Локальное - для хорошей скорости доступа, частичное - для экономии времени и трафика, которые уходят на поддержание полного зеркала.

Очевидное решение: вытаскивать из /var/cache/apt/archives или /hasher/aptbox пакеты, запускать genbasedir и подключать результат как локальный репозитарий. Очевидный недостаток: теряется информация о конкретном источнике пакета. Если подключен и бранч, и сизиф, то полученный репозитарий нельзя использовать на другой машине, которую желательно оставить на бранче.

nginx >= 0.5.31 позволяет организовать локальный частичный миррор, лишённый этого недостатка.

Конфигурация nginx

nginx.conf:

http {
    types_hash_bucket_size 64; # Для nginx < 0.5.35-alt1.1
    location /altlinux/ {
        root /var/www/;
        error_page 404 = /fetch$uri;
    }

    location /fetch/altlinux/alt/ {
        internal;
        proxy_pass http://ftp.altlinux.org/;
        proxy_store /var/www/$request_uri;
    }

    location /fetch/altlinux/kiev/ {
        internal;
        proxy_pass http://ftp.linux.kiev.ua/;
        proxy_store /var/www/$request_uri;
    }

/etc/apt/sources.list:

rpm http://**NGINX HOST**/altlinux/alt/pub/Linux/ALT/updates/4.0/ i586 updates
rpm http://**NGINX HOST**/altlinux/alt/pub/Linux/ALT/4.0/branch/ i586 classic
rpm http://**NGINX HOST**/altlinux/alt/pub/Linux/ALT/4.0/branch/ noarch classic

И сделать

mkdir /var/www/altlinux
chown _nginx:_nginx /var/www/altlinux

Более умная конфигурация nginx

Чтобы пользователи APT не заботились о том, на какое зеркало настроен nginx, его нужно слегка перенастроить:

nginx.conf:

location /altlinux/ {
    root /var/www/;
    error_page 404 = /fetch$uri;
    error_page 403 = /fetch$uri;
}
location /fetch/altlinux/ {
    internal;
    proxy_pass http://ftp.altlinux.org/pub/distributions/ALTLinux/;
    proxy_store /var/www/$request_uri;
}
location /fetch/altlinux/ {
    internal;
    proxy_pass http://ftp.linux.kiev.ua/pub/Linux/ALT/;
    proxy_store /var/www/$request_uri;
}

/etc/apt/sources.list:

rpm http://**NGINX HOST**/altlinux/4.0/branch/ i586 classic
rpm http://**NGINX HOST**/altlinux/4.0/branch/ noarch classic

Известные проблемы

nginx - это все-таки не настоящий кэширующий прокси, и обновлять сохраненные файлы он не намерен независимо от Last-Modified. Сами пакеты меняться не могут, поэтому это составляет проблему только для индексов APT, так что необходимо периодически делать

find /var/www/altlinux/ -type d -name base -exec rm -rf '{}' \;

Если пакеты на сервере обновляются, в нашем кэше будут накапливаться старые версии. Почистить можно так:

rsync -r --delete-before --existing rsync://ftp.altlinux.org/ALTLinux/ /var/www/altlinux/

Эта команда удалит из локального репозитория все файлы, которых нет на сервере, и заодно обновит индексы.

Ссылки