LINUX.ORG.RU
ФорумAdmin

Nginx и одноразовые ссылки

 ,


0

1

Настроил в nginx ссылки со сроком годности, с помощью модуля secure link и скрипта, который эти линки генерит. Мне нужно, чтобы у таких ссылок, кроме ограничения по сроку годности, было еще и ограничение по количеству переходов - всего одни раз. Т.е. я сгенерил ссылку, которая действует 10 минут, нужно чтобы пользователь мог ее открыть только один раз, даже если 10 минут не прошли. Подскажите, как это сделать?

Перемещено leave из general

Ответ на: комментарий от anonymous

Хотелось бы без lua :), я использую nginx со встроенным vod модулем и подпихнуть туда lua не получается, нужно пересобирать nginx. Чего делать не хочется, т.к. оба модуля vod и lua собрать вместе не просто.

Может в стандартных инструментах nginx, есть возможность куда-нибудь в память сохранять сслыку по которой совершен переход, а потом при следующих проверять сохранена она или нет?

Или перенаправить на скрипт, внутренний скрипт, который проверит ссылку, а потом переведет пользователя куда нужно, если она не использована?

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

мог ее открыть только один раз

предположим, скачивание оборвалось на середине.

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

https://nginx.org/ru/docs/http/ngx_http_limit_req_module.html

Чтобы это использовать, нужно чтобы ссылки можно было фильтровать по какой-то маске. В моем случае они будут однотипные, я не смогу сделать их разными.

samson_b
() автор топика
Последнее исправление: samson_b (всего исправлений: 1)
Ответ на: комментарий от aol

в чем смысл тогда?

Чтобы каждая ссылка была использована только один раз (плеером видео)

samson_b
() автор топика
Ответ на: комментарий от skyman

А обязательно nginx должен заниматься таким? Может на php или python написать проще?

Не обязательно, подскажите, как такая конструкция должна выглядеть в nginx?, скрипт я смогу написать.

samson_b
() автор топика
Последнее исправление: samson_b (всего исправлений: 1)
Ответ на: комментарий от samson_b

Так ты в ключ добавь uri, и не надо будет тебе никакую маску мутить. Просто для каждого урла сделаешь ограничение на количество запросов.

tiandrey ★★★★★
()

Ага, чтобы хром своим «интеллектуальным» механизмом заранее слазил по твой ссылке, а когда пользователь нажмет сам - получит фигу.

Гугли «хром get delete»

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

Так ты в ключ добавь uri, и не надо будет тебе никакую маску мутить. Просто для каждого урла сделаешь ограничение на количество запросов.

То что вы посоветовали работает, но есть проблема в том, что
параметр rate минимально можно выставить 1 раз в минуту.

limit_req_zone «$binary_remote_addr$request_uri» zone=vreq:10m rate=1r/m;

Т.е. через минуту «одноразовая» ссылка опять начинает работать :)

samson_b
() автор топика
Последнее исправление: samson_b (всего исправлений: 1)
Ответ на: комментарий от PPP328

если он делает не количеством скачиваний, а временем жизни, то можно подзабить.

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

навскидку надумался чуть меньший «ужснах»:

поднимаем отдельный бекенд-нжинк за фронтальным, у фронтального тупо проксипас на бекендовый нжинкс по префиксу урл.

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

как и что именно писать в этом инклудном файле - надо подумать.

deep-purple ★★★★★
()
Последнее исправление: deep-purple (всего исправлений: 1)
Ответ на: комментарий от PPP328

Ага, чтобы хром своим «интеллектуальным» механизмом заранее слазил по твой ссылке, а когда пользователь нажмет сам - получит фигу.

Хром пральна делает. У ГЕТ-запроса семантика такая, ничего не поделаешь.

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