SonarQube - HAProxy HTTPs无效标头

时间:2018-03-24 04:59:35

标签: http https sonarqube reverse-proxy haproxy

我的所有开发系统都支持haproxy(一切都是dockerized),我可以访问我的Jenkins / Gitlab /和Sonar,但不能访问Nexus。在查看nexus容器的docker日志之后,我可以看到它正在获取请求,但是它说前向标头无效。我的目标是让haproxy使用https,而haproxy背后的应用只使用http。这样,应用程序可以通过代理进行https,但不需要自己配置。

以下是日志消息:

nexus_1     | 2018-03-23 17:35:08,874-0500 WARN  [qtp1790585161-43] *SYSTEM 
org.sonatype.nexus.internal.web.HeaderPatternFilter - rejecting request 
from 98.192.146.97 due to invalid header 'X-Forwarded-Proto: \http'

这是我对nexus的haproxy配置:

frontend www-https
    bind *:443 ssl crt /etc/haproxy/certs/server.pem
    reqadd X-Forwarded-Proto:\http
    acl jenkins hdr_beg(host) -i jenkins.
    acl nexus hdr_beg(host) -i nexus.
    acl git hdr_beg(host) -i git.
    acl sonar hdr_beg(host) -i sonar.

    use_backend jenkins if jenkins
    use_backend nexus if nexus
    use_backend git if git
    use_backend sonar if sonar

backend nexus
    mode http
    balance roundrobin
    option forwardfor
    http-request set-header X-Forwarded-Port %[dst_port]
    server nexus1 nexus:8081 check

我最初的这条线存在于我的所有其他应用中:

    http-request add-header X-Forwarded-Proto https if { ssl_fc }

但是当启用时Sonar会抛出此错误:

nexus_1     | 2018-03-23 23:54:38,132-0500 WARN  [qtp1790585161-43] 
*SYSTEM org.sonatype.nexus.internal.web.HeaderPatternFilter - rejecting 
request from 98.192.146.97 due to invalid header 'X-Forwarded-Proto: 
\http,https'

是否有一些特殊的nexus需要与haproxy一起使用?

编辑:我已经确认,如果" docker-compose exec haproxy sh"我可以卷曲" nexus:8081"它给了我index.html。所以我知道容器可以正确地与nexus容器通信。

1 个答案:

答案 0 :(得分:2)

http-request add-header X-Forwarded-Proto https if { ssl_fc }

在大多数情况下,这基本上是错误的。无论您在何处使用它,都可能需要更改它,因为您不想添加此标题 - 您希望设置它。您需要使用您的版本来覆盖传入请求中可能存在的任何内容。

http-request set-header X-Forwarded-Proto https if { ssl_fc }

添加标题会保留以前的值,包括您在此行中错误添加的值:

reqadd X-Forwarded-Proto:\http

您需要在\之后需要一个空格,或者您需要完全删除\ ...但实际上,最好使用http-request set-header完成此操作,因为这在操作上优先于req*行动。

但是,无论如何,拥有那条线并没有明显的意义,因为你的前端使用bind *:443 ssl,所以ssl_fc在这个前端总是如此。因此,您的前端可以简单地设置正确的标题。

http-request set-header X-Forwarded-Proto https