5 Stimmen

Apache kann mehrere Verzeichnisse über einen einzigen <Location> bedienen

Ich habe ein Problem mit der Bedienung einer großen Anzahl von VirtualHosts und frage mich, ob es einen effizienteren Weg gibt, dies zu tun.

Ich verwende die Standortrichtlinie derzeit, um eine große Anzahl von Projekten aus verschiedenen Abteilungen zu bedienen, insgesamt über 300 Projekte aus 19 Abteilungen. Die Strukturen sind für jede Location-Direktive gleich, mit Ausnahme der Verzeichnisse, aus denen die Dateien bereitgestellt werden. Ich habe derzeit eine große Datei, die etwa so aussieht:

<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>

Wie Sie sehen können, sind alle diese Strukturen gleich, mit Ausnahme der Pfade. Was ich gerne hätte, wäre natürlich etwas, bei dem ich Variablen für die Abteilungs- und Projektnamen verwenden und nur eine einzige Standortrichtlinie beibehalten könnte. Ich gehe davon aus, dass dies auch den Server und den Speicher weniger belastet.

<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>

3voto

scientastic Punkte 171

Haben Sie schon die <LocationMatch>-Richtlinie ?

Er nimmt einen regulären Ausdruck anstelle eines Pfades. Je nach Ihren Pfaden und den damit verbundenen Unteroptionen können Sie die Hunderte von Direktiven auf eine überschaubare Handvoll reduzieren.

1voto

David Z Punkte 121773

Ich wüsste nicht, wie man das konkret machen könnte, denn ich glaube nicht, dass AuthUserFile akzeptiert ein dynamisches Argument. Am einfachsten ist es, ein kleines Skript in der Sprache Ihrer Wahl zu schreiben, das eine Vorlage für die <Location> Block und wiederholt ihn für jedes Verzeichnis, das Sie schützen wollen. Beispiel, in 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>'

Für jede Zeile der Form 'AbteilungA/Projekt1', die es über die Standardeingabe liest, gibt es die entsprechende <Location> Abschnitt.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X