2015-03-03 6 views
2

Я хотел бы общаться с redis из nginx, чтобы хранить в списках, какие запросы были сделаны на изображениях, особенно на изображениях, которые не найдены, проксированные на другом сервере.Добавить ключ/значение в Redis в Nginx

Я установил OpenResty, чтобы использовать команды redis2_query и redis2_pass.

Вот мой Nginx конфигурации:

location ~* \.(jpg|jpeg|gif|png)$ { 
    try_files $uri @imagenotfound; 

    redis2_query lpush founds $uri; 
    redis2_pass 127.0.0.1:6379; 

} 

location @imagenotfound { 

    proxy_pass http://imgdomain.com/$uri; 
    proxy_set_header Host imgdomain.com; 
    proxy_set_header Server imgdomain.com; 

    redis2_query lpush notfounds $uri; 
    redis2_pass 127.0.0.1:6379; 

} 

Каждый запрос я сделать возвращает целое число, и, как я понимаю, redis2_pass возвращает результат запроса. В любом случае, чтобы не вернуть этот результат и просто выполнить запрос?

Если я удалю redis2_query и redis2_pass, изображения будут отображаться правильно.

Заранее благодарим за вашу помощь!

+0

Почему эта проблема? Это потому, что вы получаете ответы в HTTP? Совсем не совместимо с этим модулем nginx, поэтому просто пытайтесь понять проблему, чтобы узнать, могу ли я помочь. – bitoiu

+0

потому что я хочу, чтобы nginx возвращал изображение, а не целое число, являющееся результатом запроса redis ... –

+0

Я не лучший человек, чтобы помочь, так что это случайное. Но поможет ли это просто закончить метод 'location' с помощью' $ uri'? – bitoiu

ответ

2

Решение, которое, кажется, работает, чтобы использовать скрипты Lua с access_by_lua и модулем resty.redis:

location ~* \.(jpg|jpeg|gif|png)$ { 
    try_files $uri @imagenotfound; 

    access_by_lua ' 
        local redis = require "resty.redis" 
        local red = redis:new() 
        red:set_timeout(1000) 
        local ok, err = red:connect("127.0.0.1", 6379) 
        if not ok then 
         ngx.say("failed to connect: ", err) 
         return 
        end 
        ok, err = red:lpush("founds", ngx.var.uri) 
        if not ok then 
         ngx.say("failed to set founds: ", err) 
         return 
        end 
      '; 


} 

location @imagenotfound { 

    proxy_pass http://imgdomain.com/$uri; 
    proxy_set_header Host imgdomain.com; 
    proxy_set_header Server imgdomain.com; 

    access_by_lua ' 
        local redis = require "resty.redis" 
        local red = redis:new() 
        red:set_timeout(1000) 
        local ok, err = red:connect("127.0.0.1", 6379) 
        if not ok then 
         ngx.say("failed to connect: ", err) 
         return 
        end 
        ok, err = red:lpush("notfounds", ngx.var.uri) 
        if not ok then 
         ngx.say("failed to set notfounds: ", err) 
         return 
        end 
      '; 


} 

Если кто имеет навыки Lua и может сказать мне, если это правильный способ сделать это, я был бы рад получить его отзыв!

В любом случае, спасибо за помощь в комментариях.

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

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