2017-06-19 1 views
0

J'ai un équilibreur de charge dans Apache avec actuellement seulement deux membres. Je veux que les URL commençant par "admin" soient mappées à une instance spécifique (http://localhost:16666/) car le site admin a besoin d'accéder aux fichiers du CDN qui se trouve également sur cette machine. Je pourrais gérer ceci en montant ce dossier sur l'autre serveur, ou en implémentant un service séparé faisant cela, mais c'est la dernière chose que je veux maintenant. J'étais sur le point de créer une nouvelle règle de proxypass pour les associer à ce membre plutôt qu'à l'équilibreur, mais cela l'ignore tout simplement.Forcer le modèle d'URL à un membre de l'équilibreur spécifique dans Apache

La partie importante de ma config vhost:

  <Location /balancer-manager> 
       SetHandler balancer-manager 
      </Location> 

      <Proxy balancer://videoportal> 
        BalancerMember http://localhost:16666 
        BalancerMember http://example.com:16666 
        Require all granted 
        ProxySet lbmethod=byrequests 
      </Proxy> 

      <Proxy *> 
        Order deny,allow 
        Allow from all 
      </Proxy> 

      ErrorLog /var/log/apache2/videoportal-error.log 

      ProxyPass /balancer-manager ! 
      ProxyPass "/admin" "http://localhost:16666/admin" 
      ProxyPassReverse "/admin" "http://localhost:16666/admin" 

      ProxyPass/balancer://videoportal/ 
      ProxyPassReverse/balancer://videoportal/ 
      ProxyRequests Off 

Tout conseil ce que je fais mal?

Répondre

0

D'abord, vous mixez apache 2.2 et 2.4 apache config

Dans apache 2.2 Utilisation

Order deny,allow 
Allow from all 

// Votre config apache //

<Proxy *> 
       Order deny,allow 
       Allow from all 
</Proxy> 

En apache 2.4

Require all granted 

// Votre config apache //

<Proxy balancer://videoportal> 
    ... 
    Require all granted 
    ProxySet lbmethod=byrequests 
</Proxy> 

Deuxième essai mettre le/admin avant la définition de équilibreur

... 
    SetHandler balancer-manager 
</Location> 

ProxyPass "/admin" "http://localhost:16666/admin" 
ProxyPassReverse "/admin" "http://localhost:16666/admin" 

<Proxy balancer://videoportal> 
     BalancerMember http://localhost:16666 
     ... 
+0

Merci, vous avez raison au sujet des règles de mélange de l'ordre/require. – Tacsiazuma

0

j'ai compris quel était le problème.

Je créé une règle d'emplacement pour cela et a ajouté un en-tête pour suivre si elle fonctionne:

 <Location /balancer-manager> 
      SetHandler balancer-manager 
     </Location> 

     <Proxy balancer://videoportal> 
       BalancerMember http://localhost:16666 
       BalancerMember http://example.com:16666 
       Require all granted 
       ProxySet lbmethod=byrequests 
     </Proxy> 

     <Proxy *> 
       Require all granted 
     </Proxy> 

     ErrorLog /var/log/apache2/videoportal-error.log 

     ProxyPass /balancer-manager ! 

     # This is the new part 
     <Location "/admin"> 
      ProxyPass "http://localhost:16666/admin" 
      ProxyPassReverse "http://localhost:16666/admin" 
      Header set ADMIN "true" 
     </Location> 

     # end of new part 

     ProxyPass/balancer://videoportal/ 
     ProxyPassReverse/balancer://videoportal/ 
     ProxyRequests Off