我正在使用nginx将请求传递给Node应用程序。该应用程序基本上充当html的远程缓存(检查用户请求的是否在redis数据库中,如果它只是显示,如果没有抓住它并将其存储在redis缓存中并提供它。)
我很好奇是否有通过让nginx直接从redis提供内容来绕过点击Node应用程序?我一直在使用http_redis模块,但我无法让它工作。
一个简单的例子是:http://mywebsite.com/a其中nginx将在'a'键中提供内容,或者如果键不存在则将其传递给节点应用。这甚至可能吗?
答案 0 :(得分:11)
也许比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模块。
答案 1 :(得分:3)
我知道这是一个旧线程,但仍然可能对某些人有用。我尝试了相同的方法,因为你直接使用Redis的nginx服务,而没有在nginx中使用HttpRedis2Module。当我开始工作时,我很高兴,因为它有些麻烦,但是当我做一些压力测试时,我担心它会产生非常糟糕的结果。
使用nginx->php->mongodb
投放实际上比使用nginx->redis
和模块更快更稳定。
答案 2 :(得分:1)
您应该可以通过将Nginx设置为Webdis的反向代理来获取某些内容。
您使用Webdis的方式是将整个命令放在网址中,以便GET
向a
申请/GET/a
。GET
。这意味着如果您想要提供的所有内容都可以通过location / {
rewrite ^(.*)$ /GET/$1 break;
proxy_pass http://127.0.0.1:7379/;
}
使用,您可以在Nginx中执行以下操作:
{{1}}
(我在这里编写配置,语法可能略有偏差)。
然而,Webdis项目非常年轻,所以没有人知道它的工作效果如何,而且回复是JSON文档,还有一些额外的漏洞,你可能不想返回。