2010-10-23 22 views
19

पर्ल वेब अनुप्रयोगों को चलाने के लिए एक बहुत लोकप्रिय विकल्प इन दिनों एक फास्टसीजीआई डिमन या पीएसजीआई सक्षम वेबसर्वर (उदाहरण के लिए स्टर्मन) के लिए एक nginx webserver proxying अनुरोधों के पीछे है। ।nginx और पर्ल: फास्टसीजीआई बनाम रिवर्स प्रॉक्सी (पीएसजीआई/स्टर्मन)

वहाँ क्यों एक सामान्य रूप में यह करना होगा (जैसे Why use nginx with Catalyst/Plack/Starman?) और जवाब (दोनों ही मामलों में लागू करने के लिए लग रहे हैं जैसे nginx स्थैतिक सामग्री पेश करने की अनुमति, अनुप्रयोग सर्वर के लिए आसान पुनः आरंभ, लोड संतुलन के रूप में प्रश्न के बहुत सारे किया गया है , आदि)

हालांकि, मैं विशेष रूप से फास्टसीजीआई बनाम रिवर्स-प्रॉक्सी दृष्टिकोण का उपयोग करने के पेशेवरों/विपक्ष में रूचि रखता हूं। ऐसा लगता है कि स्टर्मन को व्यापक रूप से सबसे तेज़ और सर्वश्रेष्ठ पर्ल पीएसजीआई एप्लिकेशन/वेब सर्वर माना जाता है, और मैं फास्टसीजीआई का उपयोग करने के किसी भी फायदे को देखने के लिए संघर्ष कर रहा हूं।

  • यूनिक्स डोमेन सॉकेट TCP सॉकेट
  • कांटा/प्रक्रिया प्रबंधक शैली सर्वर गैर अवरुद्ध घटना-आधारित (जैसे AnyEvent) सर्वर के रूप में रूप में अच्छी तरह के रूप में रूप में अच्छी तरह: दोनों दृष्टिकोण का समर्थन करने लगते हैं।
  • सिग्नल से निपटने/सुंदर पुनः आरंभ
  • PSGI

इसी तरह, या तो विकल्प के लिए nginx विन्यास बहुत समान है।

तो आप दूसरे पर एक क्यों चुनेंगे?

उत्तर

15

एक रिवर्स प्रॉक्सी सेटअप (जैसे nginx अग्रेषण Starman के HTTP) निम्न लाभ हैं: के बाद से आप आसानी से सीधे बैकएंड सर्वर हिट कर सकते हैं

  • बातें, एक सा डिबग करने के लिए आसान कर रहे हैं;

  • यदि आपको अपने बैकएंड सर्वर को स्केल करने की आवश्यकता है, तो आप फ्रंटेंड (स्थिर-सेवा) HTTP और आपके बैकएंड (ज़ोप को अक्सर इस तरह तैनात) के बीच पाउंड/हैप्रोक्सी जैसे कुछ का उपयोग कर सकते हैं;

  • यह एक अच्छा साइडकिक हो सकता है यदि आप किसी प्रकार की बाहरी तरफ, कैशिंग, रिवर्स प्रॉक्सी (जैसे वार्निश या स्क्विड) का उपयोग कर रहे हैं क्योंकि यह इसे बहुत आसानी से बाईपास करने की अनुमति देता है।

हालांकि, यह निम्नलिखित कमियां हैं:

  • बैकएंड सर्वर वास्तविक उद्भव आईपी पता लगाने की है, के बाद से सभी इसे देखेंगे दृश्यपटल सर्वर पता है (आम तौर पर स्थानीय होस्ट); HTTP शीर्षलेख में क्लाइंट आईपी पता खोजने का लगभग एक आसान तरीका है, लेकिन यह पता लगाने के लिए कुछ अतिरिक्त है;

  • बैकएंड सर्वर आमतौर पर संरेखण "होस्ट:" HTTP शीर्षलेख नहीं जानता है, और इसलिए, स्वचालित रूप से स्थानीय संसाधन के लिए एक पूर्ण यूआरएल उत्पन्न नहीं कर सकता है; ज़ोप बैकएंड के अनुरोध में मूल प्रोटोकॉल, होस्ट और पोर्ट को एम्बेड करने के लिए विशेष यूआरएल के साथ इसे संबोधित करता है, लेकिन ऐसा कुछ है जिसे आपको फास्टसीजीआई/प्लेक/... के साथ नहीं करना है;

  • फ्रंटेंड स्वचालित रूप से बैकएंड प्रक्रियाओं को नहीं बढ़ा सकता है, जैसे कि यह फास्टसीजीआई के साथ उदाहरण के लिए कर सकता है।

अपने पसंदीदा पेशेवरों/विपक्ष उठाओ और, मुझे लगता है अपनी पसंद बनाने ;-)

+11

मूल ग्राहक आईपी पते में एक्स-Forwarded-For शीर्षलेख और मूल होस्ट हैडर एक्स Forwarded- में पारित हो जाता है पारित हो जाता है होस्ट हेडर, इसलिए पहले दो डाउनसाइड्स महत्वपूर्ण नहीं हैं। तुलना के लिए – marpetr

+0

+1 धन्यवाद। चूंकि कोई बैक-एंड प्रक्रियाओं और धागे को प्रबंधित करने के लिए मास्टर प्रक्रिया चला सकता है, इसलिए बिंदु 3 गैर-समस्या है। आपने ज़ोप के बारे में एक दिलचस्प बिंदु उठाया और वैध यूआरएल बनाने के लिए मूल क्लाइंट आईपी और होस्टनाम को जानने का तरीका चुना – Viet

0

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

संबंधित मुद्दे