ओवरली सरलीकृत: आपको कुछ ऐसी चीज़ की आवश्यकता होती है जो पायथन को निष्पादित करती है लेकिन पायथन सभी प्रकार के अनुरोधों को संभालने में सबसे अच्छा नहीं है।
[अस्वीकरण: मैं एक Gunicorn डेवलपर हूं]
कम सरलीकृत: भले ही आप किस ऐप सर्वर का उपयोग करते हैं (Gunicorn, mod_wsgi, mod_uwsgi, cherrypy) किसी भी प्रकार के गैर-तुच्छ परिनियोजन में कुछ अपस्ट्रीम होगा, जो उन अनुरोधों को संभाल लेगा जो आपके Djo ऐप को संभालना नहीं चाहिए। ऐसे अनुरोधों के तुच्छ उदाहरण स्थिर संपत्ति (चित्र / सीएसएस / जेएस) परोस रहे हैं।
यह क्लासिक "थ्री टियर आर्किटेक्चर" के दो प्रथम स्तरों में परिणत होता है। यानी, वेबसर्वर (आपके मामले में Nginx) छवियों और स्थिर संसाधनों के लिए कई अनुरोधों को संभाल लेगा। अनुरोधों को गतिशील रूप से उत्पन्न करने की आवश्यकता होती है, फिर एप्लिकेशन सर्वर (आपके उदाहरण में Gunicorn) पर पारित किया जाएगा। (एक तरफ के रूप में, तीन स्तरों में से तीसरा डेटाबेस है)
ऐतिहासिक रूप से कहा जाए, तो इन स्तरों में से प्रत्येक को अलग-अलग मशीनों पर होस्ट किया जाएगा (और पहले दो स्तरों में कई मशीनें होने की संभावना होगी, अर्थात: 5 वेब सर्वर दो ऐप सर्वरों के अनुरोधों को भेजते हैं जो बदले में एक डेटाबेस से क्वेरी करते हैं)।
आधुनिक युग में अब हमारे पास सभी आकृतियों और आकारों के अनुप्रयोग हैं। हर सप्ताहांत परियोजना या छोटी व्यावसायिक साइट को वास्तव में कई मशीनों की अश्वशक्ति की आवश्यकता नहीं होती है और यह एक बॉक्स पर काफी खुशी से चलेगी। इसने होस्टिंग समाधानों की सरणी में नई प्रविष्टियों को जन्म दिया है। कुछ समाधान ऐप सर्वर से वेब सर्वर (Apache httpd + mod_wsgi, Nginx + mod_uwsgi, आदि) से विवाह करेंगे। और यह बिल्कुल नहीं है कि इन वेब / ऐप सर्वर संयोजनों में से एक के रूप में एक ही मशीन पर डेटाबेस को होस्ट करने के लिए।
अब गुनिकॉर्न के मामले में, हमने एक विशेष निर्णय लिया (रूबी की यूनिकॉर्न से नकल करते हुए) ने नग्नेक्स से अलग व्यवहार पर भरोसा करते हुए चीजों को नग्नेक्स से अलग रखने के लिए बनाया। विशेष रूप से, यदि हम यह मान सकते हैं कि Gunicorn इंटरनेट से सीधे कनेक्शन नहीं पढ़ेगा, तो हमें धीमे चलने वाले ग्राहकों के बारे में चिंता करने की आवश्यकता नहीं है। इसका मतलब यह है कि Gunicorn के लिए प्रसंस्करण मॉडल शर्मनाक सरल है।
पृथक्करण भी Gunicorn को शुद्ध पायथन में लिखने की अनुमति देता है जो प्रदर्शन को महत्वपूर्ण रूप से प्रभावित नहीं करते हुए विकास की लागत को कम करता है। यह उपयोगकर्ताओं को अन्य प्रॉक्सी का उपयोग करने की क्षमता भी देता है (यह मानते हुए कि वे सही ढंग से बफर करते हैं)।
HTTP अनुरोध को वास्तव में क्या हैंडल करता है, इस बारे में आपके दूसरे प्रश्न के रूप में, सरल उत्तर Gunicorn है। पूरा जवाब Nginx और Gunicorn दोनों अनुरोध को संभालता है। मूल रूप से, Nginx को अनुरोध प्राप्त होगा और यदि यह एक गतिशील अनुरोध है (आमतौर पर URL पैटर्न पर आधारित है), तो वह Gunicorn को वह अनुरोध देगा, जो इसे संसाधित करेगा, और फिर Nginx को एक प्रतिक्रिया लौटाएगा, जो तब मूल प्रतिक्रिया पर वापस आ जाएगी। ग्राहक।
तो समापन में, हाँ। आपको उचित Django परिनियोजन के लिए Nginx और Gunicorn (या कुछ समान) दोनों की आवश्यकता है। यदि आप विशेष रूप से Django को Nginx के साथ होस्ट करना चाह रहे हैं, तो मैं Gunicorn, mod_uwsgi, और शायद चेरीपाइ को चीजों के Django पक्ष के उम्मीदवारों के रूप में जांच करूंगा।