Кэш nginx + динамическая отдача графики

12
M
На сайте с 02.01.2013
Offline
38
1288

Как вообще реализовать приватное хранение фотографий на сервере..?

Сейчас при обращении к - атр/фотке.jpg(не существует) обрабатывает php скрипт с запросом в базу прав доступа к фотке. nginx такое вообще может закэшировать?

Оптимизайка
На сайте с 11.03.2012
Offline
396
#1

Вы про http://wiki.nginx.org/X-accel спрашиваете?

⭐ BotGuard (https://botguard.net) ⭐ — защита вашего сайта от вредоносных ботов, воровства контента, клонирования, спама и хакерских атак!
M
На сайте с 02.01.2013
Offline
38
#2
Оптимизайка:
Вы про http://wiki.nginx.org/X-accel спрашиваете?

незнаю, нет наверное..

суть: пользователь загружает фотку на сайт, а если на сайте её хочет кому-нибудь показать, в базу пишется - пользователь id1 разрешает открыть фотку xxx.jpg пользователю id2

а когда браузер пытается открыть/загрузить эту фотку как - site.ru/atr/opt/xxx.jpg - то через mod_rewrite переменные идут в скрипт /src.php?s1=atr&s2opt&img=xxx.jpg - а он решает отдать пустую картику или настоящую фотку

---------- Добавлено 28.02.2013 в 16:17 ----------

Это всё весьма неоптимально и скорее всего некэшируемо... может можно как-то иначе?

Andreyka
На сайте с 19.02.2005
Offline
822
#3

Nginx такое может закешировать, если url получит от бакенда указание кешировать этот url. Сам url должен содержать права доступа.

То есть при формировании страницы вы определяете - показывать фотку или выдать заглушку. А nginx это послушно делает.

Не стоит плодить сущности без необходимости
M
На сайте с 02.01.2013
Offline
38
#4
Andreyka:
может закешировать, если url получит от бакенда указание кешировать этот url. Сам url должен содержать права доступа.

только что нашёл у Сысоева, и если я правильно понимаю, то это то, о чём вы говорите


location /images/ {
root /data/www;
error_page 404 = @fetch;
}

location @fetch {
internal;

proxy_pass http://backend;
proxy_store on;
proxy_store_access user:rw group:rw all:r;
proxy_temp_path /data/temp;

root /data/www;
}

но в proxy_store_access user:rw group:rw all:r; речь идёт о пользователе linux, у меня же пользователи сайта :(

---------- Добавлено 28.02.2013 в 22:32 ----------

nginx кэширует в целом url, а связать ответ апача с IP или cookies и отдавать из кэша учитывая это неполучится?

Andreyka
На сайте с 19.02.2005
Offline
822
#5

Я же вам выше написал как надо правильно делат

M
На сайте с 02.01.2013
Offline
38
#6

Andreyka, расскажите чуть подробнее. я пока не очень понял о каких правах доступа речь

Andreyka
На сайте с 19.02.2005
Offline
822
#7

Еще раз: при формировании страницы вы определяете - показывать фотку или выдать заглушку.

Делаете это в скрипте который рисует страницу. Теперь понятно?

M
На сайте с 02.01.2013
Offline
38
#8

Andreyka, ну, так оно так и было всегда.

обратился пользователь X за картинкой site/3456/9875/xxx.jpg - скрипт отдал её в соответствии с правами доступа - nginx её закэшировал, а посля уже например вы запрашиваете её же, и nginx отдаёт её вам из кэша, хотя вам её смотреть не дозволено :)

как быть?

K
На сайте с 01.03.2013
Offline
24
#9

Рекомендую такое решение

Имя каждой картинки делать в виде

1234_fjdk.jpg

1234 – номер картинки в Бд

fjdk – случайная строка для каждого файла.

Те кому можно видеть фото, получают правильную ссылку на него, а те кто не могут не получают

M
На сайте с 02.01.2013
Offline
38
#10

kruzo, приблизательно так и реализовано, но глубже..

название картинки в URL - уникально = синоним имени файла картинки в БД по которому можно вычислить права доступа. Но это всё сути не меняет

Как это всё закрутить и снизить обращения к БД и скриптам.. думал на кэше Nginx-a выехать :)

12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий