我已经部署了一个正在运行的 NodeJS REST 服务(使用 Restify 构建),该服务已在 Openshift 上正确启动,因为我可以读取日志:
listening at http://127.2.188.1:8080
我使用了常用的环境参数来绑定(bind)IP和端口:
vars.ipaddress = process.env.OPENSHIFT_NODEJS_IP;
vars.port = process.env.OPENSHIFT_NODEJS_PORT || '8080';
事实上,如果我在使用 ssh
登录时调用 REST 服务,我会得到正确的响应:
curl http://127.2.188.1:8080/something/1337
如果我在应用程序的公共(public) URL (http://myapp-myusername.rhcloud.com
) 上调用相同的端点 (/something/1337
),我收到 503,没有服务器可用于处理此请求
。
由于我的应用程序已扩展,这可能是一些配置问题,如果是,我该如何解决?
最佳答案
发生这种情况的原因是 OpenShift 在可扩展应用程序中使用 HAProxy 作为负载均衡器。 HAProxy 配置为 ping root '/' url 进行运行状况检查,以确定您的应用程序是正常运行还是关闭。在您的应用程序中,您尚未在根 url 处配置任何内容,因此当 HAProxy ping '/' 时,它会得到 503,因此您的应用程序的行为如下。有两种方法可以解决此问题
- 创建一个index.html并将其推送到OpenShift应用程序
- 更好的解决方案是配置 HAProxy 配置文件。使用
rhc ssh --app
命令通过SSH连接到主设备,然后将目录更改为haproxy/conf
,然后将选项httpchk GET/
更新为option httpchk GET/valid_location
,最后使用 rhc Cartridge-restart --cartridge haproxy 重新启动 HAProxy。您可以通过访问http://myapp-myusername.rhcloud.com/haproxy-status来检查您的齿轮状态。 .
希望这对您有帮助。
关于node.js - 无法从 rhcloud.com 应用程序 URL 访问 Openshift 上的 NodeJS 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23364221/