我已经部署了一个工作的nodejs rest服务(使用restify构建),它在openshift上正确启动,因为我可以读取日志:
listening at http://127.2.188.1:8080
我使用了常用的环境参数来绑定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
如果我在应用程序的公共url(
/something/1337
)上调用相同的端点(http://myapp-myusername.rhcloud.com
),则会得到一个503, No server is available to handle this request
。由于我的应用程序是可伸缩的,这可能是一些配置问题,如果是,我如何解决它?
最佳答案
之所以发生这种情况,是因为openshift在可伸缩的应用程序中使用haproxy作为负载平衡器。haproxy被配置为ping根'/'url以进行运行状况检查,以确定应用程序是否处于启动或关闭状态。在您的应用程序中,您没有在根url上配置任何内容,因此当haproxy ping'/'时,它得到503,因此您的应用程序的行为如下所示。有两种方法可以解决这个问题
创建index.html并将其推送到openshift应用程序
更好的解决方案是配置haproxy配置文件。使用rhc ssh --app
命令ssh进入主齿轮,然后将目录更改为haproxy/conf
,然后将option 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/