如何将nodejs和apache放在同一个端口80中

use*_*334 21 apache port redirect node.js

我必须将nodejs放在端口80中,但是apache已经在使用它了.如何将两个(nodejs和apache)放在同一个端口80上?我需要它,因为在我的大学,所有端口都被阻止,除了PORT 80.(这是一个带有nodejs和socket.io(websockets)的实时应用程序,另一方面是一个php应用程序).非常感谢

cod*_*nja 22

我通过node.js代理做到这一点..

安装http-proxy使用npm官方网页

例:

var http = require('http'),
httpProxy = require('http-proxy'),
proxyServer = httpProxy.createServer ({
    hostnameOnly: true,
    router: {
        'domain.com':       '127.0.0.1:81',
        'domain.co.uk':     '127.0.0.1:82',
        '127.0.0.1':        '127.0.0.1:83'
    }
});

proxyServer.listen(80);
Run Code Online (Sandbox Code Playgroud)

这会创建一个监听端口80的节点进程,并转发对以下内容的转发请求:81,82,83等.我建议运行此命令forever并添加一个条目,init.d以便在系统关闭时代理已启动.

  • 这个回复很旧,但是我找到的最好的回复.`http-proxy`现在以完全不同的方式工作.但结果是一样的 - mdash; 太棒了 我在8000上运行Apache,在80上运行node.js代理脚本并添加到init.d,它就像一个魅力. (2认同)

mel*_*oly 9

我亲自在@liammclennan那边做了这件事.有些人认为通过Apache进行代理会破坏Node的一些性能和可扩展性优势(我自己没有经验,因为我的服务器没有那么多流量,但来自@ liammclennan的链接:"通过Apache进入的每个请求都会导致一个Apache线程,等待/阻塞,直到从Node.js进程返回响应.",这显然与Node的架构不完全吻合.)

我使用node-http-proxy来设置Node代理服务器,大致如第一个链接所述(我的Node代理在端口80上运行; Apache和我的其他Node服务没有).到目前为止似乎运行良好,虽然我偶尔会遇到稳定性问题,我通过检查代理仍在运行cron作业来"解决"(编辑:这些天似乎更稳定).代理非常轻巧,占用大约30MB内存.


Syn*_*xis 8

您还可以使用Apache 2的mod_proxy和mod_proxy_http,它们可能更可靠或性能更高,具体取决于您的系统.

这是一个例子:

# Use Apache for requests to http://example.com/
# but use Node.js for requests to http://example.com/node/
<VirtualHost *:80>
    ServerName example.com
    DocumentRoot /var/www/example/
    <Location /node>
        ProxyPass http://127.0.0.1:8124/
        ProxyPassReverse http://127.0.0.1:8124/
    </Location>
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)

当然,您可以根据需要修改指令,例如为虚拟主机使用不同的端口(例如,443),为Node.js使用不同的端口,或者在不同的块下设置代理,例如对于子域(例如,node.example.com).