В nginx можно ли задать соответствие uri и реальным файлам?
Задача вот в чём. Физически файлы хранятся как хэши от их содержимого, например,
files/a0f9/e225/c7852fd556678d85587e39ad18f650ab7d2fcd27e6377ebab2a99a27
Нужно задать соответствие, например, при запросе
users/alex/Безымянный.gif отдавать files/a0f9/e225/c7852fd556678d85587e39ad18f650ab7d2fcd27e6377ebab2a99a27
Возможно ли в nginx это как-нибудь сделать, не прописывая каждый файл отдельно в конфиге, а храня таблицу соответствий в БД? Или на худой конец, то же самое сделать средствами apache?
Можно, конечно, сделать символьные ссылки для каждого из файлов, либо при запросах дёргать какой-нибудь PHP, который будет анализировать URI, запрашивать его наличие в БД и по нему отдавать нужный файл. Но в первом случае мы получим ворох из символьных ссылок, во втором - производительность сильно упадёт.
key don, в целях дедупликации, чтобы если несколько юзеров загрузят один и тот же файл (они могут быть под разными именами) - все файлы указывали на один и тот же физический файл, а он не хранился в нескольких копиях.
Алгоритм хеширования любой пойдёт, тот же sha256 к примеру (или sha1, но он подвержен атаке генерации двух различных файлов с одинаковыми хэшами).
Мож лучше создать софт/хард-линк users/alex/Безымянный.gif, который будет указывать на files/a0f9/e225/c7852fd556678d85587e39ad18f650ab7d2fcd27e6377ebab2a99a27
проще и нагляднее понимается, удобнее управляется - сделать/удалить/переместить линки можно напрямую из файл-менеджера.