Сведения о вопросе

Codeliver

21:06, 1st October, 2020

Теги

Nginx config, как?

Просмотров: 299   Ответов: 5

Привет.


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


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


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


original/

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

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

3 и 4 символ md5($ID). jpg|png|gif



  Сведения об ответе

ASSembler

09:55, 28th September, 2020

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__


  Сведения об ответе

darknet

11:50, 28th September, 2020

Вынесите эту логику в скрипт, а потом отдавайте картинку через внутренние перенаправления.


  Сведения об ответе

PROGA

01:12, 28th September, 2020

Функция вычисления 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


  Сведения об ответе

DAAA

01:39, 29th September, 2020

Может это чем-то поможет: sysoev.ru/nginx/docs/http/ngx_http_secure_link_module.html

Имхо, в nginx такое не сделать, надо как-то по-другому


  Сведения об ответе

+-*/

04:14, 28th September, 2020

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


Ответить на вопрос

Чтобы ответить на вопрос вам нужно войти в систему или зарегистрироваться