Nginx config, как?

Привет.


Надо составить правило location, но с nginx/perl знаком слабовато.


При обращении к /original/$ID. jpg|png|gif


Надо чтобы отдавалась картинка по пути


original/

последней символ md5($ID) /

первые 2 символа md5($ID) /

3 и 4 символ md5($ID). jpg|png|gif
  • Вопрос задан
  • 5644 просмотра
Решения вопроса 1
iSage
@iSage
wiki.nginx.org/EmbeddedPerlModule
Как-то так (не тестировал, но должно вроде работать):
nginx.conf:
http {
    perl_require myhandler.pm;
    ...
    server {
        ...
        location ~* /original/\.(gif|jpg|png)$ {
            perl  myhandler::handler;
        }
    }
}


myhandler.pm:
package myhandler;
use nginx;
use Digest::MD5 qw(md5_hex);

sub handler {
  my $r = shift;
  if ($r->filename=~m|/original/(.*?)\.(jpg|gif|png)|) {
      my $id_md5=md5_hex($1);
      my $filename="/original/".substr($id_md5,31,1)."/".substr($id_md5,0,2)."/".substr($id_md5,2,2).".".$2;
      $r->sendfile($filename);
  }
  return OK;
}
 
1;
__END__
Ответ написан
Пригласить эксперта
Ответы на вопрос 4
kekekeks
@kekekeks
Вынесите эту логику в скрипт, а потом отдавайте картинку через внутренние перенаправления.
Ответ написан
@IlVin
Функция вычисления MD5 в конфиге nginx только в эфемерных планах..., а пока вычислить MD5 от чего-то невозможно (без стороннего модуля).

Совсем другое дело, если вдруг $ID сам окажется MD5 суммой…

Тогда (код не тестировался):
location /original/ {
rewrite ^/original/([0-9a-f][0-9a-f])([0-9a-f]+)([0-9a-f])\. (jpg|png|gif)$ /original/$3/$1/$1$2$3.$4 last;
}

Более подробно читайте документацию:
sysoev.ru/nginx/docs/http/ngx_http_rewrite_module.html
Ответ написан
Комментировать
ozware
@ozware
Может это чем-то поможет: sysoev.ru/nginx/docs/http/ngx_http_secure_link_module.html

Имхо, в nginx такое не сделать, надо как-то по-другому
Ответ написан
@IlVin
Вспомнил! Сейчас буду учить плохому…
Вот здесь catap.ru/blog/2009/05/13/nginx-crc32_name-and-md5_name/ патч к nginx, который считает MD5 сумму, только прочитайте пожалуйста все каменты по ссылке, прежде, чем его применять…
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы