1

我对 Redis 和 Node.js 很陌生,但我想使用 Redis 来提高我的 Web 应用程序性能,并使用 Node.js 添加实时通知功能。

现在,我添加了 1 个 EC2 实例来为这两个进程提供服务,将其与弹性 IP 地址及其关联的子域绑定。但是,我在 Redis 网站上读到,运行 Redis 的机器不应该暴露在不受信任的环境中。

来自http://redis.io/topics/security

Redis 旨在由受信任环境中的受信任客户端访问。这意味着通常将 Redis 实例直接暴露给 Internet 或者通常暴露给不受信任的客户端可以直接访问 Redis TCP 端口或 UNIX 套接字的环境不是一个好主意。

另一方面,监听 websocket 协议的 Node.js 必须暴露在互联网上,这样我的 web 应用程序才能与它进行实时交互。

所以我的第一个问题是,我真的需要 2 个 EC2 实例,每个实例用于 Redis 和 Node.js?

我的第二个问题是:保持现有 PHP 会话并让 Node.js 识别使用 PHP 会话的刚刚登录用户的最佳方法是什么?

我几乎修改了我的 PHP 会话,将其从表内会话更改为 Redis 会话,直到我阅读了上面 Redis 网站的指南。

谢谢你。

4

2 回答 2

1

在主配置文件/etc/redis/redis.conf中,应该有一个bind 127.0.0.1(如果没有注释,添加它),然后保存并重新启动redis。该指令告诉服务仅侦听来自 localhost 的连接。并且它应该足以让redis安装免受外界影响。如果我没记错的话,默认情况下,EC2 默认拒绝外部世界。

至于您的第二个问题,您需要确保在两种语言之间一致地读取会话 ID。session_id()将为您提供 php 中会话的 id。您只需要设置节点即可读取PHPSESSIDcookie。您只需要确保 cookie 将以它在浏览器中侦听的任何主机名发送到 node.js 服务。在 php 中,您可以在 php.ini 中或使用session_set_cookie_paramssession_start().

于 2012-11-20T16:10:14.613 回答
0

你会想要按照评论者所说的那样做,并在 127.0.0.1 上收听,然后你可以增加安全性,只是不向外界开放端口。由于安全组功能,这应该在 AWS 中默认完成。为了向外界打开一个端口,您必须明确地将其添加到安全组中。

这是有关安全组的更多信息。 http://docs.amazonwebservices.com/AWSEC2/latest/UserGuide/using-network-security.html

于 2012-11-20T16:06:36.210 回答