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

m2xkgtsf  于 2022-12-22  发布在  Node.js
关注(0)|答案(7)|浏览(120)

我必须把nodejs放在端口80上,但是apache已经在使用它了。我怎么能把两个(nodejs和apache)放在同一个端口80上呢?我需要它,因为在我的大学里,除了端口80之外,所有的端口都被屏蔽了。(这是一个实时应用程序,有nodejs和socket.io(websockets),另一边是一个php应用程序)。非常感谢

brc7rcf0

brc7rcf01#

我通过node.js代理完成此操作。
使用npmofficial page安装http-proxy
示例:

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);

这将创建一个侦听端口80的节点进程,并将域请求转发到:81、82、83等。我建议使用forever运行此进程,并向init.d添加一个条目,以便在系统关闭时启动代理。

du7egjpx

du7egjpx2#

您还可以使用Apache 2的mod_proxy和mod_proxy_http,这两种方法可能更可靠或性能更好,具体取决于您的系统。
下面是一个例子:
首先对代理运行以下命令以允许

sudo a2enmod proxy
sudo a2enmod proxy_http
sudo a2enmod proxy_balancer
sudo a2enmod proxy_balancer
sudo a2enmod lbmethod_byrequests

# 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>

And of course you can modify the directives to your needs, such as using a different port for your virtual host (e.g., 443), different port for Node.js, or set up the proxy under a different block, such as for a subdomain (e.g., node.example.com).

t5zmwmid

t5zmwmid3#

我个人从@liammclennan.Some suggest的Angular 做了相反的事情,通过Apache代理会破坏Node的一些性能和可伸缩性优势(我自己没有经验,因为我的服务器没有那么多流量,但从@liammclennan的链接:* “通过Apache传入的每个请求都将导致Apache线程等待/阻塞,直到响应从Node.js进程返回。"*,这显然与Node的架构不匹配。)
我使用node-http-proxy大致按照第一个链接中的描述设置了一个Node代理服务器(我的Node代理运行在端口80上; Apache和我的其他Node服务没有)。到目前为止似乎工作得很好,虽然我偶尔会遇到稳定性问题,我已经通过检查代理是否仍在使用cron作业“解决”了这些问题(**edit:**现在看起来稳定多了)。代理相当轻量级,占用大约30 MB内存。

a8jjtwal

a8jjtwal4#

你不能这样做,你必须在另一个端口运行node.js,然后通过apache代理请求,你可以使用mod_proxy
http://davybrion.com/blog/2012/01/hosting-a-node-js-site-through-apache/

11dmarpk

11dmarpk5#

在这种情况下,我通常使用haproxy作为前端,并将其代理到适当的后端服务器(尽管根据需要,将node.js进程设置为代理服务器也是一种有效的方法)。

z9smfwbn

z9smfwbn6#

用于httpd.conf
激活模块、代理模块和代理http
如果您正在使用虚拟主机

<virtualhost ...>
    ServerName api.domain.com
    ........

ProxyPreserveHost On
    
    ProxyPass / http://localhost:8080/
    
    ProxyPassReverse / http://localhost:8080/
    
    
    </virtualhost>

假设你在8080上运行nodejs服务器,你不需要注意nodejs中的ssl,所有的都应该在apache中完成
然后尝试https://api.domain.com/

yzuktlbb

yzuktlbb7#

我找到了一个很酷的要点Run apache and nodejs on port 80。还没有尝试,但当然会做

步骤1

获取提供2或更多IP地址的VPS。

步骤2

从WHM cPanel中,找到菜单项Service Configuration,选择Apache Configuration,然后单击Reserved IPs Editor

步骤3

勾选您不希望Apache监听的IP地址,并将其写下来,以便在下一步中使用。单击Save

步骤4

安装Node.js,并创建一个如下所示的服务器:

var http = require('http');

var server = http.createServer(function(req, res) {
  res.writeHead(200);
  res.end('Hello, world!');
});

server.listen(80, '111.111.111.111');

111.111.111.111替换为您之前从WHM cPanel保留的IP地址。

步骤5

不要再浪费时间了,不要再听那些告诉你使用mod_rewrite来代理Node.js的人的话了。

    • 更新日期:**

We can solve a problem in many different ways and IMHO, we should at least know each possible way 😉. We can do it without buying a new IP of course putting a proxy in front of both Apache and NodeJS server each running other ports except 80.

相关问题