Использование nginx для подачи контента прямо из кэша Redis - PullRequest
15 голосов
/ 29 декабря 2010

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

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

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

Ответы [ 3 ]

11 голосов
/ 31 декабря 2010

Может быть, что-то более сложное в настройке, чем 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 .

3 голосов
/ 23 мая 2012

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

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

1 голос
/ 29 декабря 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...