Использование 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 с некоторым дополнительным пухом, который вы, вероятно, не хотите возвращать.