Использование nginx для обслуживания содержимого непосредственно из кеша redis

Я использую nginx для передачи запросов в приложение Node. Приложение в основном действует как удаленный кеш для html (проверяет, запрашивается ли запрос пользователя в redis db, если он просто показывает, что если он не захватит его и не сохранит в кэше redis и не запустит его.)

Мне было любопытно, если бы все-таки обойти удар по приложению Node, если nginx обслуживает контент напрямую из redis? Я обманывал модуль http_redis, но я не могу заставить его работать.

Простым примером может быть: http://mywebsite.com/a, где nginx будет обслуживать контент в ключе "a" или передавать его на Node, если ключ не существует. Возможно ли это?

Ответ 1

Возможно, что-то сложнее настроить, чем Webdis, но вы можете сделать это непосредственно в демоне nginx с некоторыми дополнительными модулями, такими как redis2-nginx-module. Вам придется перекомпилировать nginx.

На домашней странице есть несколько хороших примеров конфигурации.

Например:

# GET /get?key=some_key
location /get {
    set_unescape_uri $key $arg_key;  # this requires ngx_set_misc
    redis2_query get $key;
    redis2_pass foo.com:6379;
}

Конечно, с немного более новой конфигурацией nginx вы можете получить еще один шаблон URL.

Обратите внимание, что для этого примера вам придется скомпилировать ngx_set_misc.

Ответ 2

Я знаю, что это старый поток, но все же, это может быть полезно для некоторых. Я пробовал тот же подход, что и у nginx, из Redis, без использования HttpRedis2Module в nginx. Я был счастлив, когда у меня это работало, потому что это была какая-то хлопот, но когда я делал некоторые стресс-тесты, я боюсь, что это дало очень плохие результаты.

На самом деле было немного быстрее и гораздо более стабильно работать с nginx->php->mongodb, чем просто использовать nginx->redis с модулем.

Ответ 3

Вы можете получить что-то, установив Nginx в качестве обратного прокси для Webdis.

Способ использования Webdis заключается в том, что вы поместите всю команду в URL-адрес, поэтому в GET клавишу a вы запрашиваете /GET/a. Это означает, что если все, что вы хотите использовать, доступно с помощью GET, вы можете сделать что-то подобное в Nginx:

location / {
  rewrite ^(.*)$ /GET/$1 break;
  proxy_pass http://127.0.0.1:7379/;
}

(Я пишу конфигурацию с верхней части моей головы здесь, синтаксис может быть немного выключен).

Однако проект Webdis очень молод, поэтому не сообщается, насколько хорошо он будет работать, а ответы - это документы JSON с некоторым дополнительным пухом, который вы, вероятно, не хотите возвращать.