अपाचे बनाम नग्नेक्स


29

मैं हाल ही में अपाचे और नग्नेक्स के बीच मतभेदों की जांच कर रहा हूं और उलझन में हूं कि मुझे किसके बारे में चुनना चाहिए।

मैंने कुछ खोज की है लेकिन दोनों के बीच कोई निश्चित तुलना नहीं है और मैं सोच रहा था कि क्या यहां कोई व्यक्ति दोनों के बीच के मतभेदों पर अपने विचार दे सकता है।

मेरा वर्तमान ज्ञान मुझे यह समझने की अनुमति देता है कि mod_php fastcgi की तुलना में अधिक तेज़ और अधिक सुरक्षित है लेकिन Apache तब बहुत खराब होता है जब यह एक साथ कनेक्शन और मेमोरी खपत के लिए आता है।

मेरी साइट बहुत लंबे मतदान का उपयोग कर रही है, लेकिन एक गैर AJAX वेब बेस है (यानी शीर्ष पर लंबे मतदान के साथ अपाचे)।

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

तो आधुनिक वेब के लिए कौन सा बेहतर है? अपाचे या Nginx?

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

मैंने मार्टिन एफ के जवाब को चिह्नित किया है क्योंकि उन्होंने मेरे सवालों के ऐसे स्पष्ट और पूर्ण उत्तर दिए हैं कि मुझे लगता है कि वह इस चिह्न के हकदार हैं, हालांकि, सभी तीन उत्तर अच्छे और मान्य थे और निश्चित रूप से किसी अन्य साइट के लिए रिवर्स प्रॉक्सी का उपयोग करने पर गौर करेंगे। चूँकि मैं अभी कुछ बहुत बहुत ही कुल्ली पाया जो कि नग्नेक्स प्रॉक्सिंग में कर सकता है।

धन्यवाद,

जवाबों:


28

आपको कुछ गलत धारणाएं हैं, जो मुझे लगता है कि मुझे संबोधित करने की आवश्यकता है।

सबसे पहले, mod_php केवल मामूली रूप से तेज़ है, मेरे सभी परीक्षणों से पता चला है कि अंतर इतना घटाव है कि इसमें कोई तथ्य नहीं है। मुझे यह भी संदेह है कि सुरक्षा पहलू आपके लिए प्रासंगिक है क्योंकि आप एक समर्पित सर्वर को देख रहे हैं। mod_php वास्तव में केवल एक साझा वातावरण में एक फायदा है - वास्तव में, एक समर्पित वातावरण में php-fpm का लाभ होगा क्योंकि PHP और आपका वेब सर्वर अब विभिन्न प्रक्रियाओं के रूप में चलता है, और यह भी php में भयानक लॉगिंग विकल्पों में फैक्टरिंग नहीं है। fpm जैसे कि धीमी लॉग।

अगर दुनिया श्वेत-श्याम थी, तो मैं कहूंगा कि शुद्ध nginx सेटअप के साथ जाना और php-fpm के साथ php संकलित करें। अधिक वास्तविक रूप से यदि आपके पास पहले से ही अपाचे काम कर रहे हैं, तो अपाचे को निगनेक्स एक रिवर्स प्रॉक्सी बनाएं और आप सेटअप समय के कुछ घंटों को बचा सकते हैं और प्रदर्शन में अंतर छोटा होगा।

लेकिन यह मान लेते हैं कि दुनिया एक सेकंड के लिए काले और सफेद है, क्योंकि यह कहीं अधिक भयानक सेटअप के लिए बनाता है। आप अपने वेब सर्वर के लिए nginx + php-fpm करते हैं। अपलोड को हल करने के लिए आप अपलोड मॉड्यूल का उपयोग करें और nginx के लिए प्रगति मॉड्यूल अपलोड करें। इसका मतलब यह है कि आपका वेब सर्वर अपलोड को स्वीकार करता है और जब यह किया जाता है तो फाइल पथ को PHP पर भेज देता है, ताकि फ़ाइल को नग्नेक्स और पीएचपी के बीच फास्टकेगी प्रोटोकॉल, मिठाई के माध्यम से प्रवाहित करने की आवश्यकता न हो। (मेरे पास यह लाइव सेटअप में है और यह बहुत अच्छा काम कर रहा है, btw!)

डाउनलोड करने वाले उपयोगकर्ता के लिए आप nginxs x-send-file-like जैसी सुविधा का उपयोग करते हैं जिसे x-acceler-redirect कहा जाता है, अनिवार्य रूप से आप PHP में अपना प्रमाणीकरण करते हैं और एक हेडर सेट करते हैं, जो nginx ऊपर उठाता है और उस फ़ाइल को स्थानांतरित करना शुरू करता है। PHP निष्पादन समाप्त करता है और आपका वेब सर्वर स्थानांतरण को संभाल रहा है, मीठा! (फिर, मेरे पास एक लाइव सेटअप है और यह बहुत अच्छा काम कर रहा है)

सर्वर या अन्य लंबे समय तक चलने वाले ऑपरेशनों में फ़ाइलों को वितरित करने के लिए, हमें पता चलता है कि PHP वास्तव में इसके लिए सबसे उपयुक्त नहीं है, इसलिए हम गियरमैन को स्थापित करते हैं, जो एक नौकरी सर्वर है जो विभिन्न सर्वरों पर श्रमिकों के बीच नौकरियों को वितरित कर सकता है, इन श्रमिकों को किसी भी में लिखा जा सकता है भाषा। इसलिए आप एक वितरित कार्यकर्ता बना सकते हैं और उनमें से 5 को 100 एमबी PHP के बजाय 200 केबी की कुल मेमोरी का उपयोग करके उपयोग कर सकते हैं। मिठाई। (मेरे पास भी यह लाइव चल रहा है, इसलिए यह वास्तव में संभव है)

यदि आप इस पर अभी तक नहीं उठे हैं, तो मुझे लगता है कि आपकी कई समस्याएं आपके वेब सर्वर से संबंधित नहीं हैं, आप बस ऐसा ही सोचते हैं क्योंकि अपाचे इसे संरचना के कारण आपके वेब सर्वर से संबंधित होने के लिए मजबूर करता है। अक्सर पीएचपी की तुलना में नौकरी के लिए बेहतर उपकरण होते हैं और पीएचपी एक ऐसी भाषा है जो यह जानता है और पीएचपी छोड़ने के बिना ऑफ-लोडिंग कार्य के लिए उत्कृष्ट विकल्प प्रदान करता है।

मैं अत्यधिक निगंक्स की सिफारिश करूंगा, लेकिन मुझे भी लगता है कि आपको अपनी अन्य समस्याओं के लिए अन्य विकल्पों पर गौर करना चाहिए, अगर आपको स्केलिंग या प्रदर्शन की समस्या है तो मुझे लिखने में संकोच न करें। मुझे नहीं पता कि क्या आप यहां से संदेश भेज सकते हैं, लेकिन अन्यथा मुझे martin@bbtn.us पर लिखें क्योंकि मैं कुछ भी nginx के साथ टैग नहीं किए जाने के लिए सर्वर की गलती नहीं करता हूं। :)


1
लानत है कि वास्तव में चीजों को मंजूरी दे दी :) धन्यवाद वह स्पष्टीकरण था जिसकी मुझे तलाश थी। मुझे लगता है कि मैं अब नग्नेक्स सीखने पर बहुत बेची जा रही हूं क्योंकि अपाचे मेरी साइट का उपयोग करके चोक और मर जाएगा। सौभाग्य से यह वास्तव में इसे पार करने के लिए काफी आसान लग रहा है। मेरा मतलब है कि नोड पर लोगों ने कहा है कि ज्यादातर चीजें उसमें लिखी जाती हैं और केवल अपने php सेशन क्लास को प्रदूषित करती हैं यदि आपको वास्तव में जरूरत पड़ती है (जो कि मैं तब तक करती हूं जब तक कि उपयोगकर्ताओं को अपनी विंडो बंद करने का पता लगाने का कोई तरीका न हो: P)। हाँ, मैं एक बड़े पैमाने पर सर्वर फ़ार्म पर चल रहा हूं ताकि यह पता
चले

: मैं इस तलाश रहे हैं joeandmotorboat.com/2008/02/28/... और इस: blog.webfaction.com/a-little-holiday-present और यह वास्तव में हो गया मुझे लंबे समय तक करने में सक्षम होने के विचार पर kiddying है वास्तव में मेरे दिल की सामग्री के लिए सर्वेक्षण। Apache :)
Sammaye

आपके यह कहने का इंतजार कि मैं जावा में एक मल्टीथ्रेड वर्कर बना सकता हूं और php इसके चारों ओर पूरी तरह से काम कर सकता है? मेरा मतलब है कि मुझे जो सबसे बड़ी समस्या दिख रही है, वह सर्वर है क्योंकि मुझे अपाचे के साथ बड़े पैमाने पर मेमोरी समस्याओं का सामना करना पड़ता है, जो लंबे मतदान का उपयोग करते हैं, जो कि आम है ... एनजीएक्स द्वारा तय किया गया।
सम्मे

1
अनिवार्य रूप से हाँ, मेरे पास फ़ाइल वितरण कर्मचारी हैं जो सी में लिखे गए हैं, PHP के लिए गियरमैन एक्सटेंशन का उपयोग करके मैं गियरमैन जॉब सर्वर को वितरण नौकरी भेजता हूं और इसे एक कार्यकर्ता को भेजता है, जिसे जो भी भाषा में लिखा जा सकता है; PHP, Java, C, आदि यह कार्यकर्ता तब नौकरी करता है और गियरमैन को वापस स्थिति बताता है, जो PHP में वापस रिपोर्ट करता है। (जब तक एक पृष्ठभूमि नौकरी नहीं चुनी गई थी, उस स्थिति में पीएचपी इसके लिए इंतजार किए बिना समाप्त हो जाती है)
मार्टिन फेजोर्डवाल्ड

2
मुझे पता है कि यह एक पुरानी पोस्टिंग है, लेकिन मुझे यह कहना है, यह सबसे अधिक जानकारीपूर्ण पोस्टों में से एक है जो मैंने नगनेक्स अपाचे के विषय पर पाया है। थान मार्टिन, +1।
एकोई Meexx

5

मैं nginx को एक रिवर्स प्रॉक्सी के रूप में चलाने का सुझाव दूंगा। यह आपकी सभी स्थिर और कैश्ड फ़ाइलों (जहाँ यह अपाचे / कम मेमोरी ओवरहेड की तुलना में बहुत तेज़ है) को संभाल लेगा और फिर अपाचे को गतिशील सामग्री के लिए सभी अनुरोधों को अग्रेषित करेगा।


हाँ यह वही है जो ज्यादातर लोग atm करते दिखते हैं, मुझे निश्चित रूप से इस पर गौर करना होगा
Sammaye

1
Apache के लिए mod_rpaf स्थापित करना याद रखें ताकि आप लॉगिंग उद्देश्यों के लिए क्लाइंट IP पते से गुजर सकें (अन्यथा Apache लॉग 127.0.0.1 से होने के नाते सभी अनुरोधों को दिखाएगा), निम्नलिखित को nginx config में जोड़ें: प्रॉक्सी_सेट_हैबर X- फ़ॉर्वर्ड-फॉर $xy_add_x_forwarded_for;
ग्रेग अन्नडेल

इससे पहले कि मैं आज रात यह कोशिश करूँ, मुझे आश्चर्य होता है। अगर मैं नगनेक्स से अपाचे तक जा रहा हूं, जो कि मेरे PHP की सेवा करता है, तो इसका मतलब है कि लंबे समय के मतदान में अभी भी अपाचे के समान समस्याएं हैं या क्या इसे रिवर्स प्रॉक्सी में कॉल करना अपाचे को किसी तरह से अलग तरीके से कार्य करता है?
सम्मे

1

मुझे इतना यकीन नहीं है कि mod_php अपने विकल्पों की तुलना में तेज़ है, आपने इसे कहाँ पढ़ा है? मैंने nginx + php-fpm के साथ कुछ लैब परीक्षण किया है, और मैंने जो मापा है, वह हर दूसरे सेटअप को धड़कता है।

इस सेटअप पर एक नज़र डालें: http://interfacelab.com/nginx-php-fpm-apc-awesome/

मैंने इसे लगभग एक ही सेट किया है, सिवाय इसके कि मैं http://www.dotdeb.org/ से PHP पैकेजों का उपयोग करता हूं - जिसमें php-fpm पैकेज और एक init स्क्रिप्ट का उपयोग करने के लिए तैयार है। मैं memecache या syck का उपयोग नहीं करता।


stackoverflow.com/questions/78108/… इसे यहाँ से मिला है और मैंने php मैनुअल की जाँच की है और यह कहता है कि php_mod cgi संस्करणों पर महत्वपूर्ण लाभ प्रदान करता है। आपका सेटअप अच्छा लग रहा है। यह बहुत आसान भी लगता है। मैं इसे
देखूंगा

2
इसमें कहा गया है कि CGI एक बिलियन मॉड्यूल की तुलना में बहुत धीमा है - FastCGI :) नहीं
pauska

1
अच्छी तरह से - यदि आप PHP प्रक्रिया के बारे में चिंता कर रहे हैं मरने (या बाहर समय) तो FastCGI (या PHP-FPM) जाने का रास्ता है। यह अन्य गतिविधियों को बाधित किए बिना मृत बच्चे की प्रक्रिया को मार सकता है।
पौस्का

1
हाँ। या, ठीक है, यह निर्भर करता है। आप एक ही समय में कितने (अधिकतम) धीमे अनुरोधों की संख्या संसाधित करेंगे? अधिकतम PHP FPM थ्रेड्स सेट करें, साथ ही "तेज" cgi की संख्या को आप avaible चाहते हैं। मैंने 4GB रैम वाले सर्वर पर 200 PHP-FPM चिल्ड रन करने वाले लोगों के बारे में सुना है, इसलिए यदि मैं आप होता तो मैं इस बारे में बहुत अधिक चिंता नहीं करता। PHP के अगले संस्करण (5.3.3) में मानक द्वारा PHP-FPM शामिल होगा, जहां एक विशेष इंजन भी शामिल है - यह आपके द्वारा लंबित कितने अनुरोधों के अनुसार स्केल करेगा।
पौस्का जूल

1
मैं आसानी से कई सर्वरों (शायद 10 तक) पर चल रहा हूं, लेकिन अगर मैं 200 अनुरोधों को फिट कर सकता हूं जो 4 जीबी सर्वर पर लंबे समय तक मतदान कर सकते हैं तो यह लगभग 20 सर्वर होना चाहिए जो मुझे अपाचे चलाने की आवश्यकता होगी। हम्म् ... मुझे आज रात इसका परीक्षण करने की आवश्यकता होगी
Sammaye
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.