这个伟大的主题解释了如何在Apache服务器中使用ProxyPass将所有与路由/node
匹配的内容转发到端口:8080,其中有一个Node JS服务器在运行:
Apache and Node.js on the Same Server
现在我想知道是否有类似的方法可以做到这一点。
NodeJS服务器同时运行:80和:8080。但是,如果路线与/blog
匹配,则应显示我的wordpress安装。
由于业务人员设置了我们的域名系统(argh),这是我能想到的唯一选择 - 子域名不起作用。
答案 0 :(得分:2)
您可以根据NodeJS http侦听器传递的URL,始终让NodeJS向正在运行的Apache服务(套接字)发出内部HTTP请求;然后相应地通过http响应反馈结果。
以下是有关如何使用NodeJS发出http请求的优秀文章:https://davidwalsh.name/nodejs-http-request
所以,如果你有Apache运行,即:IP&端口(套接字)127.0.0.1:4321
你可以像这样对Apache进行NodeJS中继请求:(只是一个例子)
var http = require('http');
http.createServer(function (nreq, nrsp)
{
if (nreq.url.indexOf('/blog') > -1)
{
http.get('http://127.0.0.1:4321', function(arsp)
{
arsp.on('data', function(data)
{
nrsp.write(data);
});
});
}
else
{
// your nodeJS web server stuff here
}
}).listen(8080); // or port 80, but this requires root privilege
答案 1 :(得分:0)
虽然有可能我真的不推荐这个。
Web服务器(如Apache)非常擅长成为Web服务器。它们内置了许多安全性和性能选项。它们适用于静态内容。他们不擅长的是运行动态代码(他们主要委托给PHP或其他CGI脚本或代理传递给Node等特定服务器)。节点是相反的。
Node当然可以创建一个Web服务器,并且有一个很好的社区,围绕它不断致力于性能和安全性以及新功能。但这并不意味着成为主要的Web服务器必然是一个好主意 - 特别是当你必须安装一个“真正的网络服务器”(原谅明确的节点开发人员!)时,无论如何。
对于Node,您基本上必须编写代码来创建Web服务器(使用像Express这样的库)。对于Web服务器,代码已编写,您必须编写配置文件。一个微妙的区别可能是一个重要的区别,有很多好处(配置的语法检查,经过尝试和信任的解决方案,所有配置选项的文档......等等。)
此外,Node非常擅长创建微服务 - 因此让许多节点服务在不同的端口上进行侦听,然后在前面安装一个Web服务器以将它们集中在一起和/或处理https终止。是的,你可以让一个节点服务器在前面执行该功能,而不是Apache,但我仍然建议使用一个网络服务器。