@Galdar
Web, JS, PHP, NGINX, Linux

Как скачать файл, используя NGINX?

Прошу помочь разобраться, нужно заставить скачивается файл при нажатии на него, не могу понять как работает скачивание через NGINX.
...
    case '5':
            $c = mysqli_fetch_assoc(connectTables("ЗАПРОС"));
            $file = mysqli_fetch_assoc(connectTables("ЗАПРОС"));

            header("X-Accel-Redirect: /access_files/".$file["img"]);
        break;
...

location /downloads/ {
      rewrite ^/downloads/(.*) /down.php?file_name=$1 break;
      fastcgi_pass   unix:/tmp/fastcgi_socket;
      fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
      include        fastcgi_params;
    }
    location /access_files {
        alias /var/www/chat.sms-agent/chatImages;
        add_header Content-type application/octet-stream;
        internal;
    }


sim3x опишите задачу в вопросе
Задача состоит в том, чтобы при нажатии на файл AJAX запускал PHP файл с нужными данными, после, PHP файл производит проверку и отдает файл на скачку по фейковой ссылке пользователю.
  • Вопрос задан
  • 1757 просмотров
Решения вопроса 1
@Galdar Автор вопроса
Web, JS, PHP, NGINX, Linux
ОТВЕТ НА ВОПРОС
config.nginx
rewrite ^/f/(.*)/(.*)$ /downloadFile.php?id=$1&file=$2 last;

    location /file/ {
      internal;
      root /var/www/domain/c;
    }


AJAX
/* ваш скрипт функция которая будет генерировать или как то там вставлять ссылки на ваши файлы */
$('#c').append('<p id="" class="from-me downloadFile"><a href="/f/'+id+'/'+idImage+'" class="download" download><img src="'+url+'" class="downloadImage"/></a><i class="fas fa-file-download"></i><span class="size">'+size+'</span></p>');


сам php к которому делается запрос
// все проверки по которым будет подставляться нужный файл
...
header('Content-Length: '.$filesize);
header('Content-Type: '.$type); // Тип файла по его расширению
header('Content-Disposition: attachment; filename='.$filename); // Имя файла
header('Content-Transfer-Encoding: binary');
header('Cache-Control: must-revalidate');
header('X-Accel-Limit-Rate: 1024000'); // Ограничение скорости скачивания
header('X-Accel-Buffering: yes');
header('X-Accel-Charset: utf-8');
header('X-Accel-Redirect: '.$files); // Путь к папке для правил редиректа nginx
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы