Question

J'ai un problème de servir une grande quantité de VirtualHosts et je me demandais s'il y a un moyen plus efficace de faire les choses.

J'utilise actuellement la directive Lieu de servir un grand projets de quantité de différents départements, plus de 300 projets de 19 départements au total. Les structures sont les mêmes pour chaque directive Location, sauf pour les répertoires des fichiers sont servis à partir. Ce que j'ai actuellement un grand fichier qui ressemble à ceci:

<VirtualHost *> 
   ServerName www.myserver.com 

   <Location /departmentA/project1> 
      AuthType Basic 
      AuthName "By Invitation Only" 
      AuthUserFile /usr/local/departmentA/project1/passwords 
      Require valid-user 
   </Location> 

   <Location /departmentA/project2> 
      AuthType Basic 
      AuthName "By Invitation Only" 
      AuthUserFile /usr/local/departmentA/project2/passwords 
      Require valid-user 
   </Location> 

   <Location /departmentB/project1> 
      AuthType Basic 
      AuthName "By Invitation Only" 
      AuthUserFile /usr/local/departmentA/project1/passwords 
      Require valid-user 
   </Location> 
</VirtualHost>

Comme vous pouvez voir toutes ces structures sont les mêmes, sauf pour les chemins. Ce que je voudrais est bien sûr quelque chose où je peux utiliser des variables pour le département et les projets et maintenir une seule directive Location. Je suppose que cela est également moins lourd sur le serveur et la mémoire.

<VirtualHost *> 
   ServerName www.myserver.com 

   <Location /$1/$2> 
      AuthType Basic 
      AuthName "By Invitation Only" 
      AuthUserFile /usr/local/$1/$2/passwords 
      Require valid-user 
   </Location> 
</VirtualHost>
Était-ce utile?

La solution

Je ne connais aucune façon de le faire précisément, comme je ne pense pas que accepte un argument AuthUserFile dynamique. Il est peut-être plus facile d'écrire un petit script dans votre langue de choix qui prend un modèle pour le bloc et répète <Location> pour chaque répertoire que vous voulez protéger. Exemple, dans le python:

#!/usr/bin/python
import sys
print '<VirtualHost *:80>'
print '   ServerName www.myserver.com'
for path in sys.stdin:
    print '   <Location /%s>' % path.strip()
    print '      AuthType Basic'
    print '      AuthName "By Invitation Only"'
    print '      AuthUserFile /usr/local/%s/passwords' % path.strip()
    print '      Require valid-user'
    print '   </Location>'
print '</VirtualHost>'

Pour chaque ligne du formulaire « departmentA / project1 » il lit sur l'entrée standard, il imprime la section correspondante <=>.

Autres conseils

Avez-vous essayé directive ?

Il faut une expression régulière au lieu d'un chemin. En fonction de vos chemins et leurs sous-options associées, vous pourriez être en mesure de réduire les centaines de directives à une poignée plus facile à gérer d'entre eux.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top