LINUX.ORG.RU

Не получается отдать файл через nginx

 


0

1

Добрый день, уважаемый All. Вроде всё просто, скрипт генерирует ссылки вида: «/download/1.pdf», «/download/2.pdf», «/download/etc.pdf» Реально они лежат по пути: /tmp/1.pdf, /tmp/2.pdf, /tmp/etc.pdf Нужно «отдать» готовую статику, сначала пытался так:

location ~ ^/download/.*\.pdf$ {
   root /domain.name/tmp/;
   add_header Content-Disposition "attachment";
   add_header Content-Type application/octet-stream;
}
Не получается, при запросе domain.name/download/1.pdf почему-то открывается главная. Попробовал вместо root написать alias:
location ~ ^/download/.*\.pdf$ {
   alias /domain.name/tmp/;
   add_header Content-Disposition "attachment";
   add_header Content-Type application/octet-stream;
}
- С тем же результатом.

Попробовал тупо в лоб:

location /download {
   root /domain.name/tmp/;
   add_header Content-Disposition "attachment";
   add_header Content-Type application/octet-stream;
}
- Тоже не отдаёт файл...

Как правильно составить конфиг-то?! ))


Положите файлы не в /tmp, а в поддиректорию где у вас лежит сайт.

anonymous
()

alias /domain.name

Директория domain.name наодится в корне файловой системы?

MrClon ★★★★★
()

По поводу путей, sorry - путанно описал. Есть папка: /var/www/domain.name/ В ней у меня 2 подпапки: ./www и ./tmp В папке /var/www/domain.name/www лежит «сайт» (скрипты/стили/медиа) На папку /var/www/domain.name/tmp розданы права записи по ftp, самой папке установлен cmod 777, в неё из самых разных источников сливается статика (pdf в том числе). Да, nginx из этой папки должен только отдавать файлы на скачивание, но ни в коем случае не запускать их, потому что мало ли кто что туда закинет.

В то же время, не хочется в ссылках на сайте, в путях, писать всякие www/current/dir/../../../tmp/123.pdf

Поэтому хотелось на сайте показывать их все как /download/123.pdf А в nginx'e парсить урл запроса и если видим, что «просится» download + pdf, то отдавать $1.pdf файл из папки /var/www/domain.name/tmp

Как-то так... ))

nk_lg
() автор топика

Попробуйте:

location ~ ^/download/(.*\.pdf)$ {
   alias /domain.name/tmp/$1;
   add_header Content-Disposition "attachment";
   add_header Content-Type application/octet-stream;
}

Ну и внимательнее перечитайте описание директив alias и location.

vinvlad ★★
()
Ответ на: комментарий от nk_lg

По поводу путей, sorry - путанно описал. Есть папка: /var/www/domain.name/ ...

Ну тогда:

...
alias /var/www/domain.name/tmp/$1;
...

:)

vinvlad ★★
()
Ответ на: комментарий от vinvlad

Огромное, человеческое, СПА-СИ-БО! ))

nk_lg
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.