2011-08-19 13 views
10

में अभिगम नियंत्रण के लिए PHP स्क्रिप्ट का उपयोग करने के मैं एक तरह से अपाचे में संसाधनों के उपयोग को नियंत्रित करने के लिए एक PHP स्क्रिप्ट का उपयोग करने के लिए देख रहा हूँ। मैं अभिगम नियंत्रण रखना चाहता हूं जो लक्ष्य संसाधन पर निर्भर नहीं है; यानी यह एचटीएमएल, फाइलें, अन्य स्क्रिप्ट और cgi कार्यक्रमों के लिए काम करेंगे, एक "से की अनुमति दें" बस के रूप में या निर्देश "से अस्वीकार करें" करना होगा - कस्टम तर्क का प्रयोग को छोड़कर।कैसे अपाचे

मैं कई तरीके देखा है इस का प्रबंधन करने की कोशिश करने के लिए:

  1. mod_auth_script की तरह एक अपाचे मॉड्यूल का उपयोग करें (ठीक है, लेकिन इस मॉड्यूल पुराना है और मुझे लगता है अच्छी तरह से स्केल नहीं करता है)
  2. उपयोग FastCGI निर्देश FastCgiAccessChecker
  3. सबसे पोर्टेबल php आह्वान और जो कुछ भी मैं
इन # 2 के

सबसे होनहार देखा की जरूरत है ऐसा करने के लिए अपने ही अपाचे मॉड्यूल बनाएँ, और भी FastCG की लोकप्रियता को देखते हुए मैं। तो, मैंने सामान्य लिनक्स PHP मॉड्यूल को स्वैप करने में कामयाब रहा और php को इसके बजाय fastcgi के माध्यम से काम करने में कामयाब रहा। यह विंडोज पर की तुलना में कठिन था लेकिन यह एक बाहरी सर्वर के रूप में अंत में काम करने के लिए, अपाचे निर्देश

FastCGIExternalServer /var/www/html/thing -host 192.168.0.11:9000

का उपयोग कर और php डेमॉन

php-cgi -q -b 192.168.0.11:9000 &

शुरू करने यानी मिला मुसीबत खोजने की कोशिश में आया FastCgiAccessChecker का उपयोग कर एक PHP स्क्रिप्ट का आह्वान करने का एक तरीका।

मैंने स्क्रिप्ट नाम में पास करने का प्रयास करने के विभिन्न तरीकों का प्रयास किया है, जिसे मैं फास्टसीजीआईएक्सवर्टर सर्वर और/या फास्टसीजीएक्स चेकर निर्देशों में फ़ाइल नाम बदलकर चलाने के लिए प्रयास करना चाहता हूं - काम नहीं करता है। मैं भी एक स्क्रिप्ट विनिर्देशक साथ php-cgi शुरू करने की कोशिश की है अर्थात

php-cgi -q -b 192.168.0.11:9000 -f /var/www/html/thing/access.php &

कुछ भी नहीं काम करता है। मैं बता सकता हूँ अपाचे तरह मेरी निर्देशों, पहचानता है, क्योंकि जब मैंने FastCgiAccessChecker शामिल तो पाठ/सादे करने के लिए एक php पृष्ठ, सामग्री प्रकार परिवर्तन पर जाएँ और मैं पृष्ठ से सामग्री की पहली ~ 8000 बाइट्स में सेवा की खो देते हैं तो यह एक स्क्रिप्ट है (कोई विचार क्यों)। लेकिन यह उस PHP स्क्रिप्ट को कॉल नहीं करता जिसे मैं चलाने के लिए चाहता हूं।

जहां तक ​​मेरा लगा सकते हैं, क्या हो रहा है FastCgiAccessChecker मानता है कि कि निर्दिष्ट FastCGI सर्वर विशेष रूप से एक पहुँच चेकर के रूप में कार्य करने के लिए संकलित किया गया है है। फास्टसी सर्वर (मेरे मामले में PHP) को एक्सेस चेक करने के लिए कौन सी स्क्रिप्ट चलाने के लिए कोई तरीका नहीं है।

मैं वेब खोज की है और जहाँ तक मैं कोई भी बता सकता है पहले कभी इस बात के लिए एक PHP स्क्रिप्ट का उपयोग करने की कोशिश की है, या कोई भी इसके बारे में लिखा है।

तो मेरे सवाल: मैं क्या कर किया जाना चाहिए? मैं कुछ संभावनाएं देख सकते हैं:

1) मैं कुछ याद आ रही है, और वहाँ FastCgiAccessChecker मैं क्या चाहते हो बनाने के लिए कुछ जादू तरीका है: अपाचे अभिगम नियंत्रण को नियंत्रित करने के

2 एक PHP स्क्रिप्ट चलाने) मैं लिखने सी में अपने स्वयं के फास्टसीजीआई सर्वर और PHP को एम्बेड करें, इसलिए मैं उस PHP स्क्रिप्ट को निर्दिष्ट कर सकता हूं जिसे मैं चलाने के लिए चाहता हूं (मैंने इसमें कुछ मिनट बिताए हैं; यह जटिल और डरावना दिखता है, और मैंने 1 99 5 से सी में काम नहीं किया है)

3) मैं फास्टसीजीआई पर छोड़ देता हूं और एक्सेस को नियंत्रित करने के लिए सीधे अपनी PHP स्क्रिप्ट को कॉल करने के लिए एक अपाचे मॉड्यूल लिखता हूं। (यह भी जटिल लग रहा है; और इस तकनीक को PHP को निष्पादित करने के लिए प्रत्येक अनुरोध के लिए एक नई प्रक्रिया की आवश्यकता होगी।)

क्या किसी के पास कोई सलाह है, या तो फास्टसीजीआई को जो करना है, उसे करने के लिए, या (उचित रूप से) फास्टसीजीआई के लिए आसान विकल्प?

धन्यवाद भी चीज के लिए आप कर सकते हैं सुझाव

उत्तर

8

स्थितियों के इन प्रकार के लिए मेरे दृष्टिकोण mod_rewrite के साथ संयोजन में mod_xsendfile उपयोग करने के लिए है स्थापित करें। ये क्या आप एक पहले करना चाहते हैं प्रकट नहीं हो सकता, लेकिन अगर आप:

  1. उपयोग mod_rewrite नियम एक सामने नियंत्रक (एक भी PHP स्क्रिप्ट है कि आने वाले सभी अनुरोधों को प्रबंधित) बनाने के लिए।
  2. निर्धारित करें कि $ _SERVER (शायद $ _SERVER ['PATH_INFO'] की सामग्री को देखकर किस फ़ाइल का अनुरोध किया जा रहा है)।
  3. यहां अपना एक्सेस कंट्रोल/सुरक्षा परत डालें।
  4. सुरक्षा पास होने पर फ़ाइल की सामग्री भेजने के लिए mod_xsendfile का उपयोग करें।

आप इस तरह से आवश्यक सुरक्षा प्रणाली को अनिवार्य रूप से कार्यान्वित कर सकते हैं।

mod_xsendfile अनिवार्य रूप से बस उसी फ़ाइल को भेजता है जैसे अपाचे, फ़ाइल को सीधे एक्सेस किया गया था। यह स्थिर है और मैं जिस स्थिति में फेंक चुका हूं उसमें बहुत अच्छा काम करता है। इसे सेटअप के भारी बोझ के बिना 'बस काम' करना चाहिए, जो आप थोड़ा सा संघर्ष कर रहे हैं।

+0

मुझे वह समाधान पसंद है! – Achronos

0

आप शायद shell_exec() और system() में देखना चाहते हैं। ये आपको linux shell cmds को तब तक निष्पादित करने देगा जब तक कि आपने इसे अपने सीएफजी में सक्षम नहीं किया है। इसके अलावा, फास्टसीजीआई के लिए मैं आपको php5-fpm इंस्टॉल करने की सलाह देता हूं। सुंदर करना आसान # apt-get PHP5-एफ पी एम

+0

हैलो तीमुथियुस, आपकी प्रतिक्रिया के लिए धन्यवाद। मुझे क्या चाहिए कि अपाचे को एक PHP स्क्रिप्ट का उपयोग करने का तरीका यह तय करने का एक तरीका है कि किसी पृष्ठ तक पहुंच की अनुमति है या नहीं। फास्टसीजीआई वास्तव में मेरे लिए ठीक काम कर रहा है, यह सिर्फ PHP के लिए काम करने के लिए 'FastCGIAccessChecker' निर्देश' प्राप्त करने के लिए कोई रास्ता नहीं है। – Achronos

0

मैं वर्तमान में एक ही समस्या पर काम कर रहा हूं - मेरी स्थिति में मुझे PHP में (प्रमाणीकृत) दूरस्थ उपयोगकर्ता सेट करने की आवश्यकता है। बस रखें, आप अपनी PHP स्क्रिप्ट से सत्र कुकी और प्रमाणित उपयोगकर्ता नाम को memcache (एक बहुत स्केलेबल सिस्टम के लिए couchdb संस्करण पर देखें) को दबाएं, फिर मोड उपयोगकर्ता को अपाचे में सेट करता है और मानक अपाचे acces का उपयोग कर जानकारी लागू कर सकता है नियंत्रण नियम

यह अतिरिक्त प्रक्रियाओं को शुरू करने के ओवरहेड से बचाता है/PHP कोड में सभी पहुंच लपेटता है।

Populating remote user in apache log files from PHP session

के प्रश्न और उत्तर देखें
1

प्रतिक्रिया के लिए धन्यवाद! मुझे इज़ेट्रॉन की तकनीक पसंद है, जिसे किसी भी अपाचे के साथ काम करना चाहिए जिसमें कोई कस्टम टूल्स आवश्यक नहीं है।

ऐसा होता है मैं अपने # 3 विकल्प के साथ जा रहा समाप्त हो गया इससे पहले कि मैं किसी भी जवाब को पढ़ें:

मैं काम करने के लिए एक अपाचे मॉड्यूल लिखा था। यह उप-अनुरोध का उपयोग करके, किसी भी दस्तावेज़ अपाचे पर पहुंच नियंत्रण को दूर करता है - इसलिए यह किसी भी स्क्रिप्ट भाषा या सीजीआई प्रोग्राम के लिए काम करता है। Php_module या fastcgi का उपयोग कर एक सामान्य PHP कॉन्फ़िगरेशन के लिए, यह स्केल काफी अच्छी तरह से है क्योंकि कोई अतिरिक्त प्रक्रिया की आवश्यकता नहीं है।

यह पता चला है कि अपाचे का मॉड्यूल एपीआई उपयोग करने में बहुत मुश्किल नहीं है, और मुझे लगता है कि सी बाइक की सवारी करने की तरह है - आप कभी भी वास्तव में कैसे भूल जाते हैं।