Nginx मेल सर्वर. मेल प्रॉक्सी के लिए एनजीआईएनएक्स की स्थापना

यह आलेख बताएगा कि एनजीआईएनएक्स प्लस या एनजीआईएनएक्स ओपन सोर्स को मेल सर्वर या बाहरी मेल सेवा के लिए प्रॉक्सी के रूप में कैसे कॉन्फ़िगर किया जाए।

परिचय

एनजीआईएनएक्स आईएमएपी, पीओपी3 और एसएमटीपी प्रोटोकॉल को मेल खातों को होस्ट करने वाले अपस्ट्रीम मेल सर्वरों में से एक पर प्रॉक्सी कर सकता है और इस प्रकार इसे ईमेल क्लाइंट के लिए एकल एंडपॉइंट के रूप में उपयोग किया जा सकता है। इससे कई लाभ हो सकते हैं, जैसे:

  • मेल सर्वरों की संख्या को मापना आसान है
  • विभिन्न नियमों के आधार पर मेल सर्वर चुनना, उदाहरण के लिए, क्लाइंट के आईपी पते के आधार पर निकटतम सर्वर चुनना
  • मेल सर्वरों के बीच लोड वितरित करना
आवश्यक शर्तें

    एनजीआईएनएक्स प्लस (पहले से ही ईमेल ट्रैफ़िक को प्रॉक्सी करने के लिए आवश्यक मेल मॉड्यूल शामिल है) या एनजीआईएनएक्स ओपन सोर्स ने ईमेल प्रॉक्सी कार्यक्षमता के लिए --with-mail पैरामीटर और SSL/TLS समर्थन के लिए --with-mail_ssl_module पैरामीटर का उपयोग करके मेल मॉड्यूल संकलित किया है:

    $ ./configure --with-mail --with-mail_ssl_module --with-openssl=[ DIR] /openssl-1.1.1

    IMAP, POP3 और/या SMTP मेल सर्वर या कोई बाहरी मेल सेवा

SMTP/IMAP/POP3 मेल प्रॉक्सी सर्वर कॉन्फ़िगर करना

एनजीआईएनएक्स कॉन्फ़िगरेशन फ़ाइल में:

मेल ( #... )

मेल (सर्वर_नाम mail.example.com; #...)

मेल (सर्वर_नाम mail.example.com; auth_http लोकलहोस्ट: 9000 /cgi-bin/nginxauth.cgi; #...)

वैकल्पिक रूप से, proxy_pass_error_message निर्देश निर्दिष्ट करके निर्दिष्ट करें कि उपयोगकर्ता को प्रमाणीकरण सर्वर से त्रुटियों के बारे में सूचित करना है या नहीं। जब किसी मेलबॉक्स की मेमोरी ख़त्म हो जाए तो यह उपयोगी हो सकता है:

मेल (server_name mail.example.com; auth_http लोकलहोस्ट: 9000 /cgi-bin/nginxauth.cgi; proxy_pass_error_message चालू; #...)

प्रत्येक SMTP, IMAP, या POP3 सर्वर को सर्वर ब्लॉक के साथ कॉन्फ़िगर करें। प्रत्येक सर्वर के लिए, निर्दिष्ट करें:

  • पोर्ट नंबरजो सुनने के निर्देश के साथ निर्दिष्ट प्रोटोकॉल के अनुरूप है
  • शिष्टाचारप्रोटोकॉल निर्देश के साथ (यदि निर्दिष्ट नहीं है, तो सुनने के निर्देश में निर्दिष्ट पोर्ट से स्वचालित रूप से पता लगाया जाएगा)
  • अनुमति है प्रमाणीकरण के तरीके imap_auth ,pop3_auth , और smtp_auth निर्देशों के साथ:

सर्वर (सुनें 25; प्रोटोकॉल एसएमटीपी; smtp_auth लॉगिन सादा cram-md5; ) सर्वर (सुनें 110; प्रोटोकॉल पॉप3; पॉप3_auth सादा एपोप cram-md5; ) सर्वर (सुनें 143; प्रोटोकॉल आईमैप;)

मेल प्रॉक्सी के लिए प्रमाणीकरण स्थापित करना

क्लाइंट से प्रत्येक POP3/IMAP/SMTP अनुरोध को पहले बाहरी HTTP प्रमाणीकरण सर्वर पर या प्रमाणीकरण स्क्रिप्ट द्वारा प्रमाणित किया जाएगा। एनजीआईएनएक्स मेल सर्वर प्रॉक्सी के लिए प्रमाणीकरण सर्वर का होना अनिवार्य है। सर्वर को एनजीआईएनएक्स प्रमाणीकरण प्रोटोकॉल के अनुसार स्वयं बनाया जा सकता है जो HTTP प्रोटोकॉल पर आधारित है।

यदि प्रमाणीकरण सफल होता है, तो प्रमाणीकरण सर्वर एक अपस्ट्रीम सर्वर का चयन करेगा और अनुरोध को पुनर्निर्देशित करेगा। इस मामले में, सर्वर से प्रतिक्रिया में निम्नलिखित पंक्तियाँ होंगी:

HTTP/1.0 200 ओके ऑथ-स्टेटस: ओके ऑथ-सर्वर: # अपस्ट्रीम सर्वर का सर्वर नाम या आईपी पता जिसका उपयोग मेल प्रोसेसिंग के लिए किया जाएगा ऑथ-पोर्ट: # अपस्ट्रीम सर्वर का पोर्ट

यदि प्रमाणीकरण विफल हो जाता है, तो प्रमाणीकरण सर्वर एक त्रुटि संदेश लौटाएगा। इस मामले में, सर्वर से प्रतिक्रिया में निम्नलिखित पंक्तियाँ होंगी:

HTTP/1.0 200 ठीक प्रामाणिक-स्थिति: # क्लाइंट को लौटाया जाने वाला एक त्रुटि संदेश, उदाहरण के लिए "अमान्य लॉगिन या पासवर्ड" प्रामाणिक-प्रतीक्षा: # कनेक्शन बंद होने तक शेष प्रमाणीकरण प्रयासों की संख्या

ध्यान दें कि दोनों ही मामलों में प्रतिक्रिया शामिल होगी HTTP/1.0 200 ठीक हैजो भ्रमित करने वाला हो सकता है.

प्रमाणीकरण सर्वर से अनुरोधों और प्रतिक्रियाओं के अधिक उदाहरणों के लिए, NGINX संदर्भ दस्तावेज़ में ngx_mail_auth_http_module देखें।

मेल प्रॉक्सी के लिए एसएसएल/टीएलएस सेट करना

SSL/TLS पर POP3/SMTP/IMAP का उपयोग करके आप सुनिश्चित करते हैं कि क्लाइंट और मेल सर्वर के बीच पारित डेटा सुरक्षित है।

मेल प्रॉक्सी के लिए एसएसएल/टीएलएस सक्षम करने के लिए:

कमांड लाइन में nginx -V कमांड टाइप करके और फिर आउटपुट में with --mail_ssl_module लाइन की तलाश करके सुनिश्चित करें कि आपका NGINX SSL/TLS समर्थन के साथ कॉन्फ़िगर किया गया है:

$ nginx -V तर्क कॉन्फ़िगर करें: ... साथ--mail_ssl_module

सुनिश्चित करें कि आपने सर्वर प्रमाणपत्र और एक निजी कुंजी प्राप्त कर ली है और उन्हें सर्वर पर डाल दिया है। प्रमाणपत्र किसी विश्वसनीय प्रमाणपत्र प्राधिकारी (सीए) से प्राप्त किया जा सकता है या ओपनएसएसएल जैसी एसएसएल लाइब्रेरी का उपयोग करके तैयार किया जा सकता है।

एसएसएल चालू;

शुरू होता है ;

एसएसएल प्रमाणपत्र जोड़ें: प्रमाणपत्रों के लिए पथ निर्दिष्ट करें (जो पीईएम प्रारूप में होना चाहिए) ssl_certificate निर्देश के साथ, और ssl_certificate_key निर्देश में निजी कुंजी के लिए पथ निर्दिष्ट करें:

मेल ( #...ssl_certificate /etc/ssl/certs/server.crt ; ssl_certificate_key /etc/ssl/certs/server.key ; )

आप ssl_protocols और ssl_ciphers निर्देशों के साथ SSL/TLS के केवल मजबूत संस्करण और सिफर का उपयोग कर सकते हैं, या आप अपने स्वयं के पसंदीदा प्रोटोकॉल और सिफर सेट कर सकते हैं:

मेल ( #...ssl_protocols TLSv1 TLSv1.1 TLSv1.2 ; ssl_ciphers HIGH:!aNULL:!MD5 ; )

मेल प्रॉक्सी के लिए एसएसएल/टीएलएस का अनुकूलन

ये संकेत आपके एनजीआईएनएक्स मेल प्रॉक्सी को तेज़ और अधिक सुरक्षित बनाने में आपकी सहायता करेंगे:

मेल संदर्भ के समान स्तर पर वर्कर_प्रोसेस निर्देश सेट के साथ प्रोसेसर की संख्या के बराबर वर्कर प्रक्रियाओं की संख्या सेट करें:

वर्कर_प्रोसेस ऑटो; मेल ( #... )

साझा सत्र कैश सक्षम करें और ऑटो के साथ अंतर्निहित सत्र कैश अक्षम करें; मेल (server_name mail.example.com; auth_http लोकलहोस्ट: 9000 /cgi-bin/nginxauth.cgi; proxy_pass_error_message चालू; ssl चालू; ssl_certificate /etc/ssl/certs/server.crt; ssl_certificate_key /etc/ssl/certs/server. कुंजी ; ssl_protocols TLSv1 TLSv1.1 TLSv1.2 ; ssl_ciphers HIGH:!aNULL:!MD5 ; ssl_session_cache साझा:SSL:10m ; ssl_session_timeout 10m ; सर्वर (सुनें 25 ; प्रोटोकॉल smtp ; smtp_auth लॉगिन सादा cram-md5 ; ) सर्वर (सुनें) 1 10 ; प्रोटोकॉल पॉप3 ; पॉप3_ऑथ प्लेन एपॉप क्रैम-एमडी5 ; ) सर्वर (सुनें 143 ; प्रोटोकॉल आईमैप ; ) )

इस उदाहरण में, तीन ईमेल प्रॉक्सी सर्वर हैं: SMTP, POP3 और IMAP। प्रत्येक सर्वर SSL और STARTTLS समर्थन के साथ कॉन्फ़िगर किया गया है। एसएसएल सत्र पैरामीटर कैश किए जाएंगे।

प्रॉक्सी सर्वर HTTP प्रमाणीकरण सर्वर का उपयोग करता है - इसका कॉन्फ़िगरेशन इस आलेख के दायरे से परे है। सर्वर से सभी त्रुटि संदेश क्लाइंट को वापस कर दिए जाएंगे।

आईरेडमेल है तैयार विधानसभामेल सर्वर खुला हुआ सोर्स कोड. असेंबली पोस्टफिक्स एसएमटीपी सर्वर (मेल ट्रांसफर एजेंट, संक्षिप्त रूप में एमटीए) पर आधारित है। असेंबली में ये भी शामिल हैं: Dovecot, SpamAssassin, Greylist, ClamAV, SOGo राउंडक्यूब, NetData और NGINX।

डवकोट - IMAP/POP3 सर्वर।

Spamassassin एक स्पैम फ़िल्टरिंग टूल है।

ग्रेलिस्ट एक ग्रेलिस्ट-आधारित एंटी-स्पैम टूल है।

ClamAV एक एंटीवायरस है.

राउंडक्यूब और एसओजीओ ईमेल के साथ काम करने के लिए वेब क्लाइंट हैं।

नेटडाटा एक वास्तविक समय सर्वर निगरानी कार्यक्रम है।

Nginx एक वेब सर्वर है.

ऑपरेटिंग सिस्टम को सपोर्ट करता है: CentOS 7, Debian 9, Ubuntu 16.04/18.04, FreeBSD 11/12 और OpenBSD 6.4।

iRedMail के भुगतान और निःशुल्क संस्करण हैं, जो iRedAdmin मेल असेंबली के अपने वेब इंटरफ़ेस की कार्यक्षमता में एक दूसरे से भिन्न हैं। में निःशुल्क संस्करणआप केवल डोमेन, उपयोगकर्ता और व्यवस्थापक मेलबॉक्स बना सकते हैं। यदि आपको कोई उपनाम बनाने की आवश्यकता है, तो आप iRedAdmin के माध्यम से मुफ़्त संस्करण में ऐसा नहीं कर पाएंगे। सौभाग्य से, PostfixAdmin नामक एक निःशुल्क समाधान मौजूद है जो आपको ऐसा करने की अनुमति देता है। PostfixAdmin आसानी से iRedMail में एकीकृत हो जाता है और इसके साथ बढ़िया काम करता है।

इंस्टालेशन

स्थापित करने के लिए, हमें ऊपर सूचीबद्ध ऑपरेटिंग सिस्टमों में से एक की आवश्यकता होगी। मैं उबंटू सर्वर 18.04 का उपयोग करूंगा। आपने भी खरीदा होगा डोमेन नामऔर DNS ज़ोन कॉन्फ़िगर किया गया। यदि आप उपयोग कर रहे हैं डीएनएस सर्वरआपका डोमेन रजिस्ट्रार, तो आपको डोमेन ज़ोन प्रबंधन अनुभाग में दो प्रविष्टियाँ करने की आवश्यकता है: ए और एमएक्स। आप डेलिगेशन सेट करके अपने स्वयं के DNS का भी उपयोग कर सकते हैं व्यक्तिगत खाताआपका डोमेन नाम रजिस्ट्रार.

DNS रजिस्ट्रार का उपयोग करते समय एक डोमेन ज़ोन सेट करना

टिप्पणी! प्रवेश का समय डीएनएस सेटिंग्सकई घंटों से लेकर एक सप्ताह तक चलने वाला। जब तक सेटिंग्स प्रभावी नहीं हो जातीं, मेल सर्वर सही ढंग से काम नहीं करेगा।

इंस्टॉल करने के लिए, iRedMail वेबसाइट से डाउनलोड करें वर्तमान संस्करण. फिलहाल यह 0.9.9 है.

# wget https://bitbucket.org/zhb/iredmail/downloads/iRedMail-0.9.9.tar.bz2

फिर डाउनलोड किए गए संग्रह को अनपैक करें।

# tar xjf iRedMail-0.9.9.tar.bz2

संग्रह को खोलना

और बनाए गए फोल्डर में जाएं।

# सीडी iRedMail-0.9.9

iRedMail इंस्टॉलर फ़ोल्डर

फ़ोल्डर की सामग्री की जाँच करना

फ़ोल्डर सामग्री

और iRedMail इंस्टालेशन स्क्रिप्ट चलाएँ।

# बैश iRedMail.sh

मेल सिस्टम की स्थापना शुरू हो जाएगी. इंस्टॉलेशन प्रक्रिया के दौरान आपको कई सवालों के जवाब देने होंगे। हम इंस्टालेशन शुरू करने के लिए सहमत हैं।

स्थापना प्रारंभ करें

स्थापना निर्देशिका का चयन करना

अब आपको एक वेब सर्वर का चयन करना होगा। ज्यादा विकल्प नहीं है, इसलिए हमने NGINX को चुना।

एक वेब सर्वर का चयन करना

अब आपको एक डेटाबेस सर्वर का चयन करना होगा जिसे मेल सिस्टम के साथ काम करने के लिए स्थापित और कॉन्फ़िगर किया जाएगा। मारियाडीबी का चयन करें.

डेटाबेस सर्वर का चयन करना

डेटाबेस के लिए रूट पासवर्ड सेट करें.

डेटाबेस रूट पासवर्ड बनाना

अब हम अपना ईमेल डोमेन दर्शाते हैं।

एक मेल डोमेन बनाना

फिर हम व्यवस्थापक के मेलबॉक्स [email protected] के लिए एक पासवर्ड बनाते हैं।

मेल व्यवस्थापक पासवर्ड बनाना

वेब घटकों का चयन करना

निर्दिष्ट सेटिंग्स की पुष्टि करें.

सेटिंग्स की पुष्टि

इंस्टालेशन शुरू हो गया है.

इंस्टालेशन

एक बार इंस्टॉलेशन पूरा हो जाने पर, SSH के लिए iptables नियम के निर्माण की पुष्टि करें और फ़ायरवॉल को पुनरारंभ करें। iRedMail iptables के साथ काम करता है। उबंटू में, सबसे अधिक इस्तेमाल की जाने वाली फ़ायरवॉल प्रबंधन उपयोगिता UFW है। यदि किसी कारण या किसी अन्य कारण से आपको ऐसी आवश्यकता है, तो UFW स्थापित करें (apt install ufw) और नियम जोड़ें ताकि UFW (उदाहरण: ufw "Nginx Full" को अनुमति दें या ufw पोस्टफ़िक्स को अनुमति दें) मेल सर्वर के काम को अवरुद्ध न करें। आप कमांड चलाकर उपलब्ध नियमों की सूची देख सकते हैं: ufw ऐप सूची। फिर UFW सक्षम करें: ufw सक्षम करें।

एक iptables नियम बनाना

फ़ायरवॉल को पुनः प्रारंभ करना

इससे iRedMail की स्थापना पूरी हो जाती है. सिस्टम ने हमें वेब इंटरफ़ेस पते और लॉगिन क्रेडेंशियल प्रदान किए। सभी मेल सिस्टम घटकों को सक्षम करने के लिए, आपको सर्वर को रीबूट करना होगा।

स्थापना पूर्ण करना

चलो पुनः आरंभ करें.

# रिबूट

समायोजन

सबसे पहले आपको यह सुनिश्चित करना होगा कि सब कुछ काम करता है। आइए https://domain/iredadmin पर iReadAdmin नियंत्रण कक्ष में लॉग इन करने का प्रयास करें। लॉगिन [email protected], इंस्टालेशन के दौरान पासवर्ड बनाया गया। एक रूसी-भाषा इंटरफ़ेस है।

जैसा कि आप देख सकते हैं, सब कुछ काम करता है। iRedAdmin में लॉग इन करते समय, आपको प्रमाणपत्र से संबंधित एक सुरक्षा त्रुटि प्राप्त होने की संभावना है। ऐसा इसलिए होता है क्योंकि iRedMail में एक अंतर्निहित स्व-हस्ताक्षरित प्रमाणपत्र होता है, जिसके बारे में ब्राउज़र शिकायत करता है। इस समस्या को हल करने के लिए, आपको एक वैध एसएसएल प्रमाणपत्र स्थापित करना होगा। यदि आपके पास कोई खरीदा हुआ है, तो आप इसे स्थापित कर सकते हैं। उदाहरण में, मैं लेट्स एनक्रिप्ट से निःशुल्क एसएसएल स्थापित करूंगा।

Let's Encrypt SSL प्रमाणपत्र स्थापित करना

हम सर्टिफिकेट उपयोगिता का उपयोग करके प्रमाणपत्र स्थापित करेंगे। सबसे पहले, आइए एक रिपॉजिटरी जोड़ें।

# ऐड-एपीटी-रिपॉजिटरी पीपीए: सर्टिफिकेट/सर्टिफिकेट

फिर हम आवश्यक घटकों के साथ सर्टबूट स्वयं स्थापित करेंगे।

# उपयुक्त इंस्टॉल करें Python-Certbot-nginx

हमें एक प्रमाणपत्र प्राप्त होता है.

# सर्टिफिकेट --nginx -d डोमेन.ru

कमांड चलाने के बाद, सिस्टम आपसे अपना ईमेल पता दर्ज करने के लिए कहेगा, दर्ज करें। बाद में आपको संभवतः एक त्रुटि प्राप्त होगी कि उस सर्वर ब्लॉक को ढूंढना संभव नहीं है जिसके लिए प्रमाणपत्र तैयार किया गया था। इस मामले में, यह सामान्य है, क्योंकि हमारे पास कोई सर्वर ब्लॉक नहीं है। हमारे लिए मुख्य बात प्रमाणपत्र प्राप्त करना है।

प्रमाणपत्र प्राप्त करना

जैसा कि हम देख सकते हैं, प्रमाणपत्र सफलतापूर्वक प्राप्त हो गया था और सिस्टम ने हमें प्रमाणपत्र और कुंजी तक का रास्ता दिखाया। वे बिल्कुल वही हैं जिनकी हमें आवश्यकता है। सामान्य तौर पर, हमें 4 फ़ाइलें प्राप्त हुईं जो "/etc/letsencrypt/live/domain" फ़ोल्डर में संग्रहीत की जाएंगी। अब हमें वेब सर्वर को अपने प्रमाणपत्र के बारे में सूचित करना होगा, यानी एम्बेडेड प्रमाणपत्र को अभी प्राप्त प्रमाणपत्र से बदलना होगा। ऐसा करने के लिए, हमें केवल एक फ़ाइल को संपादित करना होगा।

# नैनो /etc/nginx/templates/ssl.tmpl

और हम इसमें अंतिम दो पंक्तियों को बदल देते हैं।

एसएसएल प्रमाणपत्र बदलना

हम फ़ाइल में पथों को उन पथों में बदलते हैं जो प्रमाणपत्र प्राप्त करते समय सिस्टम ने हमें बताए थे।

SSL प्रमाणपत्र बदलना

और NGINX को पुनरारंभ करें।

# सेवा nginx पुनरारंभ करें

अब आइए iRedAdmin में दोबारा लॉग इन करने का प्रयास करें।

एसएसएल प्रमाणपत्र का सत्यापन

अब कोई प्रमाणपत्र त्रुटि नहीं है. प्रमाणपत्र वैध है. आप लॉक पर क्लिक करके उसके गुण देख सकते हैं। जब प्रमाणपत्र समाप्त हो जाता है, तो certboot को इसे स्वचालित रूप से नवीनीकृत करना चाहिए।

अब हम Dovecot और Postfix प्रमाणपत्र के बारे में रिपोर्ट करेंगे। ऐसा करने के लिए, हम दो कॉन्फ़िगरेशन फ़ाइलों को संपादित करेंगे। क र ते हैं:

# नैनो /etc/dovecot/dovecot.conf

ब्लॉक ढूँढना:

#एसएसएल: वैश्विक सेटिंग्स।

और हम वहां पंजीकृत प्रमाणपत्र को अपने में बदल लेते हैं।

डवकोट के लिए प्रतिस्थापन प्रमाणपत्र

"ssl_protocols" लाइन पर भी ध्यान दें। इसका मान "!SSLv3" होना चाहिए, अन्यथा Dovecot को पुनरारंभ करते समय आपको "चेतावनी: SSLv2 OpenSSL द्वारा समर्थित नहीं है। कृपया इसे ssl_protocols से हटाने पर विचार करें" त्रुटि प्राप्त होगी।

# नैनो /etc/postfix/main.cf

ब्लॉक ढूँढना:

# एसएसएल कुंजी, प्रमाणपत्र, सीए

और हम इसमें अपने प्रमाणपत्र की फ़ाइलों के पथ पर पथ बदलते हैं।

पोस्टफ़िक्स के लिए प्रमाणपत्र बदलना

इससे प्रमाणपत्र की स्थापना पूरी हो जाती है. Dovecot और Postfix को पुनरारंभ करना आवश्यक है, लेकिन सर्वर को पुनरारंभ करना बेहतर है।

# सेवा dovecot पुनरारंभ करें

# रिबूट

PHPMyAdmin इंस्टॉल कर रहा हूँ

यह चरण वैकल्पिक है, लेकिन मैं डेटाबेस के साथ काम करने में आसानी के लिए इसे करने और PHPMyAdmin इंस्टॉल करने की सलाह देता हूं।

# उपयुक्त phpmyadmin स्थापित करें

इंस्टॉलर पूछेगा कि किस वेब सर्वर के साथ काम करने के लिए PHPMyAdmin को कॉन्फ़िगर करना है, क्योंकि NGINX इस सूची में नहीं है, बस TAB दबाएं और आगे बढ़ें।

PHPMyAdmin इंस्टॉल कर रहा हूँ

इंस्टॉलेशन पूरा होने के बाद, phpmyadmin को काम करने के लिए, आपको उस निर्देशिका के लिए एक सिम्लिंक बनाना होगा जिसके साथ NGINX डिफ़ॉल्ट रूप से काम करता है।

# ln -s /usr/share/phpmyadmin /var/www/html

और हम https://domain/phpmyadmin/ पर जाने का प्रयास करते हैं

PHPMyAdmin चल रहा है. कनेक्शन एक प्रमाणपत्र द्वारा सुरक्षित है, कोई त्रुटि नहीं है। आगे बढ़ो। आइए एक MySQL डेटाबेस एडमिनिस्ट्रेटर (MariaDB) बनाएं।

# माई एसक्यूएल

और हम MariaDB प्रबंधन कंसोल पर पहुँचते हैं। इसके बाद, हम एक-एक करके कमांड चलाते हैं:

मारियाडीबी > "पासवर्ड" द्वारा पहचाना गया उपयोगकर्ता "एडमिन"@"लोकलहोस्ट" बनाएं;
MariaDB > अनुदान विकल्प के साथ "admin"@"localhost" को *.* पर सभी विशेषाधिकार प्रदान करें;
मारियाडीबी > फ्लश विशेषाधिकार;

एक MySQL उपयोगकर्ता बनाना

सब कुछ ठीक है, लॉगिन पूरा हो गया है। PHPMyAdmin जाने के लिए तैयार है.

पोस्टफ़िक्सएडमिन स्थापित करना

सिद्धांत रूप में, PHPMyAdmin की तरह PostfixAdmin को स्थापित करने की आवश्यकता नहीं है। मेल सर्वर इन घटकों के बिना ठीक काम करेगा। लेकिन तब आप मेल उपनाम नहीं बना पाएंगे. यदि आपको इसकी आवश्यकता नहीं है, तो आप सुरक्षित रूप से इन अनुभागों को छोड़ सकते हैं। यदि आपको अभी भी उपनामों की आवश्यकता है, तो आपके पास दो विकल्प हैं: iReaAdmin का भुगतान किया गया संस्करण खरीदना या PostfixAdmin इंस्टॉल करना। बेशक, आप अतिरिक्त सॉफ़्टवेयर के बिना, डेटाबेस में उपनामों को मैन्युअल रूप से पंजीकृत करके ऐसा कर सकते हैं, लेकिन यह हमेशा सुविधाजनक नहीं होता है और सभी के लिए उपयुक्त नहीं है। मैं PostfixAdmin का उपयोग करने की अनुशंसा करता हूं; अब हम iRedMail के साथ इसकी स्थापना और एकीकरण को देखेंगे। आइए इंस्टालेशन शुरू करें:

# उपयुक्त पोस्टफिक्सएडमिन इंस्टॉल करें

हम सहमत हैं और प्रोग्राम के सिस्टम डेटाबेस के लिए एक पासवर्ड बनाते हैं।

पोस्टफ़िक्सएडमिन स्थापित करना

पोस्टफ़िक्सएडमिन स्थापित करना

हम PHPMyAdmin इंस्टॉल करने की तरह ही एक सिम्लिंक बनाते हैं।

# ln -s /usr/share/postfixadmin /var/www/html

हम उस उपयोगकर्ता को निर्देशिका का स्वामी बनाते हैं जिसकी ओर से वेब सर्वर लॉन्च किया गया है। हमारे मामले में, NGINX को www-डेटा उपयोगकर्ता के रूप में लॉन्च किया गया है।

# chown -R www-data /usr/share/postfixadmin

अब हमें PostfixAdmin कॉन्फ़िगरेशन फ़ाइल को संपादित करने और iRedAdmin द्वारा उपयोग किए जाने वाले डेटाबेस के बारे में जानकारी जोड़ने की आवश्यकता है। डिफ़ॉल्ट रूप से इस डेटाबेस को vmail कहा जाता है। यदि आप PHPMyAdmin पर जाएं तो आप इसे वहां देख सकते हैं। और इसलिए, PostfixAdmin को डेटाबेस में परिवर्तन करने में सक्षम बनाने के लिए, हम इसे PostfixAdmin कॉन्फ़िगरेशन में पंजीकृत करते हैं।

# नैनो /etc/postfixadmin/config.inc.php

हमें पंक्तियाँ मिलती हैं:

$CONF["डेटाबेस_प्रकार"] = $dbtype;
$CONF["डेटाबेस_होस्ट"] = $dbserver;
$CONF["database_user"] = $dbuser;
$CONF["डेटाबेस_पासवर्ड"] = $dbpass;
$CONF["डेटाबेस_नाम"] = $dbname;

और आइए इसे ध्यान में रखें:

$CONF["database_type"] = "mysqli"; # डेटाबेस प्रकार
$CONF["डेटाबेस_होस्ट"] = "लोकलहोस्ट"; # डेटाबेस सर्वर होस्ट
$CONF["डेटाबेस_यूजर"] = "एडमिन"; # वीमेल डेटाबेस पर लिखने के अधिकार के साथ लॉगिन करें। आप पहले से बनाए गए एडमिन का उपयोग कर सकते हैं
$CONF["डेटाबेस_पासवर्ड"] = "पासवर्ड"; # ऊपर निर्दिष्ट उपयोगकर्ता के लिए पासवर्ड
$CONF["डेटाबेस_नाम"] = "vmail"; # डेटाबेस का नाम iRedMail

डेटाबेस के बारे में जानकारी दर्ज करना

यदि आप SOGo वेब मेल क्लाइंट का उपयोग करने की योजना बना रहे हैं, तो आपको एक और अतिरिक्त कदम उठाने की आवश्यकता है, अर्थात् $CONF["encrypt"] आइटम में PostfixAdmin एन्क्रिप्शन को "md5crypt" से "dovecot:SHA512-CRYPT" में बदलें। यदि आप ऐसा नहीं करते हैं, तो जब आप PostfixAdmin में बनाए गए उपयोगकर्ता के साथ SOGo में लॉग इन करने का प्रयास करेंगे, तो आपको एक त्रुटि प्राप्त होगी: गलत लॉगिन या पासवर्ड।

एन्क्रिप्शन प्रकार बदलना

अब, इंस्टॉलेशन को सफलतापूर्वक पूरा करने और त्रुटियां प्राप्त न करने के लिए, आपको डेटाबेस में एक क्वेरी निष्पादित करनी होगी। PHPMyAdmin के माध्यम से ऐसा करना सुविधाजनक है। Vmail डेटाबेस चुनें और SQL टैब पर जाएँ। विंडो में हम प्रवेश करते हैं:

मेलबॉक्स पर ड्रॉप इंडेक्स डोमेन;
उपनाम पर ड्रॉप इंडेक्स डोमेन;
परिवर्तन तालिका उपनाम कॉलम जोड़ें `गोटो` टेक्स्ट शून्य नहीं;

डेटाबेस क्वेरी

और "फॉरवर्ड" पर क्लिक करें। अब हम पूरी तरह तैयार हैं, हम PostfixAdmin वेब इंटरफ़ेस पर जा सकते हैं और इंस्टॉलेशन पूरा कर सकते हैं। ऐसा करने के लिए, आपको अपने ब्राउज़र में टाइप करना होगा: https://domain/postfixadmin/setup.php.

निम्नलिखित दिखना चाहिए:

पोस्टफ़िक्सएडमिन स्थापित करना

यदि सब कुछ निर्देशों के अनुसार किया जाता है, तो कोई त्रुटि नहीं होनी चाहिए। यदि कोई हैं, तो उन्हें समाप्त किया जाना चाहिए, अन्यथा सिस्टम आपको जारी रखने की अनुमति नहीं देगा। इंस्टॉलेशन पासवर्ड सेट करें और "जनरेट पासवर्ड हैश" पर क्लिक करें। सिस्टम एक पासवर्ड हैश उत्पन्न करेगा, जिसे $CONF["setup_password"] पैरामीटर में डाला जाना चाहिए।

PostfixAdmin की स्थापना पूर्ण करना

कॉन्फ़िगरेशन फ़ाइल सेटिंग बदलना

अब नया बनाया गया पासवर्ड डालें और PostfixAdmin एडमिनिस्ट्रेटर बनाएं। पोस्टमास्टर लॉगिन के साथ व्यवस्थापक न बनाना बेहतर है, क्योंकि iRedAdmin व्यवस्थापन पैनल में लॉग इन करने में समस्याएँ हो सकती हैं।

एक पोस्टफ़िक्सएडमिन प्रशासक बनाना

बस, एडमिनिस्ट्रेटर बना दिया गया है. आप साइन इन कर सकते हैं.

कृपया ध्यान दें कि सुरक्षा के दृष्टिकोण से, पोस्टफ़िक्सएडमिन निर्देशिका में setup.php फ़ाइल का नाम बदलना या हटाना बेहतर है।

यहां जाएं: https://domain/postfixadmin/ और नए बनाए गए क्रेडेंशियल दर्ज करें। PostfixAdmin के साथ-साथ iRedAdmin में भी रूसी भाषा उपलब्ध है। आप इसे प्राधिकरण के दौरान चुन सकते हैं.

हम एक उपयोगकर्ता मेलबॉक्स बनाने का प्रयास कर रहे हैं।

iRedMail मॉड्यूल को सक्षम/अक्षम करना

iRedAPD iRedMail मॉड्यूल के प्रबंधन के लिए जिम्मेदार है। इसमें एक कॉन्फ़िगरेशन फ़ाइल है जिसमें कार्यशील मॉड्यूल पंजीकृत हैं। यदि आपको किसी विशेष मॉड्यूल की आवश्यकता नहीं है, तो आप इसे कॉन्फ़िगरेशन फ़ाइल से हटा सकते हैं और यह काम करना बंद कर देगा। क र ते हैं:

# नैनो /opt/iredapd/settings.py

लाइन "प्लगइन्स" ढूंढें और उन घटकों को हटा दें जिनकी आपको आवश्यकता नहीं है। मैं "ग्रेलिस्टिंग" घटक को हटा दूंगा। बेशक, यह स्पैम से काफी प्रभावी ढंग से बचाता है, लेकिन आवश्यक पत्र अक्सर नहीं आते हैं।

ग्रेलिस्ट एक स्वचालित स्पैम सुरक्षा तकनीक है जो मेल प्रेषक के सर्वर के व्यवहार के विश्लेषण पर आधारित है। जब "ग्रेलिस्टिंग" सक्षम किया जाता है, तो सर्वर पहली बार किसी अज्ञात पते से एक पत्र स्वीकार करने से इनकार कर देता है, एक अस्थायी त्रुटि की रिपोर्ट करता है। इस स्थिति में, भेजने वाले सर्वर को बाद में भेजना दोहराना होगा। स्पैमर प्रोग्राम आमतौर पर ऐसा नहीं करते हैं. यदि पत्र दोबारा भेजा जाता है, तो उसे 30 दिनों के लिए सूची में जोड़ा जाता है और मेल का आदान-प्रदान पहली बार होता है। स्वयं निर्णय लें कि इस मॉड्यूल का उपयोग करना है या नहीं।

मेल मॉड्यूल को सक्षम/अक्षम करना

परिवर्तन करने के बाद, आपको iRedAPD को पुनरारंभ करना होगा।

# सेवा iredapd पुनरारंभ करें

मेल सर्वर का परीक्षण

यह iRedMail मेल सर्वर का कॉन्फ़िगरेशन पूरा करता है। आप अंतिम चरण - परीक्षण के लिए आगे बढ़ सकते हैं। आइए दो बनाएं मेलबॉक्स. एक को iRedAdmin के माध्यम से जांचना, दूसरे को PostfixAdmin के माध्यम से जांचना और एक मेलबॉक्स से दूसरे मेलबॉक्स में एक पत्र भेजना और इसके विपरीत। iRedAdmin में हम एक मेलबॉक्स [email protected] बनाएंगे। PostfixAdmin में - [email protected]

iRedAdmin में एक उपयोगकर्ता बनाना

PostfixAdmin में एक उपयोगकर्ता बनाना

हम जांचते हैं कि उपयोगकर्ता बनाए गए हैं।

यदि आप PostfixAdmin मेलबॉक्स की सूची में "To" कॉलम पर ध्यान देते हैं, तो आप iRedAdmin और PostfixAdmin में बनाए गए मेलबॉक्स के बीच अंतर देखेंगे। iRedAdmin में बनाए गए मेलबॉक्स को "केवल अग्रेषित करें" के रूप में चिह्नित किया जाता है, और PostfixAdmin में बनाए गए मेलबॉक्स को "मेलबॉक्स" के रूप में चिह्नित किया जाता है। पहले तो मैं बहुत देर तक समझ नहीं पाया कि ऐसा क्यों हो रहा है और इनमें क्या अंतर है और आख़िरकार मैंने एक चीज़ पर ध्यान दिया। iRedAdmin में मेलबॉक्स उपनामों के बिना बनाए जाते हैं, और PostfixAdmin में मेलबॉक्स स्वयं किसी उपनाम के साथ बनाए जाते हैं।

और यदि ये उपनाम हटा दिए जाते हैं, तो मेलबॉक्स iRedAdmin में बनाए गए उपनामों के रूप में प्रदर्शित किए जाएंगे "केवल अग्रेषित करें"।

उपनाम हटाना

उपनाम हटा दिए गए हैं. पोस्टफ़िक्सएडमिन की जाँच हो रही है।

जैसा कि आप देख सकते हैं, सभी बॉक्स "केवल अग्रेषित करें" बन गए हैं। उसी तरह, यदि आप iRedAdmin में बनाए गए मेलबॉक्स में अपने लिए एक उपनाम बनाते हैं, तो यह "मेलबॉक्स" बन जाएगा। सिद्धांत रूप में, यह किसी भी तरह से मेल के प्रदर्शन को प्रभावित नहीं करता है। एकमात्र बात यह है कि आप PostfixAdmin में बनाए गए मेलबॉक्स पर उपनाम नहीं बना पाएंगे। उपनाम बनाने के बजाय, आपको मौजूदा उपनाम को संपादित करना होगा। उपनामों की बात करें तो, में नया संस्करण iRedMail को उपनामों को संभालने वाले पोस्टफ़िक्स मानचित्रों में से एक में बदलाव करने की आवश्यकता है। और यदि आप ऐसा नहीं करते हैं, तो बनाए गए उपनाम काम नहीं करेंगे। ऐसा करने के लिए, आपको /etc/postfix/mysql/virtual_alias_maps.cf फ़ाइल में निम्नलिखित को ठीक करना होगा:

क र ते हैं:

# नैनो /etc/postfix/mysql/virtual_alias_maps.cf

और हम इसे ठीक करते हैं.

उपनाम स्थापित करना

पोस्टफ़िक्स पुनः आरंभ करें:

# सेवा पोस्टफ़िक्स पुनरारंभ करें

इसके बाद सब कुछ काम करना चाहिए.

और इसलिए, आइए मेल जांचना शुरू करें। हम राउंडक्यूब के माध्यम से यूजर1 मेलबॉक्स में और SOGo के माध्यम से यूजर2 मेलबॉक्स में लॉग इन करेंगे और यूजर1 मेलबॉक्स से यूजर2 और वापस एक पत्र भेजेंगे।

राउंडक्यूब के साथ एक ईमेल भेजना

SOGo में एक पत्र प्राप्त हो रहा है

SOGo को एक ईमेल भेजा जा रहा है

राउंडक्यूब में एक पत्र प्राप्त हो रहा है

सब कुछ बिना किसी समस्या के काम करता है। पत्र की डिलीवरी में दो से पांच सेकंड का समय लगता है। उसी तरह, पत्र यांडेक्स और mail.ru सर्वर (परीक्षण) पर पूरी तरह से वितरित किए जाते हैं।

आइए अब उपनामों की जाँच करें। आइए एक यूजर3 मेलबॉक्स बनाएं और यूजर1 मेलबॉक्स से यूजर2 मेलबॉक्स में एक उपनाम बनाएं। और हम user3 मेलबॉक्स से user1 मेलबॉक्स पर एक पत्र भेजेंगे। इस स्थिति में, पत्र उपयोगकर्ता2 के मेलबॉक्स पर पहुंचना चाहिए।

उपनाम बनाना

उपयोगकर्ता3 मेलबॉक्स से उपयोगकर्ता1 मेलबॉक्स पर एक पत्र भेजना

उपयोगकर्ता2 के मेलबॉक्स पर एक पत्र प्राप्त हो रहा है

उपनामों का काम भी ठीक है.

आइए स्थानीय माध्यम से मेल सर्वर के संचालन का परीक्षण करें मेल क्लाइंट. उदाहरण के लिए, मोज़िला थंडरबर्ड पर विचार करें। आइए दो और उपयोगकर्ता बनाएं: क्लाइंट1 और क्लाइंट2। हम एक मेलबॉक्स को IMAP के माध्यम से, दूसरे को POP3 के माध्यम से कनेक्ट करेंगे और एक मेलबॉक्स से दूसरे मेलबॉक्स में एक पत्र भेजेंगे।

आईएमएपी कनेक्शन

POP3 के माध्यम से कनेक्शन

हम ग्राहक 1 से ग्राहक 2 को एक पत्र भेजते हैं।

क्लाइंट से भेजा जा रहा है 1

ग्राहक 2 पर रसीद

और उल्टे क्रम में.

क्लाइंट से भेजा जा रहा है 2

ग्राहक पर रसीद 1

सब कुछ काम कर रहा है.

यदि आप पते पर जाते हैं: https://domain/netdata, तो आप सिस्टम स्थिति के ग्राफ़ देख सकते हैं।

निष्कर्ष

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

पी.एस. 1 जीबी रैम (उबंटू, डेबियन, सेंटओएस) के साथ विभिन्न ऑपरेटिंग सिस्टम पर इस उत्पाद का परीक्षण करते समय, यह पता चला कि क्लैमएवी के काम करने के लिए 1 जीबी पर्याप्त नहीं है। लगभग सभी मामलों में, 1 जीबी मेमोरी का उपयोग करते समय, एंटीवायरस ने डेटाबेस से संबंधित त्रुटि का हवाला दिया। उसी समय, डेबियन और उबंटू ऑपरेटिंग सिस्टम पर, एंटीवायरस ने सर्वर से गुजरने वाले मेल को स्कैन नहीं किया, अन्यथा सब कुछ ठीक रहा। CentOS पर स्थिति थोड़ी अलग थी। क्लैमड सेवा ने सिस्टम को पूरी तरह से क्रैश कर दिया, जिससे सामान्य सर्वर संचालन असंभव हो गया। वेब इंटरफेस में लॉग इन करने का प्रयास करते समय, एनजीआईएनएक्स समय-समय पर 502 और 504 त्रुटियां उत्पन्न करता है। हर बार मेल भी भेजा जाता था. इसके अलावा, यदि हम 2 जीबी तक रैम जोड़ते हैं, तो सभी मामलों में एंटीवायरस और सर्वर के संचालन में कोई समस्या नहीं थी। क्लैमएवी ने मेल सर्वर से गुजरने वाले मेल को स्कैन किया, जिसके बारे में उसने लॉग में लिखा था। अनुलग्नक के रूप में वायरस भेजने का प्रयास करते समय, डिलीवरी अवरुद्ध हो गई थी। मेमोरी खपत लगभग 1.2 - 1.7 जीबी थी।

Nginx एक छोटा, बहुत तेज़, काफी कार्यात्मक वेब सर्वर और मेल प्रॉक्सी सर्वर है, जिसे इगोर सियोसेव (rambler.ru) द्वारा विकसित किया गया है। सिस्टम संसाधनों की बहुत कम खपत और ऑपरेटिंग गति के साथ-साथ कॉन्फ़िगरेशन लचीलेपन के कारण, web Nginx सर्वरअक्सर अधिक हैवीवेट सर्वरों के फ्रंटएंड के रूप में उपयोग किया जाता है, जैसे अमरीका की एक मूल जनजाति, उच्च भार वाली परियोजनाओं में। क्लासिक विकल्प संयोजन है, नगनेक्स - अपाचे - फास्टसीजीआई। ऐसी योजना में काम करना, Nginx सर्वर, HTTP के माध्यम से आने वाले सभी अनुरोधों को स्वीकार करता है, और कॉन्फ़िगरेशन और स्वयं अनुरोध के आधार पर, यह निर्णय लेता है कि अनुरोध को स्वयं संसाधित करना है और क्लाइंट को तैयार प्रतिक्रिया देना है या प्रसंस्करण के लिए बैकएंड में से किसी एक को अनुरोध भेजना है ( अमरीका की एक मूल जनजातिया फास्टसीजीआई).

जैसा कि आप जानते हैं, अपाचे सर्वर प्रत्येक अनुरोध को एक अलग प्रक्रिया (थ्रेड) में संसाधित करता है, जो, यह कहा जाना चाहिए, सिस्टम संसाधनों की काफी कम मात्रा का उपभोग करता है, यदि 10-20 ऐसी प्रक्रियाएं हैं, तो यह बकवास है, और यदि हैं 100-500 या इससे ज्यादा, सिस्टम मजेदार नहीं रह जाता.

आइए एक ऐसी ही स्थिति की कल्पना करने का प्रयास करें। मान लीजिये अमरीका की एक मूल जनजाति 300 आता है HTTP अनुरोधग्राहकों से, 150 ग्राहक तेज़ लीज़्ड लाइनों पर हैं, और अन्य 150 अपेक्षाकृत धीमे इंटरनेट चैनलों पर हैं, भले ही मॉडेम पर न हों। इस स्थिति में क्या हो रहा है? और निम्नलिखित होता है: अपाचे वेब सर्वर, इन 300 कनेक्शनों को संसाधित करने के लिए, प्रत्येक के लिए एक प्रक्रिया (थ्रेड) बनाता है, यह जल्दी से सामग्री उत्पन्न करेगा, और 150 तेज़ क्लाइंट तुरंत उनके अनुरोधों का परिणाम लेंगे, जो प्रक्रियाएं उन्हें सेवा दे रही हैं मारे जाएंगे और संसाधन जारी किए जाएंगे, और 150 धीमे हैं, और संकीर्ण इंटरनेट चैनल के कारण उनके अनुरोधों के परिणाम धीरे-धीरे प्राप्त होंगे, जिसके परिणामस्वरूप सिस्टम में 150 प्रक्रियाएं लटक जाएंगी अमरीका की एक मूल जनजाति, वेब सर्वर द्वारा उत्पन्न सामग्री को लेने के लिए ग्राहकों की प्रतीक्षा करना, बहुत सारे सिस्टम संसाधनों का उपभोग करना। स्वाभाविक रूप से, स्थिति काल्पनिक है, लेकिन मुझे लगता है कि सार स्पष्ट है। बंडल ऊपर वर्णित स्थिति को ठीक करने में मदद करता है। क्लाइंट की पूरी रिक्वेस्ट पढ़ने के बाद वह उसे प्रोसेसिंग के लिए सबमिट करता है अमरीका की एक मूल जनजाति, जो बदले में सामग्री उत्पन्न करता है और Nginx को जितनी जल्दी हो सके तैयार प्रतिक्रिया देता है, जिसके बाद यह स्पष्ट विवेक के साथ प्रक्रिया को समाप्त कर सकता है और अपने कब्जे वाले सिस्टम संसाधनों को मुक्त कर सकता है। Nginx वेब सर्वर, से अनुरोध परिणाम प्राप्त कर रहा है अमरीका की एक मूल जनजाति, इसे एक बफर या यहां तक ​​कि डिस्क पर एक फ़ाइल में लिखता है और इसे धीमे ग्राहकों को जब तक चाहें तब तक दे सकता है, जबकि इसकी कार्य प्रक्रियाएं इतने कम संसाधनों का उपभोग करती हैं कि .. "इसके बारे में बात करना और भी मजेदार है" ©। :) यह योजना सिस्टम संसाधनों को महत्वपूर्ण रूप से बचाती है, मैं दोहराता हूं, लेकिन Nginx कार्यकर्ता प्रक्रियाएं बहुत कम मात्रा में संसाधनों का उपभोग करती हैं, यह बड़ी परियोजनाओं के लिए विशेष रूप से सच है।

और यह Nginx सर्वर जो कर सकता है उसका केवल एक छोटा सा हिस्सा है; डेटा कैशिंग और इसके साथ काम करने की क्षमताओं के बारे में मत भूलना memcached. मैं मुख्य की एक सूची दूंगा कार्यक्षमता Nginx वेब सर्वर।

HTTP सर्वर के रूप में Nginx सर्वर कार्यक्षमता
  • इलाज स्थिर सामग्री, इंडेक्स फ़ाइलें, निर्देशिका सूची, ओपन फ़ाइल डिस्क्रिप्टर कैश;
  • कैशिंग, भार वितरण और दोष सहनशीलता के साथ त्वरित प्रॉक्सीइंग;
  • त्वरित समर्थन फास्टसीजीआईकैशिंग, लोड वितरण और दोष सहनशीलता वाले सर्वर;
  • मॉड्यूलर संरचना, विभिन्न फिल्टर के लिए समर्थन (एसएसआई, एक्सएसएलटी, जीजेआईपी, रिज्यूमिंग, खंडित प्रतिक्रियाएं);
  • एसएसएल और टीएलएस एसएनआई एक्सटेंशन के लिए समर्थन;
  • आईपी ​​​​आधारितया नाम के आधार परवर्चुअल सर्वर;
  • KeepAlive और पाइपलाइन कनेक्शन के साथ कार्य करना;
  • किसी भी टाइमआउट के साथ-साथ बफ़र्स की संख्या और आकार को स्तर पर कॉन्फ़िगर करने की क्षमता अपाचे सर्वर;
  • ग्राहक के पते के आधार पर विभिन्न कार्य करना;
  • नियमित अभिव्यक्तियों का उपयोग करके यूआरआई बदलना;
  • 4xx और 5xx के लिए विशेष त्रुटि पृष्ठ;
  • ग्राहक के पते या पासवर्ड के आधार पर पहुंच प्रतिबंधित करना;
  • लॉग फ़ाइल स्वरूप सेट करना, लॉग घुमाना;
  • ग्राहक को प्रतिक्रिया की गति सीमित करना;
  • एक साथ कनेक्शन और अनुरोधों की संख्या सीमित करना;
  • पुट, डिलीट, एमकेसीओएल, कॉपी और मूव तरीकों का समर्थन करता है;
  • काम बंद किए बिना सेटिंग्स बदलना और सर्वर को अपडेट करना;
  • में निर्मित पर्ल;
मेल प्रॉक्सी सर्वर के रूप में Nginx सर्वर की कार्यक्षमता
  • बाहरी HTTP प्रमाणीकरण सर्वर का उपयोग करके IMAP/POP3 बैकएंड पर अग्रेषित करना;
  • बाहरी पर उपयोगकर्ता एसएमटीपी की जाँच करना HTTP सर्वरप्रमाणीकरण और आंतरिक एसएमटीपी सर्वर को अग्रेषित करना;
  • निम्नलिखित प्रमाणीकरण विधियों का समर्थन करता है:
    • POP3 - उपयोगकर्ता/पास, APOP, प्रामाणिक लॉगिन/सादा/CRAM-MD5;
    • IMAP - लॉगिन, प्रामाणिक लॉगिन/सादा/CRAM-MD5;
    • एसएमटीपी - ऑथ लॉगी/प्लेन/सीआरएएम-एमडी5;
  • एसएसएल समर्थन;
  • STARTTLS और STLS समर्थन;
Nginx वेब सर्वर द्वारा समर्थित ऑपरेटिंग सिस्टम और प्लेटफ़ॉर्म
  • फ्रीबीएसडी, 3 से 8 तक - प्लेटफॉर्म, आई386 और एएमडी64;
  • लिनक्स, 2.2 से 2.6 तक - i386 प्लेटफार्म; लिनक्स 2.6 - एएमडी64;
  • सोलारिस 9 - i386 और sun4u प्लेटफार्म; सोलारिस 10 - i386, amd64 और sun4v प्लेटफार्म;
  • मैकओएस एक्स प्लेटफॉर्म पीपीसी, आई386;
  • विन्डोज़ एक्सपी, विंडोज़ सर्वर 2003; (वर्तमान में बीटा परीक्षण में)
Nginx सर्वर आर्किटेक्चर और स्केलेबिलिटी
  • मुख्य (मास्टर) प्रक्रिया, कई (कॉन्फ़िगरेशन फ़ाइल में कॉन्फ़िगर की गई) कार्यकर्ता प्रक्रियाएँ एक अप्रकाशित उपयोगकर्ता के तहत चल रही हैं;
  • निम्नलिखित कनेक्शन प्रसंस्करण विधियों के लिए समर्थन:
    • चयन एक मानक विधि है. यदि किसी दिए गए प्लेटफ़ॉर्म पर कोई अधिक कुशल विधि नहीं मिलती है तो संबंधित Nginx मॉड्यूल स्वचालित रूप से बनाया जाता है। आप --with-select_module या --without-select_module कॉन्फ़िगरेशन विकल्पों का उपयोग करके किसी दिए गए मॉड्यूल के निर्माण को सक्षम या अक्षम करने के लिए बाध्य कर सकते हैं।
    • मतदान मानक विधि है. यदि किसी दिए गए प्लेटफ़ॉर्म पर कोई अधिक कुशल विधि नहीं मिलती है तो संबंधित Nginx मॉड्यूल स्वचालित रूप से बनाया जाता है। आप --with-poll_module या --without-poll_module कॉन्फ़िगरेशन विकल्पों का उपयोग करके किसी दिए गए मॉड्यूल के निर्माण को सक्षम या अक्षम करने के लिए बाध्य कर सकते हैं।
    • क्यूक्यू - प्रभावी तरीका, FreeBSD 4.1+, OpenBSD 2.9+, NetBSD 2.0 और MacOS
    • epoll Linux 2.6+ में उपयोग की जाने वाली एक कुशल विधि है। कुछ वितरण, जैसे SuSE 8.2, में 2.4 कर्नेल में ईपोल का समर्थन करने के लिए पैच हैं।
    • rtsig - वास्तविक समय सिग्नल, Linux 2.2.19+ में उपयोग की जाने वाली एक कुशल विधि। डिफ़ॉल्ट रूप से, पूरे सिस्टम के लिए कतार में 1024 से अधिक सिग्नल नहीं हो सकते। यह उच्च लोड वाले सर्वर के लिए पर्याप्त नहीं है; /proc/sys/kernel/rtsig-max कर्नेल पैरामीटर का उपयोग करके कतार का आकार बढ़ाने की आवश्यकता है। हालाँकि, Linux 2.6.6-mm2 के रूप में, यह विकल्प अब उपलब्ध नहीं है, इसके बजाय प्रत्येक प्रक्रिया में एक अलग सिग्नल कतार होती है, जिसका आकार RLIMIT_SIGPENDING का उपयोग करके निर्धारित किया जाता है।
    • जब कतार पूरी हो जाए, nginx सर्वरइसे रीसेट करता है और स्थिति सामान्य होने तक पोल विधि का उपयोग करके कनेक्शन संसाधित करता है।
    • /dev/poll एक प्रभावी तरीका है, जो सोलारिस 7 11/99+, HP/UX 11.22+ (इवेंटपोर्ट), IRIX 6.5.15+ और Tru64 UNIX 5.1A+ ऑपरेटिंग सिस्टम पर समर्थित है।
    • इवेंटपोर्ट - इवेंट पोर्ट, सोलारिस 10 में उपयोग की जाने वाली एक प्रभावी विधि। उपयोग करने से पहले, आपको कर्नेल पैनिक से बचने के लिए एक पैच स्थापित करना होगा।
  • EV_CLEAR, EV_DISABLE (किसी ईवेंट को अस्थायी रूप से अक्षम करने के लिए), NOTE_LOWAT, EV_EOF, उपलब्ध डेटा की संख्या, त्रुटि कोड जैसी kqueue विधि क्षमताओं का उपयोग करना;
  • सेंडफाइल (फ्रीबीएसडी 3.1+, लिनक्स 2.2.+, मैक ओएस एक्स 10.5+), सेंडफाइल64 (लिनक्स 2.4.21+) और सेंडफाइलव (सोलारिस 8 7/01+) के साथ काम करता है;
  • स्वीकार फ़िल्टर (FreeBSD 4.1+) और TCP_DEFER_ACCEPT (लिनक्स 2.4+) के लिए समर्थन;
  • 10,000 निष्क्रिय HTTP कीप-अलाइव कनेक्शन लगभग 2.5M मेमोरी की खपत करते हैं;
  • डेटा प्रतिलिपि संचालन की न्यूनतम संख्या;

एनजीआईएनएक्स का उपयोग न केवल वेब सर्वर या http-प्रॉक्सी के रूप में किया जा सकता है, बल्कि एसएमटीपी, आईएमएपी, पीओपी3 प्रोटोकॉल के माध्यम से मेल को प्रॉक्सी करने के लिए भी किया जा सकता है। यह आपको कॉन्फ़िगर करने की अनुमति देगा:

  • स्केलेबल ईमेल सिस्टम के लिए एकल प्रवेश बिंदु।
  • सभी मेल सर्वरों के बीच लोड संतुलन।

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

संचालन का सिद्धांत

एनजीआईएनएक्स अनुरोध स्वीकार करता है और वेब सर्वर को प्रमाणित करता है। लॉगिन और पासवर्ड सत्यापन के परिणाम के आधार पर, प्रॉक्सी कई हेडर के साथ एक प्रतिक्रिया लौटाएगा।

सफलता की स्थिति में:

इस प्रकार, हम प्रमाणीकरण के आधार पर मेल सर्वर के सर्वर और पोर्ट का निर्धारण करते हैं। यह प्रोग्रामिंग भाषाओं के उचित ज्ञान के साथ कई अवसर प्रदान करता है।

विफलता के मामले में:

प्रमाणीकरण परिणाम और हेडर के आधार पर, क्लाइंट को उस मेल सर्वर पर रीडायरेक्ट किया जाता है जिसकी हमें आवश्यकता होती है।

सर्वर तैयार किया जा रहा है

आइए सर्वर सुरक्षा सेटिंग्स में कुछ बदलाव करें।

SELinux

यदि हम CentOS का उपयोग करते हैं या यदि हम उपयोग करते हैं तो SELinux को अक्षम करें यह प्रणालीउबंटू पर सुरक्षा:

vi /etc/selinux/config

SELINUX=अक्षम

फ़ायरवॉल

यदि हम फ़ायरवॉल का उपयोग करते हैं (CentOS पर डिफ़ॉल्ट):

फ़ायरवॉल-cmd --स्थायी --ऐड-पोर्ट=25/tcp --ऐड-पोर्ट=110/tcp --ऐड-पोर्ट=143/tcp

फ़ायरवॉल-cmd--पुनः लोड करें

यदि हम iptables का उपयोग करते हैं (उबंटू में डिफ़ॉल्ट):

आईपीटेबल्स -ए इनपुट -पी टीसीपी --डीपोर्ट 25 -जे स्वीकार करें

आईपीटेबल्स -ए इनपुट -पी टीसीपी --डीपोर्ट 110 -जे स्वीकार करें

आईपीटेबल्स -ए इनपुट -पी टीसीपी --डीपोर्ट 143 -जे स्वीकार करें

उपयुक्त-आईपीटेबल्स-परसिस्टेंट स्थापित करें

iptables-save > /etc/iptables/rules.v4

* इस उदाहरण में हमने SMTP (25), POP3 (110), IMAP (143) की अनुमति दी है।

एनजीआईएनएक्स स्थापित करना

निर्भर करना ऑपरेटिंग सिस्टम NGINX इंस्टालेशन थोड़ा अलग है.

या लिनक्स सेंटोस:

यम nginx इंस्टॉल करें

या लिनक्स उबंटू:

उपयुक्त nginx स्थापित करें

हम सेवा के ऑटोस्टार्ट की अनुमति देते हैं और इसे शुरू करते हैं:

systemctl nginx सक्षम करें

systemctl प्रारंभ nginx

यदि एनजीआईएनएक्स पहले से ही सिस्टम पर स्थापित है, तो जांचें कि यह किन मॉड्यूल के साथ काम करता है:

हमें उन विकल्पों की एक सूची प्राप्त होगी जिनके साथ वेब सर्वर बनाया गया है - उनमें से हमें --with-mail देखना चाहिए। यदि आवश्यक मॉड्यूल नहीं है, तो आपको nginx को अपडेट करना होगा

एनजीआईएनएक्स की स्थापना

Nginx कॉन्फ़िगरेशन फ़ाइल खोलें और मेल विकल्प जोड़ें:

vi /etc/nginx/nginx.conf

मेल (

auth_http लोकलहोस्ट:80/auth.php;

सर्वर (
सुनो 25;
प्रोटोकॉल एसएमटीपी;
smtp_auth लॉगिन सादा cram-md5;
}

सर्वर (
सुनो 110;
प्रोटोकॉल पॉप3;

}

सर्वर (
सुनो 143;
प्रोटोकॉल आईमैप;
}
}

* कहाँ:

  • सर्वर_नाम मेल सर्वर का नाम है जो एसएमटीपी ग्रीटिंग में प्रदर्शित किया जाएगा।
  • auth_http - प्रमाणीकरण अनुरोध के लिए वेब सर्वर और यूआरएल।
  • proxy_pass_error_message - प्रमाणीकरण विफल होने पर संदेश प्रदर्शित करने की अनुमति देता है या अस्वीकार करता है।
  • सुनो - पोर्ट जिस पर अनुरोधों को सुना जाता है।
  • प्रोटोकॉल - एप्लिकेशन प्रोटोकॉल जिसके लिए संबंधित पोर्ट सुन रहा है।
  • smtp_auth - SMTP के लिए उपलब्ध प्रमाणीकरण विधियाँ।
  • Pop3_auth - POP3 के लिए उपलब्ध प्रमाणीकरण विधियाँ।

http - सर्वर अनुभाग में जोड़ें:

सर्वर (
सुनो 80 default_server;
सुनो [::]:80 default_server;
...

स्थान ~ \.php$ (
$root_path /usr/share/nginx/html सेट करें;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index Index.php;
fastcgi_param SCRIPT_FILENAME $root_path$fastcgi_script_name;
fastcgi_params शामिल करें;
fastcgi_param DOCUMENT_ROOT $root_path;
}
...

nginx सर्वर को पुनरारंभ करें:

systemctl nginx को पुनरारंभ करें

PHP को स्थापित और कॉन्फ़िगर करना

PHP का उपयोग करके प्रमाणीकरण करने के लिए, आपको अपने सिस्टम पर निम्नलिखित पैकेज इंस्टॉल करने होंगे।

यदि CentOS:

यम php php-fpm इंस्टॉल करें

यदि उबंटू:

उपयुक्त-php php-fpm इंस्टॉल करें

PHP-FPM लॉन्च करें:

systemctl php-fpm सक्षम करें

systemctl प्रारंभ php-fpm

प्रमाणीकरण

लॉगिन और पासवर्ड सत्यापन एक स्क्रिप्ट द्वारा किया जाता है, जिसका पथ auth_http विकल्प द्वारा निर्दिष्ट किया जाता है। हमारे उदाहरण में, यह एक PHP स्क्रिप्ट है।

लॉगिन और पासवर्ड सत्यापन स्क्रिप्ट के लिए आधिकारिक टेम्पलेट का एक उदाहरण:

vi /usr/share/nginx/html/auth.php

* यह स्क्रिप्ट किसी भी लॉगिन और पासवर्ड को स्वीकार करती है और अनुरोधों को सर्वर 192.168.1.22 और 192.168.1.33 पर रीडायरेक्ट करती है। प्रमाणीकरण एल्गोरिदम सेट करने के लिए, पंक्तियों 61 - 64 को संपादित करें। पंक्तियाँ 73 - 77 उन सर्वरों को वापस करने के लिए जिम्मेदार हैं जिन पर पुनर्निर्देशन किया गया है - इस उदाहरण में, यदि लॉगिन "ए", "सी", "एफ" वर्णों से शुरू होता है ”, “g”, तो पुनर्निर्देशन mailhost01 सर्वर पर होगा, अन्यथा, mailhost02 पर। सर्वर नामों की आईपी पते पर मैपिंग लाइन 31, 32 पर सेट की जा सकती है, अन्यथा कॉल डोमेन नाम का उपयोग करके की जाएगी।

मेल सर्वर सेट करना

एनजीआईएनएक्स प्रॉक्सी और मेल सर्वर के बीच डेटा का आदान-प्रदान होता है खुला प्रपत्र. अपवाद में PLAIN तंत्र का उपयोग करके प्रमाणीकरण की संभावना को जोड़ना आवश्यक है। उदाहरण के लिए, डवकॉट को कॉन्फ़िगर करने के लिए, निम्नलिखित कार्य करें:

vi /etc/dovecot/conf.d/10-auth.conf

पंक्तियाँ जोड़ें:

रिमोट 192.168.1.11 (
disable_plaintext_auth = नहीं
}

* इस उदाहरण में, हमने सर्वर 192.168.1.11 से PLAIN प्रमाणीकरण अनुरोधों की अनुमति दी।

हम यह भी जांचते हैं:

* यदि एसएसएल आवश्यक पर सेट है, तो चेक काम नहीं करेगा, क्योंकि यह पता चलता है कि एक तरफ सर्वर स्पष्ट पाठ में अनुरोधों की अनुमति देता है, लेकिन एसएसएल एन्क्रिप्शन की आवश्यकता होती है।

Dovecot सेवा पुनः आरंभ करें:

systemctl पुनरारंभ dovecot

क्लाइंट सेटअप

आप हमारी प्रॉक्सी सेटिंग्स की जाँच करने के लिए आगे बढ़ सकते हैं। ऐसा करने के लिए, क्लाइंट सेटिंग्स में, nginx सर्वर का पता या नाम IMAP/POP2/SMTP के रूप में निर्दिष्ट करें, उदाहरण के लिए:

* इस उदाहरण में, मेल क्लाइंट को सर्वर 192.168.1.11 से कनेक्ट करने के लिए कॉन्फ़िगर किया गया है खुले बंदरगाह 143 (आईएमएपी) और 25 (एसएमटीपी)।

कूटलेखन

अब एक एसएसएल कनेक्शन सेट करते हैं। Nginx को mail_ssl_module मॉड्यूल के साथ बनाया जाना चाहिए - कमांड से जांचें:

यदि आवश्यक मॉड्यूल गायब है, तो हम nginx का पुनर्निर्माण करते हैं।

फिर हम अपनी कॉन्फ़िगरेशन फ़ाइल संपादित करते हैं:

vi /etc/nginx/nginx.conf

मेल (
सर्वर_नाम मेल.डोमेन.लोकल;
auth_http लोकलहोस्ट/auth.php;

प्रॉक्सी_पास_त्रुटि_संदेश चालू;

एसएसएल चालू;
ssl_certificate /etc/ssl/nginx/public.crt;
ssl_certificate_key /etc/ssl/nginx/private.key;
ssl_ciphers उच्च:!aNULL:!MD5;
ssl_session_cache साझा:SSL:10m;
ssl_session_timeout 10 मिनट;

सर्वर (
सुनो 110;
प्रोटोकॉल पॉप3;
पॉप3_ऑथ सादा एपॉप क्रैम-एमडी5;
}

सर्वर (
सुनो 143;
प्रोटोकॉल आईमैप;
}

कारण: SELinux सुरक्षा प्रणाली चालू हो गई है।

समाधान: SELinux को अक्षम या कॉन्फ़िगर करें।

Nginx तेजी से लोकप्रियता हासिल कर रहा है, अपाचे के लिए सिर्फ एक स्थिर डिलीवरी त्वरक से एक पूरी तरह कार्यात्मक और विकसित वेब सर्वर में बदल रहा है, जिसका अलगाव में तेजी से उपयोग किया जा रहा है। इस लेख में हम nginx का उपयोग करने के लिए दिलचस्प और गैर-मानक परिदृश्यों के बारे में बात करेंगे जो आपको अपने वेब सर्वर से अधिकतम लाभ उठाने की अनुमति देगा।

मेल प्रॉक्सी

आइए सबसे स्पष्ट से शुरू करें - मेल प्रॉक्सी के रूप में कार्य करने की nginx की क्षमता के साथ। यह फ़ंक्शन प्रारंभ में nginx में मौजूद है, लेकिन किसी कारण से इसका उपयोग उत्पादन में बहुत कम किया जाता है; कुछ लोगों को इसके अस्तित्व के बारे में भी पता नहीं है। जैसा कि हो सकता है, nginx एसएसएल और स्टार्टटीएलएस सहित विभिन्न प्रमाणीकरण विधियों के साथ POP3, IMAP और SMTP प्रोटोकॉल को प्रॉक्सी करने का समर्थन करता है, और यह बहुत तेज़ी से करता है।

यह क्यों आवश्यक है? इस कार्यक्षमता के लिए कम से कम दो उपयोग हैं। पहला: हमारे एसएमटीपी सर्वर के माध्यम से जंक ईमेल भेजने की कोशिश करने वाले कष्टप्रद स्पैमर के खिलाफ ढाल के रूप में nginx का उपयोग करें। आमतौर पर, स्पैमर अधिक समस्याएं पैदा नहीं करते हैं, क्योंकि प्रमाणीकरण चरण में उन्हें तुरंत अस्वीकार कर दिया जाता है, हालांकि, जब वास्तव में उनमें से बहुत सारे होते हैं, तो nginx प्रोसेसर संसाधनों को बचाने में मदद करेगा। दूसरा: उपयोगकर्ताओं को एकाधिक POP3/IMAP मेल सर्वर पर पुनर्निर्देशित करने के लिए nginx का उपयोग करें। बेशक, कोई अन्य मेल प्रॉक्सी इसे संभाल सकता है, लेकिन उदाहरण के लिए, यदि HTTP के माध्यम से स्थिर सामग्री परोसने के लिए nginx पहले से ही फ्रंट एंड पर स्थापित है, तो सर्वर को क्यों बंद किया जाए?

Nginx में मेल प्रॉक्सी सर्वर बिल्कुल मानक नहीं है। यह HTTP का उपयोग करके कार्यान्वित प्रमाणीकरण की एक अतिरिक्त परत का उपयोग करता है, और यदि उपयोगकर्ता इस बाधा को पार कर जाता है तो ही उसे आगे बढ़ने की अनुमति दी जाती है। यह कार्यक्षमता एक पेज/स्क्रिप्ट बनाकर प्रदान की जाती है जिस पर nginx उपयोगकर्ता डेटा भेजता है, और वह मानक ओके या इनकार के कारण (जैसे "अमान्य लॉगिन या पासवर्ड") के रूप में प्रतिक्रिया देता है। स्क्रिप्ट निम्नलिखित शीर्षकों के साथ चलती है:

प्रमाणीकरण स्क्रिप्ट इनपुट डेटा HTTP_AUTH_USER: उपयोगकर्ता HTTP_AUTH_PASS: पासवर्ड HTTP_AUTH_PROTOCOL: मेल प्रोटोकॉल (IMAP, POP3 या SMTP)

और यह निम्नलिखित लौटाता है:

प्रमाणीकरण स्क्रिप्ट आउटपुट HTTP_AUTH_STATUS: ठीक है या विफलता का कारण HTTP_AUTH_SERVER: HTTP_AUTH_PORT को रीडायरेक्ट करने के लिए वास्तविक मेल सर्वर: सर्वर पोर्ट

इस दृष्टिकोण की एक उल्लेखनीय विशेषता यह है कि इसका उपयोग प्रमाणीकरण के लिए बिल्कुल नहीं किया जा सकता है, बल्कि उपयोगकर्ता नाम, मेल सर्वर पर वर्तमान लोड पर डेटा, या यहां तक ​​कि सरल लोड संतुलन का आयोजन करके उपयोगकर्ताओं को विभिन्न आंतरिक सर्वरों में फैलाने के लिए भी किया जा सकता है। राउंड-रॉबिन का उपयोग करना। हालाँकि, यदि आपको उपयोगकर्ताओं को आंतरिक मेल सर्वर पर स्थानांतरित करने की आवश्यकता है, तो आप वास्तविक स्क्रिप्ट के बजाय nginx द्वारा कार्यान्वित स्टब का उपयोग कर सकते हैं। उदाहरण के लिए, nginx कॉन्फ़िगरेशन में सबसे सरल SMTP और IMAP प्रॉक्सी इस तरह दिखेगी:

# vi /etc/nginx/nginx.conf मेल ( # प्रमाणीकरण स्क्रिप्ट पता auth_http localhost:8080/auth; # XCLIENT कमांड को अक्षम करें, कुछ मेल सर्वर इसे नहीं समझते हैं xclient बंद; # IMAP सर्वर सर्वर (143 सुनें; प्रोटोकॉल imap; प्रॉक्सी चालू; ) # एसएमटीपी सर्वर सर्वर (सुनें 25; प्रोटोकॉल एसएमटीपी; प्रॉक्सी चालू; ) )

# vi /etc/nginx/nginx.conf http (# HTTP_AUTH_PROTOCOL हेडर मैप में भेजे गए पोर्ट के आधार पर वांछित मेल सर्वर पोर्ट पर मैपिंग $http_auth_protocol $mailport (डिफ़ॉल्ट 25; smtp 25; imap 143; ) # प्रमाणीकरण का कार्यान्वयन "स्क्रिप्ट" - हमेशा ओके लौटाता है और उपरोक्त मैपिंग सर्वर का उपयोग करके वांछित पोर्ट सेट करके उपयोगकर्ता को आंतरिक मेल सर्वर पर स्थानांतरित करता है (सुनें 8080; स्थान /ऑथ ( add_header "Auth-Status" "OK"; add_header "Auth-Server" "192.168.0.1" ; add_header "Auth-Port" $mailport; रिटर्न 200; ) ) )

यह सब है। यह कॉन्फ़िगरेशन आपको स्क्रिप्ट के रूप में ओवरहेड बनाए बिना उपयोगकर्ताओं को आंतरिक मेल सर्वर पर पारदर्शी रूप से रीडायरेक्ट करने की अनुमति देता है जो इस मामले में अनावश्यक है। स्क्रिप्ट का उपयोग करके, इस कॉन्फ़िगरेशन को महत्वपूर्ण रूप से विस्तारित किया जा सकता है: लोड संतुलन कॉन्फ़िगर करें, एलडीएपी डेटाबेस का उपयोग करके उपयोगकर्ताओं की जांच करें, और अन्य ऑपरेशन करें। स्क्रिप्ट लिखना इस लेख के दायरे से बाहर है, लेकिन केवल PHP और पायथन के मामूली ज्ञान के साथ भी इसे लागू करना बहुत आसान है।

वीडियो स्ट्रीमिंग

nginx पर आधारित नियमित वीडियो होस्टिंग स्थापित करना आसान है। आपको बस ट्रांसकोड किए गए वीडियो को सर्वर के लिए पहुंच योग्य निर्देशिका में अपलोड करना है, इसे कॉन्फ़िगरेशन में पंजीकृत करना है और फ़्लैश या HTML5 प्लेयर को कॉन्फ़िगर करना है ताकि यह इस निर्देशिका से वीडियो ले सके। हालाँकि, यदि आपको कुछ से निरंतर वीडियो प्रसारण सेट करने की आवश्यकता है वाह्य स्रोतया एक वेबकैम, यह योजना काम नहीं करेगी, और आपको विशेष स्ट्रीमिंग प्रोटोकॉल की ओर देखना होगा।

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

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

$ sudo apt-get हटाएं nginx $ cd /tmp $ wget http://bit.ly/VyK0lU -O nginx-rtmp.zip $ अनज़िप nginx-rtmp.zip $ wget http://nginx.org/download/nginx- 1.2.6.tar.gz $ tar -xzf nginx-1.2.6.tar.gz $ cd nginx-1.2.6 $ ./configure --add-module=/tmp/nginx-rtmp-module-master $ $ बनाओ सुडो स्थापित करें

अब मॉड्यूल को कॉन्फ़िगर करने की आवश्यकता है। यह हमेशा की तरह, nginx कॉन्फिगरेशन के माध्यम से किया जाता है:

आरटीएमपी (# पता साइट/आरटीएमपी सर्वर पर पोर्ट 1935 पर प्रसारण सर्वर को सक्रिय करें (1935 सुनें; एप्लिकेशन आरटीएमपी (लाइव ऑन;)))

RTMP मॉड्यूल मल्टी-थ्रेडेड कॉन्फ़िगरेशन में काम नहीं कर सकता है, इसलिए nginx वर्कर प्रक्रियाओं की संख्या को घटाकर एक करना होगा (बाद में मैं आपको बताऊंगा कि इस समस्या से कैसे निपटा जाए):

कार्यकर्ता_प्रक्रियाएँ 1;

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

# ffmpeg -re -i ~/video.avi -c कॉपी -f flv rtmp://localhost/rtmp/stream

यदि वीडियो फ़ाइल H264 प्रारूप में नहीं है, तो उसे पुनः एन्कोड किया जाना चाहिए। यह उसी FFmpeg का उपयोग करके तुरंत किया जा सकता है:

# ffmpeg -re -i ~/video.avi -c:v libx264 -c:a libfaac -ar 44100 -ac 2 -f flv rtmp://localhost/rtmp/stream

स्ट्रीम को सीधे वेबकैम से भी कैप्चर किया जा सकता है:

# ffmpeg -f video4linux2 -i /dev/video0 -c:v libx264 -an -f flv rtmp://localhost/rtmp/stream

क्लाइंट साइड पर स्ट्रीम देखने के लिए, आप आरटीएमपी का समर्थन करने वाले किसी भी प्लेयर का उपयोग कर सकते हैं, उदाहरण के लिए एमप्लेयर:

$ mplayer rmtp://example.com/rtmp/stream

या प्लेयर को सीधे एक वेब पेज में एम्बेड करें, जो उसी nginx द्वारा परोसा जाता है (आधिकारिक दस्तावेज़ से उदाहरण):

सबसे सरल आरटीएमपी वेब प्लेयर

jwplayer("कंटेनर").setup(( मोड: [( प्रकार: "फ़्लैश", src: "/jwplayer/player.swf", कॉन्फिग: (बफ़रलेंथ: 1, फ़ाइल: "स्ट्रीम", स्ट्रीमर: "rtmp:/ /localhost/rtmp", प्रदाता: "rtmp", ) )] ));

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

# vi /etc/nginx/nginx.conf एप्लिकेशन rtmp (लाइव ऑन; पुल rtmp://rtmp.example.com;)

यदि आपको विभिन्न गुणवत्ता की कई स्ट्रीम बनाने की आवश्यकता है, तो आप सीधे nginx से FFmpeg ट्रांसकोडर को कॉल कर सकते हैं:

# vi /etc/nginx/nginx.conf एप्लिकेशन rtmp (लाइव पर; exec ffmpeg -i rtmp://localhost/rtmp/$name -c:v flv -c:a -s 320x240 -f flv rtmp://localhost /rtmp-320x240/$name; ) एप्लिकेशन rtmp-320x240 ( लाइव ऑन ; )

इस कॉन्फ़िगरेशन के साथ, हमें एक साथ दो ब्रॉडकास्टर मिलेंगे, जिनमें से एक rtmp://site/rtmp पते पर उपलब्ध होगा, और दूसरा, 320 x 240 गुणवत्ता में प्रसारण, rtmp://site/rtmp पते पर उपलब्ध होगा। -320x240. इसके बाद, आप साइट पर एक फ़्लैश प्लेयर और गुणवत्ता चयन बटन जोड़ सकते हैं, जो प्लेयर को एक या दूसरा ब्रॉडकास्टर पता देगा।

और अंत में, नेटवर्क पर संगीत प्रसारित करने का एक उदाहरण:

जबकि सच है; ffmpeg -re -i "`find /var/music -type f -name "*.mp3"|sort -R|head -n 1`" -vn -c:a libfaac -ar 44100 -ac 2 -f flv करें rtmp://localhost/rtmp/stream; हो गया

गिट प्रॉक्सी

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

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

कार्य की पूरी योजना इस प्रकार दिखेगी। fcgiwrap सर्वर पृष्ठभूमि में लटका रहेगा और CGI एप्लिकेशन को निष्पादित करने के अनुरोध की प्रतीक्षा करेगा। बदले में, Nginx को हर बार हमारे द्वारा निर्दिष्ट पते तक पहुंचने पर फास्टसीजीआई इंटरफ़ेस के माध्यम से गिट-http-बैकएंड सीजीआई बाइनरी के निष्पादन का अनुरोध करने के लिए कॉन्फ़िगर किया जाएगा। अनुरोध प्राप्त होने पर, fcgiwrap GIT क्लाइंट द्वारा पारित निर्दिष्ट CGI तर्कों के साथ git-http-backend निष्पादित करता है और परिणाम लौटाता है।

ऐसी योजना को लागू करने के लिए, पहले fcgiwrap स्थापित करें:

$ sudo apt-get install fcgiwrap

इसे कॉन्फ़िगर करने की कोई आवश्यकता नहीं है; सभी पैरामीटर फास्टसीजीआई प्रोटोकॉल के माध्यम से प्रसारित होते हैं। यह स्वचालित रूप से लॉन्च भी होगा. इसलिए, जो कुछ बचा है वह nginx को कॉन्फ़िगर करना है। ऐसा करने के लिए, एक फ़ाइल बनाएं /etc/nginx/sites-enabled/git (यदि ऐसी कोई निर्देशिका नहीं है, तो आप मुख्य कॉन्फ़िगरेशन में लिख सकते हैं) और उसमें निम्नलिखित लिखें:

# vi /etc/nginx/sites-enabled/git सर्वर ( # हम पोर्ट 8080 पर लटके हुए हैं, 8080 सुनें; # हमारा सर्वर पता (DNS में एक प्रविष्टि जोड़ना न भूलें) सर्वर_नाम git.example.ru; # लॉग एक्सेस_लॉग /var/log/nginx /git-http-backend.access.log; error_log /var/log/nginx/git-http-backend.error.log; # अनाम पहुंच स्थान के लिए प्राथमिक पता / ( # डाउनलोड करने का प्रयास करते समय, उपयोगकर्ता को एक निजी पते पर भेजें यदि ($ arg_service ~* "git-receive-pack") ( rewrite ^ /private$uri अंतिम; ) में /etc/nginx/fastcgi_params शामिल है; # हमारे git-http-backend fastcgi_param SCRIPT_FILENAME का पता /usr/lib/git-core/git- http-backend; # Git रिपॉजिटरी पता fastcgi_param GIT_PROJECT_ROOT /srv/git; # फ़ाइल पता fastcgi_param PATH_INFO $uri; # fcgiwrap सर्वर पता fastcgi_pass 127.0.0.1:9001; ) # एक्सेस पता लिखें स्थान ~/निजी(/.* )$ ( # उपयोगकर्ता अनुमतियाँ auth_basic "git अज्ञात केवल पढ़ने के लिए, प्रमाणित लेखन"; # HTTP प्रमाणीकरण htpasswd auth_basic_user_file /etc/nginx/htpasswd पर आधारित; # FastCGI सेटिंग्स में /etc/nginx/fastcgi_params शामिल हैं ; fastcgi_param SCRIPT_FILENAME /usr/lib/git-core/git-http-backend; fastcgi_param GIT_PROJECT_ROOT /srv/git; fastcgi_param PATH_INFO $1; fastcgi_pass 127.0.0.1:9001; ) )

यह कॉन्फ़िगरेशन तीन महत्वपूर्ण बातें मानता है:

  • रिपॉजिटरी का पता /srv/git होगा, इसलिए हम उचित एक्सेस अधिकार निर्धारित करते हैं: $ sudo chown -R www-data:www-data /srv/git
  • अज्ञात उपयोगकर्ताओं द्वारा पढ़ने के लिए रिपॉजिटरी स्वयं खुली होनी चाहिए और HTTP के माध्यम से अपलोड करने की अनुमति होनी चाहिए: $ cd /srv/git $ git config core.sharedrepository true $ git config http.receivepack true
  • प्रमाणीकरण htpasswd फ़ाइल का उपयोग करके किया जाता है, आपको इसे बनाने और इसमें उपयोगकर्ताओं को जोड़ने की आवश्यकता है: $ sudo apt-get install apache2-utils $ htpasswd -c /etc/nginx/htpasswd user1 $ htpasswd /etc/nginx/htpasswd user2 । ..
  • बस इतना ही, nginx को पुनरारंभ करें:

    माइक्रोकैचिंग

    आइए एक गतिशील, बार-बार अपडेट की जाने वाली वेबसाइट की स्थिति की कल्पना करें, जिस पर अचानक बहुत भारी लोड आना शुरू हो जाता है (खैर, यह सबसे बड़ी समाचार साइटों में से एक के पृष्ठ पर समाप्त हो गया) और सामग्री की वापसी का सामना करना बंद कर देता है। उचित अनुकूलन और सही कैशिंग योजना के कार्यान्वयन में काफी समय लगेगा, और समस्याओं को अब हल करने की आवश्यकता है। हम क्या कर सकते हैं?

    कम से कम नुकसान के साथ इस स्थिति से बाहर निकलने के कई तरीके हैं, लेकिन सबसे दिलचस्प विचार फेन बेली (fennb.com) द्वारा प्रस्तावित किया गया था। विचार बस यह है कि nginx को सर्वर के सामने रखा जाए और उसे सभी प्रेषित सामग्री को कैश करने के लिए बाध्य किया जाए, लेकिन केवल कैश नहीं, बल्कि केवल एक सेकंड के लिए। यहां मोड़ यह है कि प्रति सेकंड सैकड़ों और हजारों साइट विज़िटर, वास्तव में, बैकएंड पर केवल एक अनुरोध उत्पन्न करेंगे, जो अधिकतर कैश्ड पेज प्राप्त करेगा। साथ ही, शायद ही किसी को अंतर नज़र आएगा, क्योंकि एक गतिशील साइट पर भी एक सेकंड का आमतौर पर कोई मतलब नहीं होता है।

    इस विचार के कार्यान्वयन के साथ कॉन्फ़िगरेशन इतना जटिल नहीं लगेगा:

    # vi /etc/nginx/sites-enabled/cache-proxy # कैश कॉन्फ़िगरेशन proxy_cache_path /var/cache/nginx लेवल=1:2 key_zone=microcache:5m max_size=1000m; सर्वर (सुनें 80; सर्वर_नाम example.com; # कैश्ड पता स्थान / ( # कैश डिफ़ॉल्ट सेट $no_cache "" द्वारा सक्षम है; # GET और HEAD को छोड़कर सभी तरीकों के लिए कैश अक्षम करें यदि ($request_method !~ ^(GET|HEAD) $) ( $no_cache "1" सेट करें; ) # यदि क्लाइंट साइट पर सामग्री अपलोड करता है (no_cache = 1), तो हम सुनिश्चित करते हैं कि उसे दिया गया डेटा दो सेकंड के लिए कैश नहीं किया गया है और वह डाउनलोड का परिणाम देख सकता है यदि ($no_cache = "1") ( add_header Set-Cookie "_mcnc=1; Max-Age=2; Path=/"; add_header X-Microcachable "0"; ) यदि ($http_cookie ~* "_mcnc") ( $no_cache "1 " सेट करें; ) # वेरिएबल की स्थिति के आधार पर कैश को सक्षम/अक्षम करें no_cache proxy_no_cache $no_cache; proxy_cache_bypass $no_cache; # वास्तविक सर्वर के लिए प्रॉक्सी अनुरोध प्रॉक्सी_पास http://appserver.example.ru; proxy_cache माइक्रोकैश ; proxy_cache_key $scheme$host$request_method$ request_uri; proxy_cache_valid 200 1s; # थंडरिंग झुंड समस्या से सुरक्षा proxy_cache_use_stale अपडेटिंग; # मानक हेडर जोड़ें proxy_set_header होस्ट $host; प्रॉक्सी_सेट_हेडर एक्स-रियल-आईपी $remote_addr; proxy_set_header # हम 1 एमबी proxy_max_temp_file_size 1M से बड़ी फ़ाइलों को कैश नहीं करते हैं; ) )

    इस कॉन्फ़िगरेशन में एक विशेष स्थान पर "प्रॉक्सी_कैश_यूज़_स्टेल अपडेटिंग;" लाइन का कब्जा है, जिसके बिना हमें कैश अपडेट के दौरान प्राप्त अनुरोधों के कारण बैकएंड सर्वर पर समय-समय पर लोड प्राप्त होता। अन्यथा, सब कुछ मानक है और अनावश्यक स्पष्टीकरण के बिना स्पष्ट होना चाहिए।

    प्रॉक्सी को लक्षित दर्शकों के करीब लाना

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

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

    # vi /etc/nginx/sites-enabled/proxy # कैश को 100 जीबी स्टोरेज में 30 दिनों के लिए स्टोर करें proxy_cache_path /var/cache/nginx लेवल=1:2 key_zone=static:32m निष्क्रिय=30d अधिकतम_आकार=100g; सर्वर (सुनें 80; सर्वर_नाम example.com; # दरअसल, हमारा प्रॉक्सी स्थान ~* .(jpg|jpeg|gif|png|ico|css|midi|wav|bmp|js|swf|flv|avi|djvu|mp3) $ ( # बैकएंड पता proxy_pass back.example.com:80; proxy_redirect; ; proxy_cache_valid 30d; proxy_ignore_headers "कैश-कंट्रोल" "समाप्ति"; proxy_cache_key "$uri$is_args$args"; proxy_cache_lock on; ) )

    निष्कर्ष

    आज, nginx की मदद से आप कई अलग-अलग समस्याओं का समाधान कर सकते हैं, जिनमें से कई वेब सर्वर और HTTP प्रोटोकॉल से बिल्कुल भी संबंधित नहीं हैं। मेल प्रॉक्सी, स्ट्रीमिंग सर्वर और गिट इंटरफ़ेस इनमें से कुछ कार्य हैं।

    विषय पर प्रकाशन