2009-03-20 13 views
5

ठीक से एकाधिक निर्देशिकाएं प्रदान करने दें। मैं बहुत ज्यादा अपाचे HTTPD नोब हूं इसलिए कृपया मेरे साथ बेकार है।Apache को <Location>

मुझे बड़ी मात्रा में वर्चुअलहोस्ट की सेवा करने में कोई समस्या है और मैं सोच रहा था कि चीजों को करने का एक और अधिक प्रभावी तरीका है या नहीं।

मैं वर्तमान में विभिन्न विभागों की एक बड़ी राशि परियोजनाओं की सेवा के लिए स्थान निर्देश का उपयोग कर रहा हूं, कुल मिलाकर 1 9 विभागों से 300 परियोजनाएं। प्रत्येक स्थान निर्देश के लिए संरचनाएं समान होती हैं जो निर्देशिकाओं को छोड़कर निर्देशिकाओं को छोड़ती हैं।

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

आप इन सभी संरचनाओं रास्तों के अलावा एक ही हैं देख सकते हैं: क्या मैं वर्तमान में है एक बड़ी फ़ाइल है कि कुछ इस तरह दिखता है। मैं जो कुछ चाहूंगा वह निश्चित रूप से कुछ है जहां मैं विभाग और परियोजना के नामों के लिए चर का उपयोग कर सकता हूं और केवल एक ही स्थान निर्देश बनाए रख सकता हूं। मुझे लगता है कि यह सर्वर और स्मृति पर भी कम भारी है।

किसी भी मदद की बहुत सराहना की जाती है।

उत्तर

1

मुझे विशेष रूप से ऐसा करने के किसी भी तरीके से नहीं पता, क्योंकि मुझे नहीं लगता कि 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>' 

प्रपत्र 'Departmentâ/Project1' यह मानक इनपुट पर पढ़ता है की प्रत्येक पंक्ति के लिए, यह इसी <Location> अनुभाग बाहर प्रिंट करता है।

+0

हाय। तुम्हारे द्वारा कहा गया मेरी समझ में आ रहा है। हालांकि, मुझे जो कुछ नहीं मिलता है वह यह है कि इसे कैसे एकीकृत किया जाए। क्या आपका मतलब है कि अपाचे इसे रीयल-टाइम में कॉल कर सकता है या क्या आपका मतलब है कि मुझे हर स्थान को पहले से उत्पन्न करना होगा? – Luke

+0

नहीं, अपाचे स्वचालित रूप से ऐसा नहीं कर सकता है। जब भी आप संरक्षित स्थानों के सेट को बदलना चाहते हैं तो आपको अपाचे कॉन्फ़िगरेशन को पुन: उत्पन्न करने के लिए इसे चलाने की आवश्यकता है (और फिर आपको अपाचे को पुनः लोड करने की आवश्यकता है)। मुझे नहीं लगता था कि यह ऐसी चीज नहीं थी जिसे आपको अक्सर करने की आवश्यकता होगी। –

3

क्या आपने <LocationMatch> directive को आजमाया है?

यह पथ के बजाय नियमित अभिव्यक्ति लेता है। अपने पथों और उनके संबंधित उप-विकल्पों के आधार पर, आप सैकड़ों निर्देशों को कम से कम प्रबंधित करने के लिए कम कर सकते हैं।

+0

लेकिन क्या स्थानमैच उन चर को AuthUserFile पर पास करने में सक्षम होगा? और यदि हां, तो कैसे? – Luke