我正在使用Openshift,Haproxy,Ruby on Rails和Postgresql作为后端。我已成功部署了所有内容,但Haproxy无法向我的rails应用程序的根路径发送HTTP请求。
应用根/日志/ haproxy.log
[ALERT] 114/053517 (469622) : proxy 'express' has no server available!
[WARNING] server express/local-gear is DOWN, reason: Layer7 wrong status, code: 404
应用根/日志/ haproxy_ctld.log
ERROR -- : Could not connect to the application. Check if the application is stopped.
应用根/日志/ ruby.log
"OPTIONS /products HTTP/1.0" 404 1351 "-" "-"
的routes.rb
root :to => 'products#index'
haproxy.cfg
global
maxconn 4096
stats socket /var/lib/{ID}/haproxy//run/stats level admin
defaults
log global
mode http
option httplog
option dontlognull
option http-server-close
retries 3
option redispatch
maxconn 128
timeout http-request 10s
timeout queue 1m
timeout connect 10s
timeout client 1m
timeout server 1m
timeout http-keep-alive 10s
timeout check 10s
listen stats xxx.xxx.xxx.131:8080
mode http
stats enable
stats uri /
listen express xxx.xxx.xxx.130:8080
cookie GEAR insert indirect nocache
option httpchk /
balance leastconn
server local-gear xxx.xxx.xxx.129:8080 check fall 2 rise 3 inter 200 cookie local-{APP_ID}
我删除了公共文件夹(Rails)中的index.html。但是,当我再次将index.html文件添加到公共文件夹时,一切正常,我可以访问我的应用程序:app_name-appdomain.rhcloud.com/products 这并不完美,因为我想在不向URL添加/产品的情况下访问它。
感谢您的帮助! 如果您需要有关设置的更多详细信息,请与我们联系
干杯!
答案 0 :(得分:1)
所以你可以尝试解决这个问题,其中一个应该解决你的问题。
选项A:尝试将行option httpchk /
更改为option httpchk GET /
如果这不起作用,请确保您的webroot中有index.html。如果您不喜欢这种方法或想要指向其他一些html文件(存在于Web根目录中),您可以将其修改为option httpchk some-other-file.html
选项B:只需注释这一行,但会影响haproxy健康检查。
选项C:将行修改为
选项httpchk OPTIONS * HTTP / 1.1 \ r \ nHost:\ www
其中www是您的应用链接,例如,XXX-yyy.rhcloud.com
4.另外一个观察结果是,haproxy可能无法检查Rails路径,因为haproxy.cfg最后一行的超时似乎相当少。尝试更改" 200" (2ms)到" 20000" (20S)。