Назад | Перейти на главную страницу

Как настроить HAProxy Behind Cloudfront для Jenkins

Хорошо, сеть пока что

end user (https)-> cloudfront (http)-> haproxy (http)-> jenkins

Моя установка jenkins в основном работает, но я вижу ошибку о неправильной настройке прокси, и я испытываю https://issues.jenkins-ci.org/browse/JENKINS-14313

Я прочитал следующее, но столкнулся с некоторыми непонятными проблемами.

  1. https://wiki.jenkins.io/display/JENKINS/Running+Jenkins+behind+HAProxy
  2. https://gist.github.com/xelwarto/ac4f8b43e4194355082c

Это то, что я придумал до сих пор

defaults
    mode http
    retries 3
    timeout connect 120s
    timeout client 60s
    timeout server 60s
resolvers docker
    nameserver dns "127.0.0.11:53"
frontend web
    bind *:8080
    default_backend jenkins
backend jenkins
    cookie SERVERID insert indirect nocache
    server jenkins jenkins:8080 check cookie s1 resolvers docker resolve-prefer ipv4
    acl h_cfp_exists req.hdr(CloudFront-Forwarded-Proto) -m found
    acl response-is-redirect res.hdr(Location) -m found
    http-request set-header X-Forwarded-Proto https if h_cfp_exists

Вот заголовки (у заголовков есть домен и безопасные строки, искаженные, косые черты и имена сохранены), полученные jenkins

    POST /j_acegi_security_check HTTP/1.1
    Host: jenkins.default.mydomain.tld
    X-Amz-Cf-Id: _UoBjzMmiJvkMZOnRbt6Ai2rBZ4hm1jAz_5IGAi3OwI9TxQ5tCW5Bg==
    Content-Length: 339
    User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36 OPR/49.0.2725.64
    Via: 2.0 9a063989aee4dbd9381a2cf612c17c08.cloudfront.net (CloudFront)
    Cookie: JSESSIONID.0262fa7d=node01f8yc6mw0a5p6gv09wvy275j610.node0; JSESSIONID.9f7e10bd=node01i3tan71bopiv2ufhmos5dccq83.node0; JSESSIONID.d3f1b83b=node0nqkbin0vx70f12cdr9kmgatyk6.node0
    X-Forwarded-For: 2605:6000:1025:bd:31c7:df4d:6bd6:8b9c
    CloudFront-Is-Mobile-Viewer: false
    CloudFront-Is-Tablet-Viewer: false
    CloudFront-Is-SmartTV-Viewer: false
    CloudFront-Is-Desktop-Viewer: true
    CloudFront-Viewer-Country: US
    Accept-Language: en-US,en;q=0.9
    Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
    Referer: https://jenkins.default.mydomain.tld/
    CloudFront-Forwarded-Proto: https
    Accept-Encoding: gzip, deflate, br
    cache-control: max-age=0
    origin: https://jenkins.default.mydomain.tld
    upgrade-insecure-requests: 1
    content-type: application/x-www-form-urlencoded
    X-Forwarded-Proto: https

и ответ, полученный браузером

content-length:0
date:Wed, 10 Jan 2018 15:45:21 GMT
expires:Thu, 01 Jan 1970 00:00:00 GMT
location:https://jenkins.default.mydomain.tld/
server:Jetty(9.4.z-SNAPSHOT)
set-cookie:JSESSIONID.d3f1b83b=node01o.node0;Path=/;Secure;HttpOnly
set-cookie:ACEGI_SECURITY_HASHED_REMEMBER_ME_COOKIE=Y2N1c2hpbmc6MTUxNjgwODcyMTQ5OTpmMmIzNDVkYjE2ODdhRlMGJmNWYz;Path=/;Expires=Wed, 24-Jan-2018 15:45:21 GMT;Max-Age=1209600;Secure;HttpOnly
status:302
via:1.1 6d16d2818.cloudfront.net (CloudFront)
x-amz-cf-id:WZMDdUGVK4fRg6E04gN2sr9RIgKDqeK0-kAANBbeu7eB3uFv9cAkQw==
x-cache:Miss from cloudfront
x-content-type-options:nosniff

Затем я вижу следующий GET /login HTTP/1.1 но я не понимаю, зачем он это делал. Также, возможно, интересно, что в глобальных настройках конфигурации нет установленного по умолчанию представления, на самом деле конфигурация для него, похоже, отсутствует. доступ через http, через haproxy все нормально Что ж, предупреждение все еще отображается, кажется, я могу исправить это, установив jenkins uri для использования http: // IP: порт.

как мне исправить мою настройку haproxy, чтобы логин jenkins не отображал форму входа, где должна быть панель управления? может ли кто-нибудь объяснить преобразования, которые должны быть выполнены без привязки к прокси-технологии, и почему (например, в примерах показано 127.0.0.1:8080, но htat, очевидно, не сработает для меня, однако, поскольку Location возвращает https, я ' Я не знаю, зачем мне это делать)?