2015-08-10 4 views
1

Я хочу сделать следующее с помощью модуля NGINX: Nginx получает запрос, проверяет, если он имеет ключ для декодирования запроса в кэше (обычая)NGINX: Создание двух асинхронно вызовов на внутренний сервер

  • , если ДА, а затем декодировать запрос, получить идентификатор от него и проверить, есть ли значение для этого идентификатора в хранилище значений ключа (асинхронно) и вернуть его в ответе
  • , если нет, затем получить новый ключ от хранилище ключей (асинхронно), а затем сохраните этот ключ в кеше и используйте его для декодирования запроса. Получите идентификатор и проверьте, есть ли значение для этого идентификатора в хранилище значений ключа (асинхронно) и отправляется в ответ.

Мне удалось выяснить, как сделать шаг 1, я написал восходящий модуль, обратив внимание на модуль nginx от openresty от github. Для достижения функциональности шага 2 я попытался создать новый запрос восходящего потока в функции process_header() первого вызова восходящего потока (например, получить ключ из хранилища), но это не сработало. Как достичь этого?

Заранее спасибо.

ответ

1

Я вижу 2 подхода:

  1. Вы можете сделать все это в Lua, используя lua-nginx-module и lua-resty-redis библиотеку. Здесь вы можете найти информацию Configure-nginx-to-get-url-from-redis-with-key-and-proxy-the-url-to-other-server

  2. Напишите модуль nginx C, используйте redis2-nginx-module в качестве восходящего модуля, отправьте подзапрос. Взгляните на мой ответ Subrequests are not sent or the request hangs Он показывает, как отправлять подзапросы.

+0

эй, спасибо за ответ. Я попробовал второй подход, который вы упомянули, но это не сработало для меня. Возможно ли отправить запрос nonHTTP в качестве подзапроса? Я хочу отправить запрос на [redis] (http://redis.io/topics/protocol) в качестве subRequest. –

+0

и еще одна вещь, URI, который отправляется как параметр в ngx_http_subrequest(), добавляется в рабочий каталог nginx –

+0

Да, можно отправить подзапрос HTTP. Укажите URl, который должен соответствовать вашему местоположению, использующему модуль redis2 как восходящий. –

 Смежные вопросы

  • Нет связанных вопросов^_^