HAProxy - добавить косую черту - PullRequest
0 голосов
/ 08 июня 2018

Я работаю над проектом, в котором мне нужно, чтобы запросы, направленные на определенную страницу, направлялись в отдельный бэкэнд.

Например, все запросы на https://mycooldomain.com будут отправляться на бэкэнд "A».Но, если перейти к https://mycooldomain.com/secretpage, я хочу, чтобы он перешел на бэкэнд "B".

Теперь у меня это работает, но я сталкиваюсь с проблемой, где мне нужен конечный слеш для правильной работы.

Итак, мне нужен способ сказать, если запрос https://[whateverhostnameisused]/secretpage перенаправить на https://[whateverhostnameisused]/secretpage/.

Вот пример моей конфигурации:

frontend f_https
    bind *:443 ssl crt cert.pem
    reqadd X-Forwarded-Proto:\ https

    #define hosts
    acl host_a hdr(host) -i a.mycooldomain.com
    acl host_b hdr(host) -i b.mycooldomain.com
    acl host_c hdr(host) -i c.mycooldomain.com

    #custom acls
    acl secret path_beg -i /secretpage

    #Custom redirects

    ##define backend
    use_backend b_secret if secret
    use_backend b_a if host_a
    use_backend b_b if host_b
    use_backend b_c if host_c

    default_backend b_https

backend b_secret
    server secret 192.168.15.15:5575 check

1 Ответ

0 голосов
/ 09 июня 2018

Похоже, что вы ищете что-то вроде этого:

http-request redirect scheme https drop-query append-slash if { path -m str /secretpage }

Это должно работать, если оно применяется либо к интерфейсу, либо к концу.

http://cbonte.github.io/haproxy-dconv/1.6/configuration.html#4.2-redirect%20scheme

Указание схемы необходимо только потому, что для синтаксиса требуется один из location | prefix | scheme, а с двумя другими вариантами вам придется самостоятельно собрать URL-адрес в конфигурации.


Обратите внимание также на то, что reqaddофициально не рекомендуется, но предпочтительный способ добавить этот заголовок запроса выглядит следующим образом:

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

Обратите внимание, что : не указано и пробел после имени заголовка не должен быть экранирован с помощью \,Это приводит к тому же результату, но использует другой путь кода внутри HAProxy и должен быть более эффективной операцией.Вы, возможно, захотите использовать директивы http-request и http-response вместо reqxxx и rspxxx, когда это возможно, поскольку они также лучше подходят для более сложных манипуляций.

...