के अनुसार नेटक्राफ्ट की एक हालिया रिपोर्ट (एक प्रसिद्ध इंटरनेट कंपनी जो अन्य सेवाओं के बीच वेब ब्राउज़र उपयोग के आँकड़े प्रदान करती है), अमरीका की एक मूल जनजाति साइटों और इंटरनेट का सामना करने वाले कंप्यूटरों के बीच सबसे व्यापक रूप से उपयोग किया जाने वाला वेब सर्वर बना हुआ है।
इसके अतिरिक्त, अमरीका की एक मूल जनजाति शीर्ष वेब सर्वरों में सबसे बड़ी वृद्धि का अनुभव करता रहता है, उसके बाद nginx तथा आईआईएस. इस प्रकार, यदि आप अपाचे संस्थापनों के प्रबंधन के प्रभारी एक सिस्टम प्रशासक हैं, तो आपको यह जानने की जरूरत है कि कैसे यह सुनिश्चित करने के लिए कि आपका वेब सर्वर आपके (या आप ग्राहक के) अनुसार अपनी क्षमता के अनुसार सर्वश्रेष्ठ प्रदर्शन करता है जरूरत है।
इस लेख में हम कुछ युक्तियों पर चर्चा करेंगे जो आपको यह सुनिश्चित करने में मदद करेंगी कि अपाचे सुचारू रूप से चलेगा और दूरस्थ ग्राहकों से आपके द्वारा अपेक्षित अनुरोधों की संख्या को संभालने में सक्षम होगा।
हालाँकि, कृपया ध्यान रखें कि अपाचे को बेंचमार्क रिकॉर्ड स्थापित करने के उद्देश्य से नहीं बनाया गया था - लेकिन, फिर भी, यह अभी भी लगभग किसी भी उपयोग के मामले में उच्च प्रदर्शन प्रदान करने में सक्षम है जिसे आप संभवतः सोच सकते हैं का।
यह बिना कहे चला जाता है कि अपाचे का नवीनतम संस्करण स्थापित करना संभवत: पहली चीजों में से एक है जिस पर आपको विचार करने की आवश्यकता है। 19 नवंबर, 2015 तक, अपाचे का नवीनतम संस्करण में उपलब्ध है सेंटोस 7 भंडार है 2.4.6, जबकि में डेबियन का है 2.4.10.
हालांकि, हाल ही में एक सुधार या एक बग फिक्स हो सकता है जिसे एक नए जारी स्थिर संस्करण में जोड़ा गया है, जिसे बाद में स्रोत से डाउनलोड और इंस्टॉल करने के लिए उपलब्ध कराया गया है। संकलन और स्थापना निर्देश भी प्रदान किए गए हैं यहां - बस याद रखें कि यदि आप इस अद्यतन पद्धति को चुनते हैं, तो आप एहतियात के तौर पर अपनी वर्तमान कॉन्फ़िगरेशन फ़ाइलों / साइटों / वर्चुअल होस्ट का बैकअप लेना चाह सकते हैं।
किसी भी घटना में, आप अपने वर्तमान में स्थापित संस्करण को निम्नानुसार देख सकते हैं:
# httpd -v [RedHat/CentOS आधारित सिस्टम पर] # apache2 –v [डेबियन/उबंटू आधारित सिस्टम पर]
अंगूठे के एक नियम के रूप में, अपने चुने हुए वितरण के पैकेज प्रबंधक द्वारा प्रदान की गई अद्यतन विधि से चिपके रहें (यम अद्यतन httpd
या एप्टीट्यूड सेफ-अपग्रेड apache2
, CentOS या डेबियन के लिए, क्रमशः) जब तक कि कोई अन्य तरीका न हो। आप नवीनतम रिलीज़ नोट्स को में पढ़ सकते हैं अपाचे दस्तावेज़ीकरण अनुभाग Apache HTTP सर्वर प्रोजेक्ट वेबसाइट में।
क्यों? कर्नेल संस्करण 2.4 और ऊपर सेंडफाइल कर्नेल सिस्टम कॉल डिफ़ॉल्ट रूप से सक्षम है। बदले में, उच्च प्रदर्शन नेटवर्क फ़ाइल स्थानांतरण की सुविधा प्रदान करता है (जो वेब सर्वर-क्लाइंट के संदर्भ में वांछित हैं संचार) और अपाचे को एक साथ पढ़ने और प्रदर्शन करके स्थिर सामग्री को तेजी से और कम CPU उपयोग के साथ वितरित करने में सक्षम बनाता है संचालन भेजें।
आप अपने वर्तमान में स्थापित कर्नेल को इसके साथ देख सकते हैं:
#अनाम-आर.
और इसकी तुलना www.kernel.org (इस लेखन के समय 4.3) में नवीनतम स्थिर कर्नेल से करें।
हालांकि यह एक प्रक्रिया है जो शुरुआती लोगों के लिए अभिप्रेत नहीं है, लिनक्स के आंतरिक के बारे में अधिक जानने के लिए अपने कर्नेल को अपग्रेड करना एक दिलचस्प अभ्यास है।
व्यवहार में, एमपीएम नेटवर्क से जुड़ने के लिए वेब सर्वर को कॉन्फ़िगर करने का तरीका तय करने की अनुमति देकर अपाचे की मॉड्यूलर कार्यक्षमता का विस्तार करें मशीन पर पोर्ट, क्लाइंट से अनुरोध स्वीकार करते हैं, और ऐसे को संभालने के लिए बच्चों की प्रक्रियाओं (और थ्रेड्स, वैकल्पिक रूप से) का उपयोग करते हैं अनुरोध।
संस्करण २.४ से शुरू होकर, अपाचे आपकी आवश्यकताओं के आधार पर चुनने के लिए तीन अलग-अलग एमपीएम प्रदान करता है:
प्रीफोर्क
एमपीएम थ्रेडिंग के बिना कई बाल प्रक्रियाओं का उपयोग करता है। प्रत्येक प्रक्रिया प्रत्येक के लिए अलग थ्रेड बनाए बिना एक समय में एक कनेक्शन को संभालती है। बहुत अधिक विवरण में जाने के बिना, हम कह सकते हैं कि आप इस एमपीएम का उपयोग केवल डिबगिंग करते समय करना चाहेंगे एक एप्लिकेशन जो उपयोग करता है, या यदि आपके एप्लिकेशन को गैर-थ्रेड-सुरक्षित मॉड्यूल से निपटने की आवश्यकता है, जैसे mod_php.मज़दूर
MPM प्रति चाइल्ड प्रोसेस में कई थ्रेड्स का उपयोग करता है, जहाँ प्रत्येक थ्रेड एक समय में एक कनेक्शन को हैंडल करता है। यह उच्च-ट्रैफ़िक सर्वरों के लिए एक अच्छा विकल्प है क्योंकि यह पिछले मामले की तुलना में कम रैम के साथ अधिक समवर्ती कनेक्शन को संभालने की अनुमति देता है।प्रतिस्पर्धा
MPM 2.4 और इसके बाद के संस्करण के लिए अधिकांश Apache स्थापनाओं में डिफ़ॉल्ट MPM है। यह कार्यकर्ता एमपीएम के समान है जिसमें यह प्रति बच्चे की प्रक्रिया में कई धागे भी बनाता है लेकिन एक लाभ के साथ: इसका कारण बनता है जिंदा रहो या बेकार कनेक्शन (जबकि वे उस स्थिति में रहते हैं) को एक ही धागे द्वारा नियंत्रित किया जाता है, इस प्रकार स्मृति को मुक्त किया जा सकता है जिसे अन्य धागे को आवंटित किया जा सकता है। यह एमपीएम गैर-थ्रेड-सुरक्षित मॉड्यूल जैसे उपयोग के लिए उपयुक्त नहीं है mod_php, जिसके लिए एक प्रतिस्थापन जैसे a पीएचपी-एफ पी एम बजाय इस्तेमाल किया जाना चाहिए।जाँच करने के लिए एम पी एम आपके अपाचे इंस्टॉलेशन द्वारा उपयोग किया जाता है, आप यह कर सकते हैं:
# एचटीपीडी-वी.
नीचे दी गई छवि दिखाती है कि यह विशेष वेब सर्वर इसका उपयोग कर रहा है प्रीफोर्क एमपीएम.
इसे बदलने के लिए, आपको संपादित करना होगा:
# /etc/httpd/conf.modules.d/00-mpm.conf [RedHat/CentOS आधारित सिस्टम पर] # /etc/apache2/mods-उपलब्ध/.लोड [डेबियन/उबंटू आधारित सिस्टम पर]
कहाँ पे
और वांछित मॉड्यूल को लोड करने वाली रेखा को असम्बद्ध करें:
LoadModule mpm_event_module मॉड्यूल/mod_mpm_event.so.
ध्यान दें: इवेंट एमपीएम को डेबियन में काम करने के लिए, आपको इंस्टॉल करना पड़ सकता है libapache2-mod-fastcgi गैर-मुक्त रिपॉजिटरी से पैकेज।
इसके अतिरिक्त, CentOS के लिए आपको आवश्यकता होगी php-एफ पी एम (साथ एफसीजीआई तथा mod_fcgid) जबकि डेबियन में इसे कहा जाता है PHP5-एफ पी एम (साथ apache2-mpm-ईवेंट).
अंतिम, लेकिन कम से कम, वेब सर्वर और नए स्थापित को पुनरारंभ करें php-एफ पी एम (या PHP5-एफ पी एम) सर्विस:
# systemctl पुनरारंभ httpd php-fpm && systemctl httpd php-fpm सक्षम करें।
# systemctl पुनरारंभ apache2 php5-fpm && systemctl apache2 php5-fpm सक्षम करें।
यद्यपि आप एक विशिष्ट एमपीएम का उपयोग करने के लिए अपाचे को सेट कर सकते हैं, उस कॉन्फ़िगरेशन को a. पर ओवरराइड किया जा सकता है प्रति-आभासी होस्ट जैसा कि पहले बताया गया है, उसी आधार पर।
बस प्रत्येक वर्चुअल होस्ट के लिए संबंधित टैग को कॉन्फ़िगरेशन फ़ाइल में छोड़ दें और आप जाने के लिए तैयार हैं - लेकिन सुनिश्चित करें कि आप प्रति vhost एक और केवल एक MPM का उपयोग कर रहे हैं।
अंत में, कृपया ध्यान दें कि आपके चुने हुए वितरण की परवाह किए बिना, php-एफ पी एम के कार्यान्वयन पर निर्भर करता है फास्टसीजीआई, यही कारण है कि मैंने पहले अतिरिक्त पैकेज संस्थापन की सिफारिश की थी।
अधिक विवरण और उदाहरणों के लिए php-एफ पी एम और यह कैसे घटना के साथ-साथ एमपीएम अपाचे के प्रदर्शन को बढ़ा सकता है, आपको इसका उल्लेख करना चाहिए आधिकारिक दस्तावेज.
पिछली छवि में दिखाए गए उसी बॉक्स में प्रीफ़ॉर्क से ईवेंट में डिफ़ॉल्ट एमपीएम को बदलने के बाद मैं यही देखता हूं:
में सेंटोस 7, आपको यह सुनिश्चित करना होगा कि एचटीटीपी तथा HTTPS के सेवाओं को फ़ायरवॉल के माध्यम से सक्षम किया गया है, और यह कि नेटवर्क इंटरफ़ेस (ओं) को डिफ़ॉल्ट ज़ोन में ठीक से जोड़ा गया है।
उदाहरण के लिए:
# फ़ायरवॉल-cmd --zone=आंतरिक --add-इंटरफ़ेस=tun6to4 # फ़ायरवॉल-cmd --zone=आंतरिक --add-इंटरफ़ेस=tun6to4 --स्थायी # फ़ायरवॉल-cmd --सेट-डिफ़ॉल्ट-ज़ोन=आंतरिक # फ़ायरवॉल-cmd --add-service=http # फ़ायरवॉल-cmd --add-service=https # फ़ायरवॉल-cmd --add-service=http --permanent # फ़ायरवॉल-cmd --add-service=https --स्थायी # फ़ायरवॉल-cmd --पुनः लोड करें।
मैं इसे क्यों ला रहा हूं इसका कारण यह है कि मुझे हाल ही में एक समस्या का सामना करना पड़ा जहां डिफ़ॉल्ट फायरवॉल विन्यास क्लाउड VPS में सेटिंग्स को रोका गया php-एफ पी एम और php फ़ाइलों को संसाधित करने से अपाचे।
एक बुनियादी परीक्षण के रूप में (मुझे यकीन है कि आप अधिक जटिल या तनावपूर्ण लोगों के बारे में सोच सकते हैं), मैं एक PHP फ़ाइल बनाउंगा जो नामित किसी अन्य फ़ाइल के अस्तित्व की जांच करता है परीक्षण.php
दो CentOS 7 सर्वरों की एक ही निर्देशिका में समान हार्डवेयर विशेषताओं और लोड के साथ लेकिन विभिन्न MPM के साथ। उनमें से एक ईवेंट का उपयोग करेगा और दूसरा प्रीफ़ॉर्क का उपयोग करेगा:
यह PHP कोड है जिसे मैंने नाम की फ़ाइल में सहेजा है checkiffileexists.php
:
php. $filename = 'test.php'; अगर (file_exists($filename)) {echo "फ़ाइल $filename मौजूद है"; } और {गूंज "फ़ाइल $ फ़ाइल नाम मौजूद नहीं है"; }
फिर हम चलेंगे अपाचे बेंचमार्क टूल (एबी) साथ 200 एक साथ अनुरोध जब तक 2000 अनुरोध पूरे हुए:
# ab -k -c 100 -n 2000 लोकलहोस्ट/checkiffileexists.php।
आइए परीक्षण चलाएं और परिणामों की तुलना करें। प्रदर्शन आँकड़ों पर ध्यान दें:
जैसा कि आप देख सकते हैं, घटना के साथ सर्वर का प्रदर्शन इसकी तुलना में बहुत बेहतर है प्रीफोर्क इस परीक्षा के हर पहलू में समकक्ष।
शायद सबसे महत्वपूर्ण हार्डवेयर आइटम को ध्यान में रखा जाना चाहिए राम प्रत्येक अपाचे प्रक्रिया के लिए आवंटित। जबकि आप इसे सीधे नियंत्रित नहीं कर सकते हैं, आप चाइल्ड प्रक्रियाओं की संख्या को सीमित कर सकते हैं MaxRequestWorkers निर्देश (पूर्व में के रूप में जाना जाता है) ज्यादा ग्राहक अपाचे में 2.2), जो Apache द्वारा RAM के उपयोग को सीमित कर देगा। दोबारा, आप इस मान को प्रति होस्ट या प्रति वर्चुअल होस्ट आधार पर सेट कर सकते हैं।
ऐसा करने के लिए, आपको अपाचे द्वारा उपयोग की जाने वाली रैम की औसत मात्रा पर ध्यान देना चाहिए, फिर इसे की संख्या से गुणा करना चाहिए MaxRequestWorkers, और वह मेमोरी की मात्रा है जिसे अपाचे प्रक्रियाओं के लिए आवंटित किया जाएगा। एक चीज जो आप कभी नहीं चाहते कि आपका वेब सर्वर स्वैप का उपयोग करना शुरू कर दे, क्योंकि इससे इसके प्रदर्शन में काफी कमी आएगी। इस प्रकार, आपको अपाचे द्वारा रैम के उपयोग को हमेशा उस सीमा के भीतर रखना चाहिए जो आप वहन कर सकते हैं और इसके लिए कभी भी स्वैप पर भरोसा नहीं करना चाहिए।
उदाहरण के लिए, निम्न ब्लॉक एक साथ ग्राहकों की संख्या को सीमित कर देगा 30. यदि अधिक क्लाइंट होस्ट से टकराते हैं, तो उन्हें विलंब या क्षणिक विफलता का अनुभव हो सकता है जिसे ब्राउज़र को रीफ़्रेश करके आसानी से हल किया जा सकता है। हालांकि इसे अवांछनीय माना जा सकता है, यह सर्वर के लिए स्वस्थ है और लंबे समय में, आपकी साइट के लिए भी सबसे अच्छा है।
आप इस ब्लॉक को अंदर रख सकते हैं /etc/httpd/conf/httpd.conf
या /etc/apache2/apache2.conf
, इस पर निर्भर करता है कि आप CentOS या डेबियन का उपयोग कर रहे हैं या नहीं।
कृपया ध्यान दें कि एक ही सिद्धांत सभी पर लागू होता है एमपीएम - मैं पिछले टिप में उल्लिखित अवधारणा को जारी रखने के लिए यहां ईवेंट का उपयोग कर रहा हूं:
StartServers 3 MinSpareThreads 25 MaxSpareThreads 75 ThreadLimit 64 Threads PerChild 25 MaxRequestWorkers 30 MaxConnections PerChild 1000।
किसी भी घटना में, यह अत्यधिक अनुशंसा की जाती है कि आप देखें अपाचे २.४ डॉक्स यह देखने के लिए कि आपके चुने हुए एमपीएम के लिए कौन से निर्देशों की अनुमति है।
एक नियम के रूप में, आपको किसी भी अपाचे मॉड्यूल को लोड नहीं करना चाहिए जो आपके आवेदन के काम करने के लिए कड़ाई से जरूरी नहीं है। इसके लिए आपके सर्वर पर चल रहे एप्लिकेशन के कम से कम समग्र ज्ञान की आवश्यकता होगी, खासकर यदि आप एक सिस्टम एडमिनिस्ट्रेटर हैं और विकास के लिए कोई अन्य टीम है।
आप वर्तमान में लोड किए गए मॉड्यूल को इसके साथ सूचीबद्ध कर सकते हैं:
# httpd -M [RedHat/CentOS आधारित सिस्टम पर] # apache2ctl -M [डेबियन/उबंटू आधारित सिस्टम पर]
मॉड्यूल को अनलोड / अक्षम करने के लिए Centos, आपको उस पंक्ति पर टिप्पणी करनी होगी जो से शुरू होती है लोडमॉड्यूल (या तो मुख्य विन्यास फाइल में या अंदर एक सहायक में /etc/httpd/conf.modules.d.
दूसरी ओर, डेबियन नामक एक उपकरण प्रदान करता है ए2डिस्मोड मॉड्यूल को अक्षम करने के लिए और निम्नानुसार उपयोग किया जाता है:
# a2dismod मॉड्यूल_नाम।
इसे वापस सक्षम करने के लिए:
# a2enmod मॉड्यूल_नाम।
किसी भी मामले में, परिवर्तनों को प्रभावी करने के लिए अपाचे को पुनरारंभ करना याद रखें।
इस लेख में हमने समीक्षा की है 5 युक्तियाँ जो आपको Apache वेब सर्वर को ट्यून करने और उसके प्रदर्शन को बढ़ाने में मदद करेगा। इसके अलावा, आपको याद रखना चाहिए कि सुरक्षा के बिना अनुकूलन और प्रदर्शन व्यर्थ है, इसलिए आप इसका उल्लेख करना चाह सकते हैं वेबसर्वर के प्रदर्शन को बेहतर बनाने के लिए mod_pagespeed स्थापित करें तथा अपाचे सख्त करने की युक्तियाँ लेख Tecmint.com में भी।
चूंकि हम इस लेख में इस विषय के सभी पहलुओं को पर्याप्त रूप से शामिल नहीं कर सकते हैं, शायद आप अन्य विचारों के बारे में सोचेंगे जिन्हें आप बाकी समुदाय के साथ साझा करना चाहेंगे। यदि हां, तो बेझिझक हमें नीचे दिए गए टिप्पणी फ़ॉर्म का उपयोग करके बताएं।