Как стать автором
Обновить

1ТБ хранилища на Ваш Dedicated/VPS. Проксируем Яндекс.Диск с помощью Nginx

Яндекс.Диск — это облачное хранилище, которое позволяет получать данные через протокол Webdav. Используя Nginx, можно получать данные из хранилища, настроив прокси на вашем сервере. Данные будут доступны примерно так: static.mydomain.com/bigfile.zip. Данное хранилище подойдет для хранения больших данных с умеренной нагрузкой.

Сразу хочу предупредить, что у схемы есть недостатки:
1. Отдача файлов отсутствующих в кеше приводит к удвоению сетевого трафика;
2. Не известно, как будет пресекать это Яндекс.

Но есть и плюсы: цена за 1 ТБ хранилища всего лишь 200 руб/мес.

Переходим к конфигурации nginx:

server {
    listen 80;
    server_name  static.mydomain.com;


    location / {


           #запрещаем писать
           dav_access all:r;
           client_max_body_size 0;

           create_full_put_path on;

           #готовим заголовок destination для webdav
            set $destination $http_destination;
            if ($destination ~* ^https(.+)$) {
                    set $destination http$1;
            }

            #убираем ненужные заголовки
            ignore_invalid_headers off;
            proxy_ignore_headers "Set-Cookie";
            proxy_ignore_headers Expires Cache-Control;
            proxy_ignore_headers Cache-Control;

     
            proxy_cache cache;
            proxy_cache_valid  200 1m;#1 мин кеша для успешных ответов
            proxy_cache_bypass 0;#всегда используем кеш
            proxy_buffering on;
            proxy_redirect off;
            proxy_cache_use_stale  error timeout http_500 http_502 http_503 http_504;


            proxy_set_header           Host                        webdav.yandex.ru;
            proxy_set_header           Destination             $destination;
            #dm9zZHNzZnZhOjEyMzEyMzIxMzM=  base64 строка ВАШЕГО аккаунта яндекс в формате "login:password" ( http://base64.ru/ )
            proxy_set_header           Authorization "Basic dm9zZHNzZnZhOjEyMzEyMzIxMzM=";



            proxy_pass https://webdav.yandex.ru;

    }

}



Создаем директории для кеша nginx:

mkdir -p  /var/lib/nginx/cache
chown -R www-data /var/lib/nginx/cache
chmod 700 /var/lib/nginx/cache


И не забываем указать параметры самого кеша в файле nginx.conf:

proxy_cache_path /var/lib/nginx/cache levels=1:2 keys_zone=cache:100m max_size=2G;


Проверяем:
1. Загружаем на Яндекс.Диск файл (к примеру song.mp3)
2. Заходим на static.mydomain.com/song.mp3

Для оптимизации хранилища советую увеличить размер кеша на максимально возможный.

P.S. Был вариант с fuse через смонтированный каталог, но такой вариант будет хуже работать на отдачу, чем nginx.
Теги:
Хабы:
Данная статья не подлежит комментированию, поскольку её автор ещё не является полноправным участником сообщества. Вы сможете связаться с автором только после того, как он получит приглашение от кого-либо из участников сообщества. До этого момента его username будет скрыт псевдонимом.