دعونا أباتشي خدمة الدلائل متعددة من خلال واحد <الموقع>

StackOverflow https://stackoverflow.com/questions/668150

  •  21-08-2019
  •  | 
  •  

سؤال

ولدي مشكلة مع خدمة كمية كبيرة من VirtualHosts وأنا أتساءل عما اذا كان هناك طريقة أكثر كفاءة للقيام بهذه الأمور.

وأنا حاليا باستخدام التوجيه الموقع لخدمة المشاريع كمية كبيرة من مختلف الإدارات، أكثر من 300 مشروع من 19 دوائر في المجموع. الهياكل هي نفسها في كل مكان التوجيه باستثناء الدلائل يتم تقديم الملفات من. ما لدي حاليا هو ملف كبير ويبدو أن شيئا من هذا القبيل:

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

وكما ترون كل هذه الهياكل هي نفسها باستثناء المسارات. ما أود بالطبع شيء أين يمكنني استخدام المتغيرات لإدارة المشروع وأسماء ومجرد الحفاظ على التوجيه المكان واحد. وأفترض أن هذا هو أيضا أقل الثقيلة على الخادم والذاكرة.

<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>
هل كانت مفيدة؟

المحلول

وأنا لا أعرف أي طريقة للقيام بذلك على وجه التحديد، وأنا لا أعتقد AuthUserFile يقبل حجة الديناميكية. قد يكون من الأسهل لكتابة السيناريو قليلا في اللغة التي تريدها أن يأخذ القالب لكتلة <Location> ويكرر ذلك لكل دليل تريد حمايتها. على سبيل المثال، في بيثون:

#!/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>'

لكل سطر من النموذج 'departmentA / PROJECT1 "يقرأ على الإدخال القياسي، فإنه يطبع خارج القسم <Location> المقابل.

نصائح أخرى

هل حاول التوجيه <؟ / P>

ويستغرق تعبير عادي بدلا من مسار. اعتمادا على المسارات الخاصة بك والمرتبطة بها خيارات فرعية، قد تكون قادرة على الحد من مئات من التوجيهات وصولا الى حفنة أكثر قابلية للإدارة منها.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top