首页 文章

如何用php创建nodejs服务器?

提问于
浏览
0

我正在尝试用php执行nodejs,这样做真的很简单

<? shell_exec("node app.js &"); ?>

我的nodejs文件用express创建一个服务器 .

var express = require("express"),
app         = express();

app.get('/', function(request,response)
{
  response.status(200).send("Welcome");
});

app.listen(82, 'localhost', function(){console.log("Server are running on port 82");});

文件运行时,这是输出

错误:在Server._listen2的exports._exceptionWithHostPort(util.js:896:20)的Object.exports._errnoException(util.js:873:11)中侦听EACCES 127.0.0.1:82(net.js:1237:19) )at get(net.js:1286:10)at net.js:1395:9 at GetAddrInfoReqWrap.asyncCallback [as callback](dns.js:64:16)at GetAddrInfoReqWrap.onlookup [as oncomplete](dns.js: 83:10)

端口打开,这是“service iptables status”命令的输出

20 ACCEPT tcp - 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpts:81:90

我认为错误是因为apache(apache在端口80上运行)没有创建服务器的权限

有人知道如何解决这个问题?

1 回答

  • 1

    您将需要授予启动node.js应用程序更高权限的进程,以便它可以使用这样的低端口号,或者您可以使用不受限制的更高端口号(高于1024) . 例如,端口3000很常见 .

    有些人还通过在更高端口(如3000)上启动服务器,然后使用iptables将来自低端口(如您使用的82)的传入请求转发到端口3000来解决此问题 . 这使您的服务器无需运行需要更高的权限,但它仍然可以在较低的端口号上“工作” .

    这里有更多关于解决方法的讨论:Is there a way for non-root processes to bind to "privileged" ports on Linux?How can I run a server on Linux on port 80 as a normal user? .

相关问题