Было желание создать сервис, аналогичный letitbit.net, в одной стране на окраине Европы.
Необходимый:
- позволяют загружать/загружать большие файлы;
- не разрешать повторную публикацию прямых ссылок на файлы;
- ограничить количество одновременно загружаемых файлов.
- поразительнй Модуль загрузки Nginx , что позволяет избежать многократного копирования загруженного файла по пути NGINX-PHP. Кроме того, после небольшой модификации можно загружать файлы прямо в нужную папку, что позволяет использовать простое переименование вместо копирования в PHP.
- необходимый пластырь к модулю secure_link, который позволяет сделать безопасные ссылки действительными в течение ограниченного времени.
Мы установили сервер и запихнули в него диски объемом около 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
-
80% Вашего Веб-Сайта Требует Обслуживания
19 Oct, 24 -
Орден Кризалис
19 Oct, 24 -
100. С Точным Капитальным Временем!
19 Oct, 24