Nginx — Создание Собственного Летитбита

Было желание создать сервис, аналогичный letitbit.net, в одной стране на окраине Европы.

Необходимый:

  • позволяют загружать/загружать большие файлы;
  • не разрешать повторную публикацию прямых ссылок на файлы;
  • ограничить количество одновременно загружаемых файлов.

Для реализации мы выбрали NGINX в связке с PHP через fastcgi. НГИНКС добавил:
  1. поразительнй Модуль загрузки Nginx , что позволяет избежать многократного копирования загруженного файла по пути NGINX-PHP. Кроме того, после небольшой модификации можно загружать файлы прямо в нужную папку, что позволяет использовать простое переименование вместо копирования в PHP.
  2. необходимый пластырь к модулю secure_link, который позволяет сделать безопасные ссылки действительными в течение ограниченного времени.

PHP взял самый распространенный и прогнал его спавн-fcgi .

Мы установили сервер и запихнули в него диски объемом около 12 терабайт. Программист написал PHP-код, а Марис Рускулис придумал следующий трюк с рерайтом для NGINX, который позволяет избежать вызова PHP при загрузке файла.

В результате конфигурация NGINX выглядела примерно так:

http { limit_zone regular $zonekey 10m; limit_zone premium $zonekey 10m; server { root /www/oursiteishere; location / { try_files $uri @files; } location ~ \.

php$ { try_files $uri @files; fastcgi_stuff_here; } location @files { rewrite ^(.

*)$ /index.php?$1 last; } location /storage/ { root /storages/; internal; } # Location for regular users location ~ /download/.

+/(.

+)/0/.

+/.

*/(.

+)$ { set $fname $2; set $username $1; set $zonekey "$binary_remote_addr $username"; limit_conn regular 1; limit_rate '100k'; secure_link_secret megasecret; secure_link_ttl on; if ($secure_link = "") { return 403; } add_header Content-Disposition "attachment; filename*=UTF-8''$fname"; rewrite ^/download/([a-f0-9]+)/([\.

~0-9a-zA-Z_]+)/([01])/([0-9]+)/(.

+)/.

+$ /storage/$4/$5 break; } # Location for premium users # Location for upload using upload module } }

Примечательным в этом конфиге является то, что при скачивании файла по сгенерированной временной ссылке, защищенной от подмены (проверка осуществляется по Secure_link), PHP не вызывается, а затем X-Accel-Перенаправление .

Возможно, это решение накладывает ограничение на наличие логики перед непосредственной передачей файла, но тем не менее, на мой взгляд, это довольно оригинальный трюк, позволяющий немного сэкономить на fastcgi. Теги: #Nginx #fastcgi

Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.