@NyxDeveloper

Как настроить балансировку запросов по признаку мандатного доступа в сессии?

Пытаемся настроить балансер для разных меток на астре 1.6 с использованием apache2. Используется модуль libapache2-mod-lbmethod-bymaclabel.
Логика такая, что пользователь при входе в систему выбирает метку (например 3) и при обращении из браузера к балансировщику, апач перенаправляет его к нужному серверу.
Вроде все звучит легко, но реализация подводит. Балансер постоянно кидает на первый BalancerMember, игнорируя остальные. Пример конфига:
<VirtualHost *:80>
  ServerAdmin webmaster@localhost
  DocumentRoot /var/www/html/
  ProxyPreserveHost On
  ProxyRequests On
  ProxyVia On
  RewriteEngine On

  ProxyPassReverse "/ws-event-control" "balancer://project-ws/ws-event-control"
  ProxyPass "/ws-event-control" "balancer://project-ws/ws-event-control"

  ProxyPassReverse "/ws-unit" "balancer://project-ws/ws-unit"
  ProxyPass "/ws-unit" "balancer://project-ws/ws-unit"

  ProxyPassReverse "/ws-target" "balancer://project-ws/ws-target"
  ProxyPass "/ws-target" "balancer://project-ws/ws-target"

  ProxyPassReverse "/" "balancer://project/"
  ProxyPass "/" "balancer://project/"
  SetEnv proxy-sendcl 1
  <Proxy "balancer://project/">
    RequestHeader set X-Remote-User expr=%{REMOTE_USER}

  <Limit GET POST PUT PATCH DELETE> # OPTIONS должен проходить без авторизации (для того, чтобы проходил CORS preflight)
    AuthType Kerberos
    KrbAuthRealms ALD.DOMAIN.DEV
    KrbServiceName HTTP/mac-balancer.stand.domain.dev
    Krb5Keytab /etc/apache2/keytab
    KrbMethodNegotiate on
    KrbMethodK5Passwd on
    Require valid-user
    KrbSaveCredentials on
  </Limit>
      BalancerMember "http://mac0.centr.stand.domain.dev:80" route=0:0
      BalancerMember "http://mac3.centr.stand.domain.dev:80" route=3:0
      ProxySet lbmethod=bymaclabel stickysession=ROUTEID
  </Proxy>

  <Proxy "balancer://project-ws/">
    RequestHeader set X-Remote-User expr=%{REMOTE_USER}

    <Limit GET POST PUT PATCH DELETE> # OPTIONS должен проходить без авторизации (для того, чтобы проходил CORS preflight)
      AuthType Kerberos
      KrbAuthRealms ALD.DOMAIN.DEV
      KrbServiceName HTTP/mac-balancer.stand.domain.dev
      Krb5Keytab /etc/apache2/keytab
      KrbMethodNegotiate on
      KrbMethodK5Passwd on
      Require valid-user
      KrbSaveCredentials on
    </Limit>

      BalancerMember "ws://mac0.stand.domain.dev:80" route=0:0
      BalancerMember "ws://mac3.stand.domain.dev:80" route=3:0

      ProxySet lbmethod=bymaclabel stickysession=ROUTEID
  </Proxy>

  ErrorLog ${APACHE_LOG_DIR}/error.log
  CustomLog ${APACHE_LOG_DIR}/access.log combined

</VirtualHost>

<VirtualHost *:9876>
  ServerAdmin webmaster@localhost
  ProxyPreserveHost On
  ProxyPassReverse "/" "balancer://modelcm/"
  ProxyPass "/" "balancer://modelcm/"
  SetEnv proxy-sendcl 1
<Proxy "balancer://modelcm/">
  RequestHeader set X-Remote-User expr=%{REMOTE_USER}

<Limit GET POST PUT PATCH DELETE> # OPTIONS должен проходить без авторизации (для того, чтобы проходил CORS preflight)
  AuthType Kerberos
  KrbAuthRealms ALD.DOMAIN.DEV
  KrbServiceName HTTP/mac-balancer.stand.domain.dev
  Krb5Keytab /etc/apache2/keytab
  KrbMethodNegotiate on
  KrbMethodK5Passwd on
  Require valid-user
  KrbSaveCredentials on
</Limit>
    BalancerMember "http://mac0.stand.domain.dev:9876" route=0:0
    BalancerMember "http://mac3.stand.domain.dev:9876" route=3:0
    ProxySet lbmethod=bymaclabel stickysession=ROUTEID
</Proxy>

  ErrorLog ${APACHE_LOG_DIR}/error.log
  CustomLog ${APACHE_LOG_DIR}/access.log combined

</VirtualHost>

Кто сталкивался, не обходите стороной, подскажите что может быть не так?
  • Вопрос задан
  • 90 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы