看着你的其他问题,它被标记为与此重复,您在那里获得了一些附加信息,可能有助于阐明您需要什么。具体来说,您提到以下内容:
我想用 NodeJS 托管多个 http 服务器,所有服务器都获取和发送 http 请求。同时我想让 Apache 运行,它占用端口 80。如果我禁用 Apache 并让 NodeJS 在端口 80 上运行,它会工作,但我不能让它们同时运行。
该脚本将在端口 8081 本地运行并接收请求,但我似乎无法通过 Internet 向它发送 AJAX 请求,即使在使用路由器转发端口之后也是如此:
我认为 @ankit-agarwal 可能是正确的,因为您需要反向代理设置来将流量转发到不同的后端。假设您有一个面向外部的 IP 地址,您应该能够使用每个后端正在侦听的端口来访问它们。例如,如果您的计算机公开的公共 IP 地址是 100.120.110.43:
+---------+------+-------------------------------------+
| Backend | Port | Web Address |
+=========+======+=====================================+
| Apache | 80 | 100.120.110.43 or 100.120.110.43:80 |
| Node1 | 8080 | 100.120.110.43:8080 |
| Node2 | 8081 | 100.120.110.43:8081 |
+---------+------+-------------------------------------+
如果您想在不指定端口的情况下访问每个后端,则必须有某种方法来告诉您的内部网络根据请求提供服务的后端。实现此目的的一种方法是使用基于路径的路由,您可以在其中设置反向代理,根据 url 中的路径将流量路由到不同的后端。您没有发布您的 Apache 配置,但您可以使用当前的 Apache 服务器来处理此问题代理通行证 and 反向代理通行证类似于下面的指令:
ProxyPass "/node1" "http://100.120.110.43:8080/"
ProxyPassReverse "/node1" "http://100.120.110.43:8080/"
ProxyPass "/node2" "http://100.120.110.43:8081/"
ProxyPassReverse "/node2" "http://100.120.110.43:8081/"
使用反向代理的一个很酷的事情是您不必向公众公开您的节点后端。假设您没有,并且只能从内部网络的 0.0.0.0:port 访问它们。
Listen 80
<VirtualHost *:80>
DocumentRoot /www/apache
ServerName www.apachefrontend.com
ProxyRequests off
ProxyPass /node1 http://0.0.0.0:8080/
ProxyPassReverse /node1 http://0.0.0.0:8080/
ProxyPass /node2 http://0.0.0.0:8081/
ProxyPassReverse /node2 http://0.0.0.0:8081/
</VirtualHost>
您还可以指向只有您有权访问的不同主机/IP。
最后,如果您有不同的 DNS 记录指向不同的后端,您还可以使用 VirtualHost 和 ServerName。
Listen 80
<VirtualHost *:80>
DocumentRoot /www/apache
ServerName www.apachefrontend.com
</VirtualHost>
<VirtualHost *:80>
ServerName www.nodebackend1.com
ProxyRequests off
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
<Location />
ProxyPass / http://0.0.0.0:8080/
ProxyPassReverse / http://0.0.0.0:8080/
</Location>
</VirtualHost>
<VirtualHost *:80>
ServerName www.nodebackend2.com
ProxyRequests off
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
<Location />
ProxyPass / http://0.0.0.0:8081/
ProxyPassReverse / http://0.0.0.0:8081/
</Location>
</VirtualHost>
为了使上述任何一个工作,你需要有mod_proxy
and mod_proxy_http
在阿帕奇中启用。
这些可能不是最可靠的示例,我还没有测试它们,但它们应该演示这个想法。您可以了解更多here.