在 openshift 中强制使用 https HAProxy cartridge 并仅为特定的 urls 模式启用
Force https HAProxy cartridge in openshift and enabled only for specific urls patterns
我有 openshift scalable play application 我的问题是我无法强制使用 https,我只想提供以 /portal
或 /api
开头的 URL
所以如果我点击 https://www.example.com
之类的东西,我不想让 haproxy 关心它,因为我已经有一个 WordPress 服务于主网站,但是如果我点击 'https://www.example.com/api' 那么 HAProxy必须参与并且负载平衡器应该在自动缩放齿轮之间工作。
我尝试了很多关于 HAProxy 配置的答案,包括文档:
http://cbonte.github.io/haproxy-dconv/1.4/configuration.html#4.2-redirect%20scheme
和
https://developers.openshift.com/faq/troubleshooting.html#_how_do_i_redirect_traffic_to_https
乃至
https://github.com/openshift/origin/blob/master/images/router/haproxy/conf/haproxy-config.template
类似 redirect scheme https if !{ ssl_fc }
的东西根本没有帮助。
没有任何帮助,一旦我添加 frontend
它就停止工作,而且我在我的应用程序齿轮中的任何地方都看不到日志文件。
我该怎么做?
以下是我的haproxy.cfg
defaults
mode http
log global
option httplog
option dontlognull
option http-server-close
#option forwardfor except 127.0.0.0/8
option redispatch
retries 3
timeout http-request 10s
timeout queue 1m
timeout connect 10s
timeout client 1m
timeout server 1m
timeout http-keep-alive 10s
timeout check 10s
maxconn 128
listen stats 127.9.3.131:8080
mode http
stats enable
stats uri /
listen express 127.9.3.130:8080
cookie GEAR insert indirect nocache
option httpchk GET /portal
http-check expect rstatus 2..|3..|401
balance leastconn
server local-gear 127.9.3.129:8080 check fall 2 rise 3 inter 2000 cookie local-xxxxxxxxxx
我通过提供特定模式解决了问题,但不是 https,https 的问题是 Openshift Cloud v2 中使用的 HAProxy 版本太旧,他们拥有的旧版本不支持 https,甚至1.4版本以后的补丁没有应用,Openshift的HAProxy版本为:HAProxy version 1.4.22, released 2012/08/09
!严重地!正如我在 HAProxy 的文档中看到的那样,最新的次要版本是 1.4.27 足以解决这个问题。
因此,为了强制使用 HTTPS,我从我的应用程序而不是 HAProxy 执行了这一步。
无论如何,为了提供特定模式(在我这里的示例中,我只为 /api 和 /portal 提供服务)配置文件更改为类似以下代码的内容,请注意,我删除了 listen
并使用 backend
和 frontend
代替:
frontend express
acl api path_beg -i /api
acl portal path_beg -i /portal
bind 127.9.3.130:8080
use_backend servers if api
use_backend servers if portal
default_backend website
cookie GEAR insert indirect nocache
backend servers
option httpchk GET /portal
http-check expect rstatus 2..|3..|401
balance leastconn
server local-gear 127.9.3.130:8080 check fall 2 rise 3 inter 2000 cookie local-xxxxxxxxxx
backend website
balance leastconn
server webserver DOMAIN_IP
请注意以下事项:
- 在更改之前始终备份旧的配置文件。
- 使用原配置文件中提供的本地IP,copy/paste上面的代码肯定行不通,另外一定要把
xxxxxxxxxx
替换成你原配置文件中提供的gear id配置文件。
P.S:
Openshift online v2 已弃用,从明年 8 月起也将停止接受任何新帐户,v3 应该会更好,但直到现在它仍然是 "preview" 尚未公开。
我有 openshift scalable play application 我的问题是我无法强制使用 https,我只想提供以 /portal
或 /api
所以如果我点击 https://www.example.com
之类的东西,我不想让 haproxy 关心它,因为我已经有一个 WordPress 服务于主网站,但是如果我点击 'https://www.example.com/api' 那么 HAProxy必须参与并且负载平衡器应该在自动缩放齿轮之间工作。
我尝试了很多关于 HAProxy 配置的答案,包括文档: http://cbonte.github.io/haproxy-dconv/1.4/configuration.html#4.2-redirect%20scheme 和 https://developers.openshift.com/faq/troubleshooting.html#_how_do_i_redirect_traffic_to_https 乃至 https://github.com/openshift/origin/blob/master/images/router/haproxy/conf/haproxy-config.template
类似 redirect scheme https if !{ ssl_fc }
的东西根本没有帮助。
没有任何帮助,一旦我添加 frontend
它就停止工作,而且我在我的应用程序齿轮中的任何地方都看不到日志文件。
我该怎么做?
以下是我的haproxy.cfg
defaults
mode http
log global
option httplog
option dontlognull
option http-server-close
#option forwardfor except 127.0.0.0/8
option redispatch
retries 3
timeout http-request 10s
timeout queue 1m
timeout connect 10s
timeout client 1m
timeout server 1m
timeout http-keep-alive 10s
timeout check 10s
maxconn 128
listen stats 127.9.3.131:8080
mode http
stats enable
stats uri /
listen express 127.9.3.130:8080
cookie GEAR insert indirect nocache
option httpchk GET /portal
http-check expect rstatus 2..|3..|401
balance leastconn
server local-gear 127.9.3.129:8080 check fall 2 rise 3 inter 2000 cookie local-xxxxxxxxxx
我通过提供特定模式解决了问题,但不是 https,https 的问题是 Openshift Cloud v2 中使用的 HAProxy 版本太旧,他们拥有的旧版本不支持 https,甚至1.4版本以后的补丁没有应用,Openshift的HAProxy版本为:HAProxy version 1.4.22, released 2012/08/09
!严重地!正如我在 HAProxy 的文档中看到的那样,最新的次要版本是 1.4.27 足以解决这个问题。
因此,为了强制使用 HTTPS,我从我的应用程序而不是 HAProxy 执行了这一步。
无论如何,为了提供特定模式(在我这里的示例中,我只为 /api 和 /portal 提供服务)配置文件更改为类似以下代码的内容,请注意,我删除了 listen
并使用 backend
和 frontend
代替:
frontend express
acl api path_beg -i /api
acl portal path_beg -i /portal
bind 127.9.3.130:8080
use_backend servers if api
use_backend servers if portal
default_backend website
cookie GEAR insert indirect nocache
backend servers
option httpchk GET /portal
http-check expect rstatus 2..|3..|401
balance leastconn
server local-gear 127.9.3.130:8080 check fall 2 rise 3 inter 2000 cookie local-xxxxxxxxxx
backend website
balance leastconn
server webserver DOMAIN_IP
请注意以下事项:
- 在更改之前始终备份旧的配置文件。
- 使用原配置文件中提供的本地IP,copy/paste上面的代码肯定行不通,另外一定要把
xxxxxxxxxx
替换成你原配置文件中提供的gear id配置文件。
P.S: Openshift online v2 已弃用,从明年 8 月起也将停止接受任何新帐户,v3 应该会更好,但直到现在它仍然是 "preview" 尚未公开。