Вопрос: Как получить имя сервера, который подал запрос во фронт-разделе?


Мне нужно добавить имя сервера в ответ HTTP-заголовки X-Servedby. Есть ли способ заменить [server] именем сервера, который подал запрос?

frontend front x.x.x.x:80
  default_backend balancing
  rspadd X-Servedby:\ [server] #I need to replace [server]

backend balancing
  server srv1 x.x.x.x:80 check
  server srv2 x.x.x.x:80 check

5
2017-07-03 15:31


Источник




Ответы:


Чтобы достичь этого, измените frontend строфа к следующему:

frontend front x.x.x.x:80
    default_backend balancing
    acl srv1 srv_id 1
    acl srv2 srv_id 2
    rspadd X-Servedby:\ srv1 if srv1
    rspadd X-Servedby:\ srv2 if srv2

Однако лучшей альтернативой масштабирования будет использование cookie в backend строфа:

backend balancing
    cookie SRVNAME insert
    server srv1 x.x.x.x:80 cookie srv1 check
    server srv2 x.x.x.x:80 cookie srv2 check

Надеюсь это поможет!


6
2017-07-03 15:39



rspadd X-Servedby:\ srv1 if srv1 вызывает error detected while parsing a 'rspadd' condition, Я полагаю, что srv1 в этом условии должен быть определен как ACL, но представляется невозможным определить ACL в зависимости от имени сервера. О файлах cookie - этот метод приведет к тому, что все запросы, имеющие cookie SRVNAME = srv1, будут обслуживаться сервером srv1, не так ли? - Kirzilla
Я только что нашел srv_id которые могут использоваться в ACL. - Kirzilla
Извините, не за моим столом. Надеюсь, это даст вам хотя бы идею. Когда я доберусь до своего стола, я дважды проверю свою конфигурацию. - Belmin Fernandez
Большой! Пожалуйста, добавьте определение id 1, id 2 в server директивы. - Kirzilla
@ Белин, спасибо! Я опубликовал более сложную конфигурацию для тех, кто решает одну и ту же проблему. - Kirzilla


Мы должны использовать srv_id которая обеспечивает id значение, определенное для server

frontend front x.x.x.x:80

  acl serve_us1 url_beg /west
  acl serve_us2 url_beg /east

  #defining acl for srv_id
  acl served_by_us1 srv_id 1  #look at srv_id
  acl served_by_us2 srv_id 2  #look at srv_id

  use_backend us1 if serve_us1
  use_backend us2 if serve_us2 
  default_backend balancing

  rspadd X-ServedBy:\ us1 if served_by_us1
  rspadd X-ServedBy:\ us2 if served_by_us2

backend us1
  server srv1 1.1.1.1:80 check id 1 #look at id

backend us2
  server srv2 2.2.2.2:80 check id 2 #look at id

backend balancing
  server srv1 1.1.1.1:80 check id 1 #look at id
  server srv2 2.2.2.2:80 check id 2 #look at id

2
2017-07-03 16:05