LAMP स्टैक (लिनक्स, Apache, MySQL, PHP) कैसे इंस्टॉल करें पर लगभग हर ट्यूटोरियल यह सिफारिश करेगा कि आप PHP स्क्रिप्ट को प्रोसेस करने के लिए बिल्ट-इन Apache मॉड्यूल का उपयोग करें। उदाहरण के लिए, उबंटू में आप sudo apt install libapache2-mod-php जैसी कमांड का उपयोग करके एक पैकेज इंस्टॉल करके इसे सक्षम करेंगे। यह बदले में Apache को mpm_prefork का उपयोग करने के लिए मजबूर करेगा। हर बार जब कोई विज़िटर आपकी वेबसाइट एक्सेस करता है, तो उस कनेक्शन को संभालने के लिए एक नई प्रक्रिया शुरू की जाएगी। यह तब अच्छा काम करता है जब ट्रैफिक कम होता है।
लेकिन, यह एक बड़ा मुद्दा बन जाता है यदि आपको अचानक ट्रैफिक का फटना मिलता है। उदाहरण के लिए, एक Reddit पोस्ट में आपकी वेबसाइट शामिल हो सकती है, और यदि पोस्ट लोकप्रिय हो जाता है, तो आपको कुछ ही मिनटों में हजारों विज़िटर मिल सकते हैं।
बेस्ट केस परिदृश्य में, यदि Apache ट्रैफिक फटने को संभालने में सक्षम है, तो कुछ बदकिस्मत विज़िटर्स को शायद तीस से साठ सेकंड इंतजार करना पड़ सकता है जब तक पेज लोड नहीं हो जाता, जो आज की दुनिया में बेतुका है। सबसे खराब स्थिति में, सर्वर बुरी तरह से लैग करना शुरू कर देगा, और संसाधनों की कमी के कारण कुछ कनेक्शन बस ड्रॉप हो जाएंगे। इस मामले में विज़िटर्स को उनके ब्राउज़र में एक त्रुटि दिखाई देगी।
किसी भी तरह से यह एक अच्छा परिदृश्य नहीं है, क्योंकि आपने संभावित रूप से सैकड़ों या हजारों इच्छुक पाठकों, ग्राहकों या प्रशंसकों का ध्यान खो दिया।
दुर्भाग्य से, PHP किसी भी तरह से एक बहुत बड़ा संसाधन हॉग है। लेकिन, mpm_event के साथ, Apache अचानक ट्रैफिक फटने को बहुत अधिक कुशल तरीके से संभाल सकता है। हालांकि, यह अनुशंसा की जाती है कि आपके सर्वर में कम से कम 2GB RAM और 2 CPU कोर हों, वास्तविक या वर्चुअल, और यदि आप तीव्र ट्रैफिक स्पाइक्स की उम्मीद करते हैं, जैसे प्रति सेकंड दस से अधिक विज़िटर, तो और भी अधिक। यदि आप वर्चुअल प्राइवेट सर्वर का उपयोग कर रहे हैं, तो अपनी स्थिति में अधिक वर्चुअल CPU कोर और SSD स्टोरेज जोड़ें। RAM द्वितीयक है।
डेबियन-आधारित डिस्ट्रीब्यूशन पर Apache MPM Event और PHP-FPM का उपयोग कैसे करें
डेबियन, उबंटू या इस परिवार के अन्य डिस्ट्रो पर बस "libapache2-mod-php" पैकेज इंस्टॉल करने से बचें। जब आप Apache इंस्टॉल करते हैं तो यह डिफ़ॉल्ट रूप से MPM इवेंट का उपयोग करता है। लेकिन उल्लिखित पैकेज इंस्टॉल करने पर, एक स्क्रिप्ट MPM इवेंट को अक्षम कर देती है और MPM प्रीफोर्क को सक्षम कर देती है। Apache PHP मॉड्यूल केवल (सुरक्षित रूप से) mpm_prefork के साथ काम कर सकता है। बेशक, "libapache2-mod-php" के बिना, आपके पास PHP फ़ाइलों के लिए कोई प्रोसेसर नहीं है। इसलिए आप Apache में शामिल PHP मॉड्यूल के बजाय PHP-FPM का उपयोग करेंगे। यहां बताया गया है कि आप एक नए सर्वर पर LAMP स्टैक कैसे इंस्टॉल करेंगे। आप चरणों को अपने वेब एप्लिकेशन की आवश्यकताओं के अनुसार अनुकूलित कर सकते हैं।
सबसे पहले, रूट के रूप में लॉग इन करें। फिर, Apache इंस्टॉल करें।
apt update && apt install apache2
इस बिंदु पर आप देख सकते हैं कि Apache वास्तव में डिफ़ॉल्ट रूप से MPM इवेंट सक्षम के साथ शिप करता है।
apachectl -V
PHP-FPM इंस्टॉल करें।
apt install php-fpm
आपको Apache में PHP प्रोसेसर को सक्षम करने के निर्देश दिखाई देंगे।
FastCGI प्रोटोकॉल सक्षम करें।
a2enmod proxy_fcgi
Apache के लिए PHP-FPM डिफ़ॉल्ट कॉन्फ़िगरेशन सक्षम करें।
a2enconf php7.0-fpm
नोट: डेबियन/उबंटू के भविष्य के संस्करणों में, यह कमांड कुछ और में बदल सकती है, जैसे a2enconf php7.6-fpm, क्योंकि PHP-FPM एक अलग संस्करण होगा।
Apache रीस्टार्ट करें।
systemctl restart apache2
अपने PHP एप्लिकेशन के लिए अपनी बाकी आवश्यकताएं इंस्टॉल करें। यहां एक उदाहरण है:
apt install mariadb-server php-mysql
यह एक डेटाबेस सर्वर और PHP MySQL मॉड्यूल इंस्टॉल करेगा ताकि आपका PHP एप्लिकेशन डेटाबेस से कनेक्ट हो सके।
RedHat-आधारित डिस्ट्रीब्यूशन पर Apache MPM Event और PHP-FPM का उपयोग कैसे करें
दूसरा लोकप्रिय सर्वर डिस्ट्रीब्यूशन विकल्प RedHat, या CentOS है। उसी तरह जैसे ऊपर, Apache का एक साफ इंस्टॉल जिसमें MPM इवेंट सक्षम हो और PHP-FPM की पेशकश की जाएगी।
रूट के रूप में लॉग इन करें और Apache इंस्टॉल करें।
yum install httpd
डेबियन-आधारित डिस्ट्रो के विपरीत, यहां आप देखेंगे कि Apache डिफ़ॉल्ट रूप से MPM प्रीफोर्क का उपयोग करता है, कम से कम लेखन के समय उपलब्ध नवीनतम CentOS 7 पर।
apachectl -V
MPM इवेंट सक्षम करने के लिए, आपको एक कॉन्फ़िगरेशन फ़ाइल संपादित करनी होगी।
sed -i '/mpm_prefork\.so$/s/^/#/' /etc/httpd/conf.modules.d/00-mpm.conf
यह लाइन LoadModule mpm_prefork_module modules/mod_mpm_prefork.so को निष्क्रिय करने के लिए एक # साइन जोड़ देगा।
अब अगली कमांड से पहले # साइन को हटाकर लाइन #LoadModule mpm_event_module modules/mod_mpm_event.so को अनकमेंट (सक्रिय) करें।
sed -i '/mpm_event\.so$/s/^#//' /etc/httpd/conf.modules.d/00-mpm.conf
Apache शुरू करें और इसे बूट पर ऑटोस्टार्ट करने के लिए सक्षम करें।
systemctl start httpd.service systemctl enable httpd.service
जांचें कि क्या Apache अब MPM इवेंट का उपयोग करता है।
apachectl -V
PHP-FPM और FastCGI मॉड्यूल इंस्टॉल करें।
yum install php-fpm mod_fcgid
"/etc/httpd/conf.d/php.conf" बनाएं ताकि Apache को निर्देश दिया जा सके कि PHP फ़ाइलों को कैसे प्रोसेस करना है। नीचे दी गई ALL सामग्री को कॉपी करें, और इसे एक बार में टर्मिनल में पेस्ट करें, फिर ENTER दबाएं।
cat </etc/httpd/conf.d/php.conf # Redirect to local php-fpm if mod_php is not available PASTE # Enable http authorization headers SetEnvIfNoCase ^Authorization$ "(.+)" HTTP_AUTHORIZATION=$1 #SetHandler "proxy:unix:/run/php/php7.0-fpm.sock|fcgi://localhost" SetHandler "proxy:fcgi://127.0.0.1:9000" # Deny access to raw php sources by default # To re-enable it's recommended to enable access to the files # only in specific virtual host or directory Require all denied # Deny access to files without filename (e.g. '.php')Require all denied
इस शानदार कॉन्फ़िगरेशन का श्रेय डेबियन को जाता है। अन्य स्रोत एक साधारण कॉन्फ़िगरेशन फ़ाइल की सिफारिश करते हैं जैसे:
SetHandler "proxy:fcgi://127.0.0.1:9000"
लेकिन यह कुछ हमलों के प्रति संवेदनशील है, और यदि कुछ सेवाएं विफल होती हैं, तो आप PHP फ़ाइलों को सार्वजनिक रूप से उजागर कर सकते हैं, बदले में संभावित रूप से संग्रहीत पासवर्ड, कोड और संवेदनशील डेटा को उजागर कर सकते हैं।
Apache रीस्टार्ट करें।
systemctl restart httpd.service
PHP-FPM शुरू करें और बूट पर इसके ऑटोस्टार्ट को सक्षम करें।
systemctl start php-fpm.service systemctl enable php-fpm.service
निष्कर्ष
अब आपके पास एक Apache सर्वर है जो ट्रैफिक के साथ बेहतर स्केल करता है। हालांकि, याद रखें कि आप डिफ़ॉल्ट सेटिंग्स का उपयोग कर रहे हैं, जैसा कि ज्यादातर लोगों के लिए "सबसे अच्छा" है। यदि आप वास्तव में अपने HTTP सर्वर से अधिकतम लाभ प्राप्त करना चाहते हैं, तो आपको उन विभिन्न चरों के बारे में पढ़ना होगा जिन्हें आप ट्यून कर सकते हैं। इनके लिए सही मान आपके सर्वर के संसाधनों, अपेक्षित ट्रैफिक और PHP एप्लिकेशन पर अत्यधिक निर्भर हैं।