我想在端口 80 上运行一个 XAMPP 服务器和一个 Nodejs 服务器。
如果服务器收到 HTTP 请求,则 XAMPP 将处理它;如果服务器收到 Websocket 请求,则 Nodejs
怎么可能?如果端口已被使用,那么我就无法启动其他服务器程序。
答案1
您需要使用反向代理来执行此操作,例如 Apache 2.4。修改代理服务器。
将其用作前端,然后将连接隧道传输到适当的后端。
答案2
只有一个进程可以在特定端口上监听相同的 IP 地址和协议,因为否则操作系统将不知道将接收到的数据包发送给哪个进程。
为了实现你想要的,你必须使用反向代理它将监听端口 80 并将流量转发到正确的目的地。有多种方法可以做到这一点。例如,您可以设置 Web 服务器 (Apache) 来转发 WebSocket 请求,或者您可以配置 Node.js 来转发 HTTP 流量。研究可用的选项并选择最适合您需求的选项。
答案3
除了其他人已经提到的反向代理选项之外,您还可以为机器分配多个 IP 地址。对于 IPv4,这可能需要付费(或者根据服务器托管的位置而无法使用),但如果您可以使用 IPv6(即,如果连接到其中一个或两个或您的服务的人将支持 IPv6),则不会付费。这样,两个服务都可以在不同的地址上侦听端口 80。
由于您只提到端口 80,我假设您没有使用 HTTPS。如果您使用的是 HTTPS,那么如果使用反向代理选项,您需要拥有多名称 SSL 证书或配置 SNI,并接受某些旧客户端(XP 上的 IE、旧版 Android)无法无错误连接的事实。多地址选项可以规避此问题,但需要分配额外的地址。