我正在使用PHP和mySQL数据库构建一个网站。该网站现在具有登录/注册功能,可以访问带墙的配置文件。在同一个网站上,我想使用websockets构建一个大型聊天应用程序。这个聊天应该容纳一个动态扩展的聊天室(可能会有数千个)中型组(+/- 25人)。
我一直在考虑使用node.js运行websockets,但我只想使用node.js来处理传入的消息和广播。另外,我想使用PHP将传入的消息保存在数据库中。我想在node.js服务器文件中使用http调用来处理这个问题,如http://docs.nodejitsu.com/articles/HTTP/clients/how-to-create-a-HTTP-request中所述。我还想使用http请求来获取用户的属性(例如名称和个人资料图片),因此这些可以显示给同一个聊天室中的其他用户。我不想处理这个客户端,因为用户可以轻易地假装成其他人。
php网站和node.js服务器都在localhost上运行。该网站运行在127.0.0.1:80,服务器运行在127.0.0.1:1337。
我的问题是,这种方法可以节省吗?在node.js服务器上执行http请求以从数据库发送/接收数据时是否存在安全风险?在PHP网站旁边运行node.js是个好主意,还是应该在node.js上构建我的网站?还有其他选择吗?
答案 0 :(得分:2)
这种方法安全吗?
不确定。我的意思是技术上,当然。它并不比任何单独的技术更不安全。但是,它确实使您的架构更复杂,可能会导致更多的人为错误和错误或安全问题。但这更多的是关于人类和复杂性,而不是技术本身。
在node.js服务器上执行http请求以从数据库发送/接收数据时是否存在安全风险?
不,不超过任何其他后端技术。它位于Web服务器后面,运行可能访问或不访问数据库的代码并返回响应。很多生产网站都在运行node.js而没有任何安全问题。
在PHP网站旁边运行node.js是个好主意,还是应该纯粹在node.js上构建我的网站?
很难回答。我认为整体上更简单,更易于维护的模式也是将事物放在一个地方和技术上。但随着应用程序的发展,删除独立部件并以自己最好的方式自行实现它们实际上是非常常见的。通常这与性能有很大关系,将高流量系统与低流量系统分开,就像技术本身的能力一样。
但是,当您有多个具有不同角色的服务器时,这通常会发挥作用。对于较小的项目,通常价值较低。
我不知道这是否能回答你的问题,但简而言之:它本身并不坏。这取决于。
答案 1 :(得分:0)
我认为混合Node.js和PHP / Apache并不存在任何固有的不安全因素。这就像在计算机上运行多个程序一样,它们有自己的空间,听自己的端口,不直接相互通信。
但我个人会更关心服务器资源(你的CPU有多快?多少内存?)。在一个平台上构建您的网站肯定会更有效率。但是根据你的建设情况,两者都可以。
从我看到的基准测试中,Node.js比Apache更耗资源。但Node.js对某些应用来说也非常快。
答案 2 :(得分:0)
我同时运行PHP和nodejs进行生产,它的安全性不亚于任何其他CGI后端。没有人提到的一件事是Nginx还不支持WebSockets,所以如果你想使用websockets同时支持PHP应用程序和nodejs应用程序,那么将Nginx绑定到端口80是行不通的。
请在此处查看我的答案以获取我的解决方案:nginx vs node-http-proxy
编辑: 从版本1.3.13开始,Nginx支持Web套接字。 Nginx现在已经收回了我生产堆栈80端口的合法位置。