Как связать веб-интерфейс с бэкэндом, когда запрос пути отличается? - PullRequest
0 голосов
/ 28 января 2019

У меня установлен Haproxy с разгрузкой https, и я пытаюсь правильно указать запросы, сделанные к веб-интерфейсу, на соответствующий сервер, но натолкнулся на некоторые препятствия.

У меня есть сервер на http://:9000/abc (НЕ в корне веб-сервера), и когда я устанавливаю веб-интерфейс с помощью https: /// abc, указатель работает, как и ожидалось, и я вижу страницу входа.

Но у меня также есть другой внутренний сервер, которыйна http://:8888 (В корне веб-сервера он самостоятельно перенаправляет на http://:8888/def), и я хочу, чтобы он был доступен по https: /// def. Но в этом случае указание не работает.

Как мне сделать https: /// def указывать на http://:8888? Вот мой .cfg

Использование HAproxy 1.7

# Automaticaly generated, dont edit manually.
# Generated on: 2019-01-28 13:59
global
    maxconn         1000
    stats socket /tmp/haproxy.socket level admin 
    uid         80
    gid         80
    nbproc          1
    hard-stop-after     15m
    chroot              /tmp/haproxy_chroot
    daemon
    tune.ssl.default-dh-param   2048
    server-state-file /tmp/haproxy_server_state

listen HAProxyLocalStats
    bind 127.0.0.1:2200 name localstats
    mode http
    stats enable
    stats refresh 10
    stats admin if TRUE
    stats show-legends
    stats uri /haproxy/haproxy_stats.php?haproxystats=1
    timeout client 5000
    timeout connect 5000
    timeout server 5000

frontend shared-frontend-merged
    bind            200.129.168.14:443 name 200.129.168.14:443  no-sslv3 ssl crt-list /var/etc/haproxy/shared-frontend.crt_list  
    mode            http
    log         global
    option          http-keep-alive
    option          forwardfor
    acl https ssl_fc
    http-request set-header     X-Forwarded-Proto http if !https
    http-request set-header     X-Forwarded-Proto https if https
    timeout client      30000
    acl         aclcrt_shared-frontend  var(txn.txnhost) -m reg -i ^ifamcmc\.ddns\.net(:([0-9]){1,5})?$
    acl         ACL1    var(txn.txnpath) -m sub -i abc
    acl         ACL2    var(txn.txnpath) -m sub -i def
    http-request set-var(txn.txnhost) hdr(host)
    http-request set-var(txn.txnpath) path
    use_backend glpi_ipvANY  if  ACL1 
    use_backend ciweb_ipvANY  if  ACL2

frontend http-to-https
    bind            200.129.168.14:80 name 200.129.168.14:80   
    mode            http
    log         global
    option          http-keep-alive
    timeout client      30000
    http-request redirect scheme https 

backend abc_ipvANY
    mode            http
    id          102
    log         global
    timeout connect     30000
    timeout server      30000
    retries         3
    option          httpchk OPTIONS / 
    server          abc 10.100.0.30:9000 id 103 check inter 1000  

backend def_ipvANY
    mode            http
    id          104
    log         global
    timeout connect     30000
    timeout server      30000
    retries         3
    option          httpchk OPTIONS / 
    server          def 10.100.0.40:8888 id 105 check inter 1000

Я ожидаю, что доступ к https: /// def правильно указывает на бэкэнд в http://:8888

https://<my.address.com>/abc ------>  http://<internal_ip>:9000/abc (OK)
https://<my.address.com>/def ------>  http://<internal_ip_2>:8888 (NOT OK)

1 Ответ

0 голосов
/ 29 января 2019

Пусть ваша система HAProxy сначала выполняет переадресацию на основе портов, а затем подстановочных знаков в вашем каталоге.

См. Ниже:

frontend a-frontend-conf

    # Declare an ACL using path_beg (Path Begins)
    acl path_images path_beg /images

    # Use backend server1 if acl condition path_images is fulfilled
    use_backend server1 if path_images

backend server1
    [...]

Источник: https://serverfault.com/questions/659793/haproxy-how-to-balance-traffic-within-directory-reached

...