Pull to refresh

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.
Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.