如何在端口80上运行Node.js



我的目标是在端口80上运行Node.js。这是因为我发现node.js被某些网络阻止,这些网络不允许来自任何其他端口的流量

似乎最好的方法是通过Node.js代理Apache。我试过使用nodehttp代理来做这件事,但我没有任何运气。

我使用的代码在这里:

var util = require('util'),
    http = require('http'),
    httpProxy = require('http-proxy');
httpProxy.createServer(9000, 'localhost').listen(80);
http.createServer(function (req, res) {
  res.writeHead(200, { 'Content-Type': 'text/plain' });
  res.write('request successfully proxied to: ' + req.url + 'n' + JSON.stringify(req.headers, true, 2));
  res.end();
}).listen(9000);

但我不断收到端口80的错误"地址在使用中"。我一定做错了什么。

如何使用nodehttp代理通过node.js代理Apache?这会让我在端口80上运行node.js吗?节点http代理是实现这一目标的最佳方式吗?

谢谢。

在高端口8080或whatev上运行应用程序,然后运行

sudo iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8080

如果您没有使用ngnix或apache

最简单的解决方案:安全地将节点应用程序配置为在端口80上运行。

  • sudo apt-get install libcap2-bin
  • sudo setcap cap_net_bind_service=+ep /path/to/node
  • 大大!你完了

我为什么喜欢它?

  • 您不必使用apache或nginx
  • 您不必以root身份运行应用程序
  • 您不必转发端口(每次机器启动时都要处理)

参考链接:https://www.digitalocean.com/community/tutorials/how-to-use-pm2-to-setup-a-node-js-production-environment-on-an-ubuntu-vps(一篇关于如何在云主机上设置节点应用程序的好文章)。

您需要为正在运行的服务器提供2个ip。Apache有一个ip绑定到端口80,然后node.js有另一个ip连接到端口80。

使用node及其侦听指令有两个值,例如.侦听(80,NODEJS_IP或DNS NAME);

其他一些建议。

我不会将apache与nodejs一起使用,因为它没有事件。所以这真的不推荐。实际上,我会考虑使用NGINX作为与Node更好的配对。

目前不建议在端口80上运行node,因为这需要以root身份运行node。

你与apache的联系如何?通过nginx代理节点是一个久经考验的解决方案,nginx配置如下:

upstream node_cluster {
    ip_hash;   
    server 127.0.0.1:8000;
    server 127.0.0.1:8001;
    server 127.0.0.1:8002;
}
server {
    listen 0.0.0.0:80;
    server_name foo;
    access_log /var/log/nginx/foo.log;
    location / {
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header Host $http_host;
      proxy_pass http://node_cluster/;
      proxy_redirect off;
    }
}

Nginx文档:

http://wiki.nginx.org/HttpProxyModule

http://wiki.nginx.org/HttpUpstreamModule

您的代码看起来像示例代码,其中您要创建一个从端口80到端口9000的基于节点的代理,然后在端口9000上创建一个基于节点的HTTP服务器。(即Node:80 -> Node:9000

当您启动Node时,您会得到"使用中的地址",因为Apache已经在使用端口80。如果要使用Apache进行代理,则必须在另一个端口(例如9000)上使用Node,并让Apache在端口80上侦听并将请求转发到端口9000上的Node。(即Apache:80 -> Node:9000

看起来您使用的库是为了做相反的事情:使用Node作为代理并将请求转发到Apache。在这种情况下,您必须将Apache配置为在端口80以外的另一个端口上运行。(即Node:80 -> Apache:9000)。

你到底想做Node:80 -> Apache:9000还是Apache:9000 -> Node:80

评论后编辑:如果要执行Apache:80 -> Node:9000,可以在Apache上使用mod_proxy,并使用ProxyPass/ProxyPassReverse指令,类似

ProxyPass /nodeurls/ http://localhost:9000/
ProxyPassReverse /nodeurls/ http://localhost:9000/  

其中nodeurls是希望Apache转发到Node的URL家族。

如果您是非root用户,则不能运行或绑定低于1024的端口(在Unix系统中)。要允许非root用户在低于1024的端口上运行节点,请使用此命令。

$ sudo setcap 'cap_net_bind_service=+ep' $(which node)

我遇到了同样的问题,下面是我如何使用节点http代理在端口80上侦听,然后转发到express或apache来解决这个问题的。

https://stackoverflow.com/a/9645091/500270

我遇到了同样的问题,我只是将端口更改为8080,它就工作了。

httpsServer.listen(8080, () =>
    console.log(chalk.rgb(208, 60, 240)(`Server listening on port: 8080`))
  );

如果您只是处于开发环境模式

你可以su root,然后

node index.js./node_modules/coffee-script/bin/coffee index.coffee

相关内容

  • 没有找到相关文章

最新更新