【问题标题】:How to run nodejs server to listen to a custom port : 9001 and apache listens to other requests如何运行 nodejs 服务器来监听自定义端口:9001 和 apache 监听其他请求
【发布时间】:2020-09-22 12:08:17
【问题描述】:
所以,我有一个监听所有请求的 apache 服务器。
现在我想运行一个节点 https 服务器应用程序来监听端口 9001。
当我创建 https 服务器并让它监听 9001 时,它似乎在同一台机器上的 localhost 上工作。所以,如果我访问https://localhost:9001,我会得到我想要的页面。
但是当我从外部访问公共网站时,连同端口 9001 我在 Apache 上收到它。
我的配置是 Amazon Linux AMI
【问题讨论】:
标签:
node.js
apache
ssl
server
httpd.conf
【解决方案1】:
这里没有给出您的 Apache 服务器的确切配置;但是,最喜欢只监听端口 80(普通 HTTP 端口)上的请求。
由于您在 AWS 上运行,您可能使用安全组设置您的实例,该安全组设置为允许端口 80 上的入站连接。(我相信我见过的大多数指南都在您的安全中设置了入站规则组也打开端口 22 用于与实例的 SSH 连接,虽然这在此处是一个例外,因为它不会影响 Apache,但现在我提到它也许很熟悉?)。
如果您正在运行 Node 服务器并将其设置为侦听端口 9001,但未在您的安全组中将端口 9001 暴露给 Internet,则实际上只能从 localhost 访问它。
您可以在这里做两件事:
1) 在 AWS 控制台中,更新您的实例的安全组以允许目标端口 (9001) 上的入站连接。
这将起作用,但它远非可取,因为您直接公开您的应用程序可能会带来安全问题。
2) 您可以在 Apache 配置(或适当的 vhost.conf 等)中设置 ProxyPass 和 ProxyPassReverse 以利用 Apache 的反向代理功能并将 https://localhost:9001 添加为入站请求的目标. (您可能需要使用 localhost 的 IP -- https://127.0.0.1 -- 作为目标。对于 HTTPS,您还需要确保 Apache 已设置为读取您的证书,并且包含 SSLProxyEngine 和 @987654326 @。
(据我所知,nginx 是最常见的放置在 Node 应用程序前面作为反向代理的东西,但 Apache 可以充当这个角色。)