vkholodkov / nginx-eval-module

A module for evaluating memcached or proxy response into variable
Other
87 stars 44 forks source link

nginx-eval-module 1.0.3 #5

Closed ioua closed 14 years ago

ioua commented 14 years ago

http://github.com/vkholodkov/nginx-eval-module/blob/master/ngx_http_eval_module.c Тестировал с nginx-0.7.67 и nginx-0.8.53 1.0.1 с to_uri.patch работает в nginx-0.7.67 а в старших 0.8.* нет

        eval_escalate on;
        eval $path {
           set $memcached_key   "$uri";
           memcached_pass  10.0.0.3:11211;
        }
        root /farm-a-02;
        try_files /$path @blah;

В memcached он запрашивает /eval_*****

<30 new auto-negotiating client connection 30: Client using the ascii protocol <30 get /eval_256556512

30 END <30 connection closed.

error.log

http uri: "/img_v/mp4-public/uuu_d2257c3c21eab413fdf7c4891bb1a3a9_00068006.flv" http subrequest "/eval_527896408?" http posted request: "/eval_527896408?" http script complex value http script var: "/eval_527896408" http script set $memcached_key key: "/eval_527896408" was not found by memcached while reading response header from upstream

vkholodkov commented 14 years ago

Внутри eval переменную $uri использовать нельзя.

ioua commented 14 years ago

У меня вот рабочий конфиг, уже, благодаря Вам, почти с весны работает, но на 0.7 eval_escalate on;
eval $path {
set $memcached_key "$uri";
memcached_pass 10.0.0.2:11211;
}

vkholodkov commented 14 years ago

На github есть такой пользователь init. У него переписывание $uri ломает какой-то там модуль. Таким образом, у ваши требования конфликтуют между собой. Договоритесь между собой, а затем возвращайтесь ко мне.

ioua commented 14 years ago

Мне не принципиально :) Прописал set $memcached_key "$request_uri"; Вроде работает. Проверю детальнее, отпишусь.

Огромное спасибо за фичу, и скорый ответ! Успехов!

vkholodkov commented 14 years ago

Замечательно!

ioua commented 14 years ago

:( Проверил, плеер передаёт кучу параметров. /img_v/mp4-public/uuu_d2257c3c21eab413fdf7c4891bb1a3a9_00068006.flv?start=0&id=mediaplayer&client=FLASH%2520WIN%252010,1,85,3&version=4.3.132&width=400

а мне нужен только /img_v/mp4-public/uuu_d2257c3c21eab413fdf7c4891bb1a3a9_00068006.flv в качестве ключа, в каком месте модуля нужно пофиксить? Я могу руками под себя править при каждой новой версии модуля :( Не думаю что init согласится.

init commented 14 years ago

я расписал подробно, что модуль ngx-eval-module версии 1.0.2 (11f7161d) делает некорректно по отношению к другим модулям, это реальная проблема, от этого могут сломаться другие сторонние модули: http://github.com/vkholodkov/nginx-eval-module/issues/issue/2/#issue/2/comment/503279

правильное решение - не создавать подобный локейшен и ходить напрямую (недостаточно знаю архитектуру nginx чтобы подсказать как это сделать)

быстрое решение: в строке 135, сделать проверку что это не просто подзапрос, а именно подзапрос к /eval, например так: http://github.com/init/nginx-eval-module/commit/87d2acc66ae31f5888bb8b39cd0d5b30d3b60434