使用nginx直接从redis缓存中提供内容

Rya*_*n S 15 caching nginx redis

我正在使用nginx将请求传递给Node应用程序.该应用程序基本上充当html的远程缓存(检查用户请求的是否在redis数据库中,如果它只是显示,如果没有抓住它并将其存储在redis缓存中并提供它.)

我很好奇是否有通过让nginx直接从redis提供内容来绕过点击Node应用程序?我一直在使用http_redis模块,但我无法让它工作.

一个简单的例子是:http://mywebsite.com/a其中nginx将在"a"键中提供内容,或者如果密钥不存在则将其传递给节点应用程序.这甚至可能吗?

小智 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;
}
Run Code Online (Sandbox Code Playgroud)

当然,通过更多的nginx配置,您可以获得另一种URL模式.

请注意,对于此示例,您还必须编译ngx_set_misc模块.


The*_*heo 3

您应该能够通过将 Nginx 设置为Webdis 的反向代理来获得一些东西。

使用 Webdis 的方式是将整个命令放入 URL 中,即您请求的GET密钥。这意味着,如果您想要提供的所有内容都可以使用,您可以在 Nginx 中执行以下操作:a/GET/aGET

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

(我在这里随心所欲地写下配置,语法可能略有偏差)。

然而,Webdis 项目还很年轻,所以不知道它的工作效果如何,并且响应是 JSON 文档,其中包含一些您可能不想返回的额外内容。