Как настроить отдачу статики?

Настройка сетевых служб, маршрутизации, фаерволлов. Проблемы с сетевым оборудованием.
Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Аватара пользователя
Духовитин
мл. сержант
Сообщения: 125
Зарегистрирован: 2014-12-17 8:46:05

Как настроить отдачу статики?

Непрочитанное сообщение Духовитин » 2016-07-18 15:09:56

Добрый день Товарищи!

У меня к вам такой вопрос. Понадобилось раздавать с веб-сервера статические файлы разные. Но проблема в том, запрос на отдачу файла даётся посредством php скрипта. Условно ссылкой вида: http://server.ru/getfile.php?id=xxx
Знаю, что отдавать файлы средствами php - зло, и хочу поэтому сделать всё правильно и красиво. Скажите есть ли пути, чтобы в php отрабатывалась вся логика по проверке доступа/типу и т.п., а затем бы отдча файла производилась силами веб-сервера?
Кто не рискует - тот не пьёт шампанского.

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/


Аватара пользователя
Духовитин
мл. сержант
Сообщения: 125
Зарегистрирован: 2014-12-17 8:46:05

Как настроить отдачу статики?

Непрочитанное сообщение Духовитин » 2016-07-18 21:00:01

Уважаемый, но ведь не в том вопрос.
Не в выборе веб сервера, а в пути которым от ссылки вида: http://сервер/id=fileID, где fileID - это идентификатор файла в БД. С последующим выдиранием информации об этом файле из БД, после этого уже только есть информация о реальном пути этого файла в ФС, чтобы этот путь передать или в функцию file_fet_contents() или что я и хочу узнать - как отдать этот путь веб-серверу, чтобы он уже отдал клиенту этот файл с диска.
Кто не рискует - тот не пьёт шампанского.

Аватара пользователя
Amadeus
ст. сержант
Сообщения: 332
Зарегистрирован: 2008-10-05 12:42:44
Откуда: Kiev

Как настроить отдачу статики?

Непрочитанное сообщение Amadeus » 2016-07-19 5:42:13

Духовитин писал(а): Условно ссылкой вида: http://server.ru/getfile.php?id=xxx
Знаю, что отдавать файлы средствами php - зло, и хочу поэтому сделать всё правильно и красиво. Скажите есть ли пути, чтобы в php отрабатывалась вся логика по проверке доступа/типу и т.п., а затем бы отдча файла производилась силами веб-сервера?
Духовитин писал(а): после этого уже только есть информация о реальном пути этого файла в ФС, чтобы этот путь передать или в функцию file_fet_contents() или что я и хочу узнать - как отдать этот путь веб-серверу, чтобы он уже отдал клиенту этот файл с диска.
а можно узнать чем провинился PHP что вы через него хотите отдавать что то?) PHP - интерпретируемый язык программирования, и без веб сервера + mod_php/fastcgi (cgi не пишу, так как это не для серьезных вещей) хоть миллиард php строк остаются буквами.

Отдачей статики ВСЕГДА занимается веб сервер. Другой вопрос как и какой. Посему у Вас во втором посту правильно спросили.

Тут два варианта (c использованием nginx, как наиболее правильного средства отдачи стат файлов):
1) И наиболее правильный, если у вас файло, имеет ряд всем известных расширений, и это отражено в урлах то:

Код: Выделить всё

    location ~* ^.+\.(jpg|jpeg|gif|png|svg|js|css|mp3|ogg|mpe?g|avi|zip|gz|bz2?|rar|swf) {
        root $static_dir;
        expires 30d;
        more_clear_headers 'Server';
        add_header Server Hello;
        add_header X-Content-Type-Options nosniff;
        add_header X-XSS-Protection "1; mode=block;";
        add_header Strict-Transport-Security "max-age=31536000";

        gzip on;
        gzip_min_length 1100;
        gzip_buffers 4 8k;
        gzip_comp_level 9;
        gzip_types text/plain text/html text/css image/jpeg application/javascript image/png;
    }
Это как пример, тут чуть более сложная конструкция - но суть понятна.

2) Если у вас программисты - марсиане, и сделали стат файлы аля http://server.ru/getfile.php?id=тут набор символов без расширения

То либо
getfile.php

Обрабатывайте вот этот локейшн и потом тоже самое, либо ловите реквест ури - и потом так же тоже самое
Нет ничего невозможного

Аватара пользователя
Neus
капитан
Сообщения: 1977
Зарегистрирован: 2008-09-08 21:59:56

Как настроить отдачу статики?

Непрочитанное сообщение Neus » 2016-07-19 7:28:42

Духовитин писал(а): как отдать этот путь веб-серверу, чтобы он уже отдал клиенту этот файл с диска.
сформировать из пути урл
отдать урл клиенту, а клиент сам инициирует скачивание файла с веб-сервера
по-моему это так работает

Аватара пользователя
Духовитин
мл. сержант
Сообщения: 125
Зарегистрирован: 2014-12-17 8:46:05

Как настроить отдачу статики?

Непрочитанное сообщение Духовитин » 2016-07-19 9:18:37

Ладно попробую объяснить ещё.

1. Файлы для отдачи клиентам лежат вне папке DOCUMENT_ROOT'а веб-сервера.
2. Файл можно скачать только если клиент удовлетворяет неким критериям (авторизован, есть доступ в скачиваемому файлу и т.п.)
3. Критерии на основании которых принимается решение о возможности/невозможности скачивания находятся в БД. Что-то типа:

Код: Выделить всё

Table users (
   id SERIAL,
   userName
)
Table files (
   id SERIAL,
   File_FS_Path
)
Table userFile (
  id SERIAL,
  userID BIGINT,
  fileID BIGINT,
  isAllowed TINYINT,
  FK (userID) -> users(id),
  FK(fileID) -> files(id)
)
Amadeus писал(а): 1) И наиболее правильный, если у вас файло, имеет ряд всем известных расширений, и это отражено в урлах то:
Проблема с тем, чтобы давать клиенту ссылку на статический файл вида: http://server/static_file.pdf в том, что в этом случае не работает схема с определением возможности/невозможности доступа к файлу.
Neus писал(а): сформировать из пути урл
отдать урл клиенту, а клиент сам инициирует скачивание файла с веб-сервера
Точно так же не работает схема с разграничением доступа. Этот единожды сформированный урл на статический файл, считай доступен всем и всегда.

В качестве уточнения своего вопроса, сформулирую так: В файлохостингах навроде рапидшаре, депозита и других, как сделано? Примерно. Ведь там по любому не силами скриптового языка отдаются все эти гигабайты, но в то же время ссылка сформированая на файл и не скачивается если её вбить на другом компе или по истечении каких-то ещё условий. Т.е. сервак при отдаче файла по ссылке, проверяет некие условия на основании которых отдаёт файл и шлёт на хер. Так вот как это делается?

Отправлено спустя 5 минут 29 секунд:
Не в обиду мужики, но вы с высоты своих знаний похоже разучились слышать других.
Сам похоже нашёл решение. http://forum.shelek.ru/index.php/topic,30362.0.html
Попробую, но похоже то, что надо.

Отправлено спустя 11 минут 19 секунд:
Ещё более конкретно решение вот: https://habrahabr.ru/post/37686/
Кто не рискует - тот не пьёт шампанского.

Аватара пользователя
Amadeus
ст. сержант
Сообщения: 332
Зарегистрирован: 2008-10-05 12:42:44
Откуда: Kiev

Как настроить отдачу статики?

Непрочитанное сообщение Amadeus » 2016-07-19 14:15:22

Духовитин писал(а): 1. Файлы для отдачи клиентам лежат вне папке DOCUMENT_ROOT'а веб-сервера.
2. Файл можно скачать только если клиент удовлетворяет неким критериям (авторизован, есть доступ в скачиваемому файлу и т.п.)
3. Критерии на основании которых принимается решение о возможности/невозможности скачивания находятся в БД. Что-то типа:
А где это было написано в условии изначальном?) Чуть корректнее описывайте условие. А не "отдать через php" *)

То что вы изначально написали и то что в итоге оказалось - две разные вещи
Нет ничего невозможного