我有一个使用Restify在Node中编写的REST服务,该服务可以在我的主机系统上运行,并且如果我正在进入盒式磁带,则可以正常工作。但是当我尝试远程调用此服务时,无法访问该服务(在浏览器中我收到“无法访问此站点”错误)。
我实际上是在同时运行两个应用程序。一个是使用Express为动态网页提供服务的快速应用程序,并调用在另一个端口上运行的REST服务。
除了尝试访问REST服务时,网页工作正常。它使用配置的OPENSHIFT_NODEJS_IP端口。 REST服务正在使用我指定的端口:8097。
对于一个简单的测试,我创建了一个以简单状态响应的休息端点。在盒式磁带上的SSH会话中,我可以输入此内容并查看此结果:
curl http://${NODE_IP}:8097/status
"{status: 'ok'}"
但是在我的主机系统上,我无法使用分配给盒式磁带的公共IP地址来卷曲此地址:
curl 52.87.189.180:8097/status
curl: (7) Failed to connect to 52.87.189.180 port 8097: Operation timed out
我能够卷曲Web应用程序并通过:
curl 52.87.189.180
我在某处读到有关HA代理是Web平衡应用程序的问题,但我现在还没有。我的应用程序是一个简单的NodeJS盒式磁带和MongoDB。 REST服务器在本地正常运行,为CORS启用,并使用OpenShift环境变量配置连接。这是端口:
lsof -l
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
mongod 22936 3389 11u IPv4 518405103 0t0 TCP 127.6.158.130:27017 (LISTEN)
node 23028 3389 11u IPv4 518408054 0t0 TCP 127.6.158.129:8097 (LISTEN)
node 23028 3389 12u IPv4 518408056 0t0 TCP 127.6.158.129:8080 (LISTEN)
所以我的问题是,是什么阻止我从外部世界访问其他应用程序?
编辑2/1/2017:
这很有趣。我查找了端口转发并从我的主机系统尝试了这个:
rhc port-forward -a myappname
现在我可以在本地连接http://localhost:8097上的REST服务。当用localhost替换远程ip地址时,我的curl命令工作正常,我可以使用REST客户端(我使用Postman)来测试我的端点。
必须有某种防火墙规则阻止外部访问,或者它可能与我在REST应用程序本身中设置响应头的方式有关。如果是后者,我认为会有一些包含错误代码的响应,而不是等待回复的超时。