2014-04-29 16 views
2

我已經部署了的工作REST的NodeJS服務(帶內置的RESTify),其上Openshift正常啓動訪問,我可以讀取日誌:應用的NodeJS是不是從rhcloud.com應用程序URL

listening at http://127.2.188.1:8080 

我已經使用了常用的環境參數的IP和端口綁定:

vars.ipaddress = process.env.OPENSHIFT_NODEJS_IP; 
vars.port = process.env.OPENSHIFT_NODEJS_PORT || '8080'; 

事實上,如果我把我的REST服務,而我與ssh記錄,我得到正確的迴應:

curl http://127.2.188.1:8080/something/1337 

如果我在我的應用程序的公共URL(http://myapp-myusername.rhcloud.com)上調用相同的端點(/something/1337),我得到一個503, No server is available to handle this request

由於我的應用程序已縮放,是否會出現一些配置問題,如果可以,我該如何解決它?

+0

爲什麼IP「127.2.188.1」? openshift將環回設備上的東西路由到外部IP?如果沒有,您將無法在外部找到它,而無需自行路由,或綁定到非回送設備。 –

+0

它應該這樣做,但它看起來像默認情況下沒有正確配置。 – frapontillo

回答

5

發生這種情況的原因是因爲OpenShift在可伸縮應用程序中使用HAProxy作爲負載均衡器。 HAProxy配置爲ping健康檢查的根目錄「/」URL,以確定您的應用程序是啓動還是關閉。在你的應用程序中,你沒有在根網址上配置任何東西,所以當HAProxy ping'/'時它會得到503,因此你的應用程序的行爲就像這樣。有兩種方法可以解決這個問題

  1. 創建index.html,然後把它推到OpenShift應用
  2. 更好的解決辦法是配置HAProxy的配置文件。 SSH使用rhc ssh --app命令進入主要設備,然後將目錄更改爲haproxy/conf,然後將option httpchk GET /更新爲option httpchk GET /valid_location,最後使用rhc cartridge-restart --cartridge haproxy重新啓動HAProxy。您可以前往http://myapp-myusername.rhcloud.com/haproxy-status查看您的齒輪狀態。

希望這會對你有幫助。

+1

它的工作,謝謝!我創建了一個'/ ping'端點,並將其用作HAProxy的'httpchk'的參考。 – frapontillo

+0

我無法解釋我是如何迷路的,在看完這個答案之後我明白我的理解有多清楚。 – oooyaya

相關問題