प्रदर्शन और सुरक्षा के लिए Nginx को कॉन्फ़िगर करना

इस ट्यूटोरियल में, हम देखेंगे कि हम उत्पादन परिवेश के लिए Nginx वेब सर्वर को कैसे कॉन्फ़िगर कर सकते हैं.


एक उत्पादन वातावरण में एक वेब सर्वर प्रदर्शन, सुरक्षा और इतने पर के रूप में एक परीक्षण वातावरण में एक वेब सर्वर से अलग है.

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

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

आवश्यकताएँ

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

  • उबंटू या अन्य कोई डेबियन-आधारित प्लेटफ़ॉर्म
  • wget
  • विम (पाठ संपादक)

इसके अलावा, आपको इस कमांड में कुछ कमांड को सुडो कमांड के माध्यम से रूट यूजर के रूप में चलाने या निष्पादित करने की आवश्यकता है.

Nginx विन्यास संरचना को समझना

इस भाग में हम निम्नलिखित देखेंगे:

  • Nginx की संरचना
  • एक घटना, HTTP और मेल जैसे अनुभाग
  • Nginx का मान्य सिंटैक्स

इस खंड के अंत में, आप Nginx कॉन्फ़िगरेशन की संरचना, उद्देश्य या भूमिकाओं की भूमिका और साथ ही साथ अनुभागों के अंदर वैध निर्देशों को परिभाषित करने के तरीके को समझेंगे।.

पूर्ण Nginx कॉन्फ़िगरेशन फ़ाइल में एक तार्किक संरचना होती है, जो कि कई खंडों जैसे कि ईवेंट सेक्शन, http सेक्शन, मेल सेक्शन आदि में समूहीकृत निर्देशों से बनी होती है।.

प्राथमिक कॉन्फ़िगरेशन फ़ाइल /etc/nginx/nginx.conf पर स्थित है, जबकि अन्य कॉन्फ़िगरेशन फ़ाइलें / etc / nginx पर स्थित हैं.

मुख्य प्रसंग

इस खंड या संदर्भ में विशिष्ट खंड जैसे मेल अनुभाग के बाहर निर्देश होते हैं.

कोई अन्य निर्देश जैसे कि उपयोगकर्ता nginx; , कार्यकर्ता_प्रोसेस 1; , Error_log /var/log/nginx/error.log चेतावनी; और pid /var/run/nginx.pid को मुख्य अनुभाग या संदर्भ में रखा जा सकता है.

लेकिन इनमें से कुछ निर्देश जैसे कि कार्यकर्ता_प्रोसेस भी घटना खंड में मौजूद हो सकते हैं.

धारा

Nginx में अनुभाग Nginx मॉड्यूल के लिए कॉन्फ़िगरेशन को परिभाषित करता है.

उदाहरण के लिए, http अनुभाग ngx_http_core मॉड्यूल के लिए कॉन्फ़िगरेशन को परिभाषित करता है, इवेंट अनुभाग ngx_event_module के लिए कॉन्फ़िगरेशन को परिभाषित करता है, जबकि मेल अनुभाग ngx_mail_module के लिए कॉन्फ़िगरेशन को परिभाषित करता है.

आप देख सकते हैं यहाँ Nginx में वर्गों की एक पूरी सूची के लिए.

निर्देशों

Nginx में निर्देश एक चर नाम और निम्न जैसे कई तर्कों से बने होते हैं:

कार्यकर्ता_प्रोसेस एक वैरिएबल नाम है जब ऑटो एक तर्क के रूप में कार्य करता है.

कार्यकर्ता_प्रोसेस ऑटो;

जैसा कि ऊपर दिखाया गया है, निर्देश एक अर्ध-बृहदान्त्र के साथ समाप्त होते हैं.

अंत में, Nginx कॉन्फ़िगरेशन फ़ाइल को नियमों के एक विशेष सेट का पालन करना चाहिए। निम्नलिखित Nginx कॉन्फ़िगरेशन के मान्य सिंटैक्स हैं:

  • मान्य निर्देश एक चर नाम से शुरू होते हैं और उसके बाद एक या अधिक तर्क दिए जाते हैं
  • सभी वैध निर्देश एक अर्ध-उपनिवेश के साथ समाप्त होते हैं;
  • धाराएं घुंघराले ब्रेस के साथ परिभाषित की जाती हैं {}
  • एक सेक्शन को दूसरे सेक्शन में एम्बेड किया जा सकता है
  • किसी भी खंड के बाहर का विन्यास Nginx वैश्विक कॉन्फ़िगरेशन का हिस्सा है.
  • हैश साइन # से शुरू होने वाली लाइनें कमेंट हैं.

ट्यूनिंग Nginx प्रदर्शन के लिए

इस अनुभाग में, हम भारी ट्रैफ़िक और ट्रैफ़िक स्पाइक के दौरान बेहतर प्रदर्शन करने के लिए Nginx को कॉन्फ़िगर करेंगे.

हम देखेंगे कि कॉन्फ़िगर कैसे करें:

  • कर्मी
  • डिस्क I / O गतिविधि
  • नेटवर्क गतिविधि
  • बफ़र
  • दबाव
  • कैशिंग
  • समय समाप्त

फिर भी, सक्रिय वर्चुअल वातावरण के अंदर, Nginx निर्देशिका में बदलने और इसकी सामग्री को सूचीबद्ध करने के लिए निम्न कमांड टाइप करें.

सीडी nginx && ls

फ़ोल्डर के लिए खोजें। इस फ़ोल्डर के अंदर nginx.conf फ़ाइल है.

हम Nginx को कॉन्फ़िगर करने के लिए इस फ़ाइल का उपयोग करेंगे

अब गोपनीय कमांड को नेविगेट करने के लिए निम्नलिखित कमांड्स को निष्पादित करें और फ़ाइल nginx.conf को vim एडिटर के साथ खोलें

सीडी आत्मविश्वास
सुडो विम नग्नेक्स

नीचे एक स्क्रीनशॉट है कि कैसे nginx.conf फ़ाइल डिफ़ॉल्ट रूप से दिखती है.

कर्मी

Nginx को बेहतर प्रदर्शन करने के लिए सक्षम करने के लिए, हमें घटनाओं अनुभाग में श्रमिकों को कॉन्फ़िगर करना होगा। Nginx श्रमिकों को कॉन्फ़िगर करना आपको प्रभावी रूप से क्लाइंट से कनेक्शन संसाधित करने में सक्षम बनाता है.

मान लें कि आपने विम एडिटर को बंद नहीं किया है, तो nginx.conf फ़ाइल को संपादित करने के लिए कीबोर्ड पर i बटन दबाएं.

नीचे दी गई घटनाओं के अनुसार निम्नलिखित को सेक्शन इवेंट के अंदर कॉपी और पेस्ट करें:

आयोजन {
कार्यकर्ता_प्रोसेस ऑटो;
worker_connections 1024;
कार्यकर्ता_श्रीमित_नफाइल 20960;
mult_accept पर;
mutex_accept पर;
mutex_accept_delay 500ms;
एपोल का उपयोग करें;
epoll_events 512;
}

worker_processes: यह निर्देश Nginx में श्रमिकों की संख्या को नियंत्रित करता है। इस निर्देश का मान ऑटो को सेट किया गया है ताकि Nginx को उपलब्ध कोर, डिस्क, सर्वर लोड और नेटवर्क सबसिस्टम की संख्या निर्धारित कर सके। हालाँकि, आप टर्मिनल पर कमांड lscpu को निष्पादित करके कोर की संख्या की खोज कर सकते हैं.

कार्यकर्ता_संबंध: यह निर्देश कार्यकर्ता द्वारा खोले जा सकने वाले एक साथ कनेक्शन की संख्या का मूल्य निर्धारित करता है। डिफ़ॉल्ट मान 512 है, लेकिन हम इसे एक ग्राहक से एक साथ एक कनेक्शन को स्वीकार करने की अनुमति देने के लिए 1,024 पर सेट करते हैं.

worker_rlimit_nofile: यह निर्देश किसी प्रकार के कार्यकर्ता_संबंधों से संबंधित है। एक साथ बड़े कनेक्शन को संभालने के लिए, हम इसे एक बड़े मूल्य पर सेट करते हैं.

multi_accept: यह निर्देश एक कार्यकर्ता को एक समय में कतार में कई कनेक्शन स्वीकार करने की अनुमति देता है। इस संदर्भ में एक कतार का अर्थ है कि संसाधित होने की प्रतीक्षा में डेटा ऑब्जेक्ट का एक क्रम.

mutex_accept: यह निर्देश डिफ़ॉल्ट रूप से बंद है। लेकिन क्योंकि हमने Nginx में कई श्रमिकों को कॉन्फ़िगर किया है, इसलिए हमें इसे ऊपर दिए गए कोड में दिखाना होगा ताकि श्रमिकों को एक के बाद एक नए कनेक्शन स्वीकार करने की अनुमति मिल सके.

mutex_accept_delay: यह निर्देश निर्धारित करता है कि किसी कर्मचारी को एक नया कनेक्शन स्वीकार करने से पहले कितनी देर तक इंतजार करना चाहिए। एक बार accept_mutex चालू हो जाने के बाद, एक mutex लॉक किसी कार्यकर्ता को accept_mutex_delay द्वारा निर्दिष्ट समय सीमा के लिए सौंपा जाता है। जब समय सीमा समाप्त होती है, तो लाइन में अगला कार्यकर्ता नए कनेक्शनों को स्वीकार करने के लिए तैयार होता है.

उपयोग: यह निर्देश क्लाइंट से कनेक्शन संसाधित करने की विधि को निर्दिष्ट करता है। इस ट्यूटोरियल में, हमने वैल्यू को सेट करने का निर्णय लिया क्योंकि हम एक उबंटू प्लेटफॉर्म पर काम कर रहे हैं। लिनक्स प्लेटफार्मों के लिए सबसे प्रभावी प्रसंस्करण विधि एपोल विधि है.

epoll_events: इस निर्देश का मान निर्दिष्ट करता है कि Nginx घटनाओं को कर्नेल में स्थानांतरित कर देगा.

डिस्क I / O

इस खंड में, हम प्रभावी डेटा अंतरण करने और कैश प्रभावशीलता में सुधार करने की अनुमति देने के लिए Nginx में अतुल्यकालिक I / O गतिविधि को कॉन्फ़िगर करेंगे।.

डिस्क I / O केवल हार्ड डिस्क और रैम के बीच संचालन लिखने और पढ़ने के लिए संदर्भित करता है। हम उपयोग करेंगे फाइल भेज() कर्नेल के अंदर छोटे फाइल भेजने के लिए कार्य करते हैं.

आप इस क्षेत्र में निर्देशों के लिए http अनुभाग, स्थान अनुभाग और सर्वर अनुभाग का उपयोग कर सकते हैं.

कॉन्फ़िगरेशन पढ़ने योग्य बनाने के लिए स्थान अनुभाग, सर्वर अनुभाग को एम्बेड किया जा सकता है या http अनुभाग के भीतर रखा जा सकता है.

HTTP कोड के भीतर एम्बेडेड स्थान अनुभाग के अंदर निम्न कोड को कॉपी और पेस्ट करें.

स्थान / पीडीएफ / {
पर भेज देना;
aio on;
}

स्थान / ऑडियो / {
Directio 4 मी
Directio_alignment 512
}

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

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

aio: यह निर्देश लिखने और पढ़ने के संचालन के लिए सेट होने पर मल्टी-थ्रेडिंग को सक्षम बनाता है। मल्टी-थ्रेडिंग एक निष्पादन मॉडल है जो कई थ्रेड्स को उनके होस्टिंग प्रक्रिया संसाधनों को साझा करते हुए एक-दूसरे से अलग-अलग निष्पादित करने की अनुमति देता है.

Directio_alignment: यह निर्देश डेटा ट्रांसफर के लिए ब्लॉक साइज वैल्यू प्रदान करता है। यह डायरेक्टियो निर्देशन से संबंधित है.

नेटवर्क परत

इस खंड में, हम छोटे पैकेटों को रोकने के लिए tcp_nodelay और tcp_nopush जैसे निर्देशों का उपयोग करेंगे, जो एक बार भेजे जाने से पहले लगभग 200 मिलीसेकंड के निर्दिष्ट समय-सीमा तक प्रतीक्षा करने से रोकते हैं।.

आमतौर पर जब पैकेट को ‘टुकड़ों’ में स्थानांतरित किया जाता है, तो वे अत्यधिक लोड किए गए नेटवर्क को संतृप्त करते हैं। इसलिए जॉन नागले ने ए बफरिंग एल्गोरिथ्म इस मुद्दे को हल करने के लिए। नागल के बफरिंग एल्गोरिदम का उद्देश्य छोटे पैकेटों को अत्यधिक लोड किए गए नेटवर्क को संतृप्त करने से रोकना है.

HTTP सेक्शन के अंदर निम्न कोड को कॉपी और पेस्ट करें.

एचटीटीपी {

tcp_nopush on;
tcp_nodelay on;

}

tcp_nodelay: यह निर्देश, डिफ़ॉल्ट रूप से, छोटे पैकेटों को एक बार भेजे जाने से पहले एक निर्दिष्ट अवधि तक प्रतीक्षा करने की अनुमति देने के लिए अक्षम किया गया है। एक बार में सभी डेटा भेजने की अनुमति देने के लिए, यह निर्देश सक्षम है.

tcp_nopush: क्योंकि हमने tcp_nodelay निर्देश सक्षम किया है, इसलिए छोटे पैकेट एक बार में भेजे जाते हैं। हालाँकि, यदि आप अभी भी जॉन नागले के बफरिंग एल्गोरिथ्म का उपयोग करना चाहते हैं, तो हम tcp_nopush को एक-दूसरे से पैकेट जोड़ने और उन सभी को एक साथ भेजने में सक्षम कर सकते हैं.

बफ़र

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

आप सर्वर सेक्शन में नीचे कॉपी कर सकते हैं.

सर्वर {

client_body_buffer_size 8k;
client_max_body_size 2m;
client_body_in_single_buffer पर;
client_body_temp_pathtemp_files 1 2;
client_header_buffer_size 1m;
big_client_header_buffers 4 8k;

}

यह समझना महत्वपूर्ण है कि उन बफर लाइनें क्या करती हैं.

client_body_buffer_size: यह निर्देश अनुरोध बॉडी के लिए बफर आकार सेट करता है। यदि आप 64-बिट सिस्टम पर वेबसर्वर को चलाने की योजना बनाते हैं, तो आपको मूल्य 16k पर सेट करने की आवश्यकता है। यदि आप 32-बिट सिस्टम पर वेबसर्वर चलाना चाहते हैं, तो मान को 8k पर सेट करें.

client_max_body_size: यदि आप बड़ी फ़ाइल अपलोड को संभालने का इरादा रखते हैं, तो आपको इस निर्देश को कम से कम 2m या अधिक पर सेट करना होगा। डिफ़ॉल्ट रूप से, यह 1 मी पर सेट है.

client_body_in_file_only: यदि आपने हैशटैग प्रतीक # के साथ directive client_body_buffer_size को अक्षम कर दिया है और यह निर्देश ग्राहक_body_in_file_only सेट है, तो Nginx एक अस्थायी फ़ाइल में अनुरोध बफ़र्स को बचाएगा। यह उत्पादन वातावरण के लिए अनुशंसित नहीं है.

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

client_header_buffer_size: आप अनुरोध शीर्ष लेख के लिए एक बफर सेट या आवंटित करने के लिए इस निर्देश का उपयोग कर सकते हैं। आप इस मान को 1 मी पर सेट कर सकते हैं.

big_client_header_buffers: यह निर्देश बड़े अनुरोध शीर्षलेखों को पढ़ने के लिए अधिकतम संख्या और आकार सेट करने के लिए उपयोग किया जाता है। आप अधिकतम संख्या और बफर आकार को 4 और 8k तक ठीक से सेट कर सकते हैं.

दबाव

नेटवर्क पर स्थानांतरित किए गए डेटा की मात्रा को संपीड़ित करना यह सुनिश्चित करने का एक और तरीका है कि आपका वेब सर्वर बेहतर प्रदर्शन करता है। इस खंड में, हम डेटा को संपीड़ित करने के लिए gzip, gzip_comp_level और gzip_min_length जैसे निर्देशों का उपयोग करेंगे.

Http कोड के अंदर निम्न कोड पेस्ट करें जैसा कि नीचे दिखाया गया है:

एचटीटीपी {

पर gzip;
gzip_comp_level 2;
gzip_min_length 1000;
gzip_types text / xml text / css;
gzip_http_version 1.1;
gzip_vary पर;
gzip_disable "MSIE [4-6] \.";

}

gzip: यदि आप कम्प्रेशन को सक्षम करना चाहते हैं, तो इस निर्देश का मान चालू करें। डिफ़ॉल्ट रूप से, यह अक्षम है.

gzip_comp_level: आप संपीड़न स्तर सेट करने के लिए इस निर्देश का उपयोग कर सकते हैं। सीपीयू संसाधनों को बर्बाद न करने के लिए, आपको संपीड़न स्तर बहुत अधिक निर्धारित करने की आवश्यकता नहीं है। 1 और 9 के बीच, आप संपीड़न स्तर 2 या 3 पर सेट कर सकते हैं.

gzip_min_length: सामग्री-लंबाई प्रतिक्रिया हेडर फ़ील्ड के माध्यम से संपीड़न के लिए न्यूनतम प्रतिक्रिया लंबाई सेट करें। आप इसे 20 से अधिक बाइट्स पर सेट कर सकते हैं.

gzip_types: यह निर्देश आपको वह प्रतिक्रिया प्रकार चुनने की अनुमति देता है जिसे आप संपीड़ित करना चाहते हैं। डिफ़ॉल्ट रूप से, प्रतिक्रिया प्रकार पाठ / html हमेशा संकुचित होता है। आप अन्य प्रतिक्रिया प्रकार जोड़ सकते हैं जैसे कि पाठ / सीएसएस जैसा कि ऊपर दिए गए कोड में दिखाया गया है.

gzip_http_version: यह निर्देश आपको संकुचित प्रतिक्रिया के लिए अनुरोध का न्यूनतम HTTP संस्करण चुनने की अनुमति देता है। आप डिफ़ॉल्ट मान का उपयोग कर सकते हैं जो 1.1 है.

gzip_vary: जब gzip निर्देश सक्षम होता है, तो यह निर्देश हेडर फ़ील्ड को जोड़ता है Vary: प्रतिक्रिया के लिए एन्कोडिंग स्वीकार करें.

gzip_disabled: कुछ ब्राउज़र जैसे कि Internet Explorer 6 में gzip संपीड़न का समर्थन नहीं है। यह निर्देश कुछ ब्राउज़रों के लिए संपीड़न को अक्षम करने के लिए उपयोगकर्ता-एजेंट अनुरोध हेडर फ़ील्ड का उपयोग करता है.

कैशिंग

एक ही डेटा को कई बार लोड करने के लिए कई बार लीवरेज कैशिंग सुविधाओं को कम करता है। Nginx को open_file_cache निर्देश के माध्यम से स्थिर सामग्री मेटाडेटा कैश करने के लिए सुविधाएँ प्रदान करता है.

आप इस निर्देश को सर्वर, स्थान और http अनुभाग के अंदर रख सकते हैं.

एचटीटीपी {

open_file_cache max = 1,000 निष्क्रिय = 30s;
open_file_cache_valid 30s;
open_file_cache_min_use 4;
open_file_cache_errors on;

}

open_file_cache: यह निर्देश डिफ़ॉल्ट रूप से अक्षम है। यदि आप Nginx में कैशिंग लागू करना चाहते हैं तो इसे सक्षम करें। यह निर्देश आमतौर पर उपयोगकर्ताओं द्वारा अनुरोधित फ़ाइलों और निर्देशिकाओं के मेटाडेटा को संग्रहीत करता है.

open_file_cache_valid: इस निर्देश में open_file_cache निर्देश के अंदर बैकअप जानकारी है। आप इस निर्देश का उपयोग आमतौर पर सेकंड में एक वैध अवधि निर्धारित करने के लिए कर सकते हैं जिसके बाद फ़ाइलों और निर्देशिकाओं से संबंधित जानकारी फिर से मान्य की जाती है.

open_file_cache_min_use: Nginx आमतौर पर Open_file_cache_min_use के आधार पर निष्क्रियता की अवधि के बाद Open_file_cache निर्देश के अंदर स्पष्ट जानकारी देता है। आप इस निर्देश का उपयोग कर सकते हैं कि कौन सी फाइलें और निर्देशिका सक्रिय रूप से एक्सेस की जाती हैं, यह पहचानने के लिए न्यूनतम संख्या तक पहुंच स्थापित करें.

Open_file_cache_errors: आप इस निर्देश का उपयोग कर सकते हैं कि Nginx को “अनुमति से वंचित” या “फ़ाइल को एक्सेस नहीं कर सकते” जैसी त्रुटियों को कैश करने की अनुमति दें। इसलिए कभी भी एक संसाधन एक उपयोगकर्ता द्वारा एक्सेस किया जाता है, जिसके पास ऐसा करने का अधिकार नहीं है, Nginx ने एक ही त्रुटि रिपोर्ट “अनुमति अस्वीकृत” प्रदर्शित की है.

समय समाप्त

लंबे समय से प्रतीक्षित कनेक्शनों को बर्बाद करने वाले संसाधनों को रोकने के लिए रखवाली_टाइमआउट और रखवाले_रेक्वेस्ट जैसे निर्देशों का उपयोग करके टाइमआउट कॉन्फ़िगर करें.

HTTP अनुभाग में, निम्न कोड को कॉपी और पेस्ट करें:

एचटीटीपी {

Keepalive_timeout 30s;
Keepalive_requests 30;
send_timeout 30s;

}

Keepalive_timeout: कनेक्शन को लगभग 30 सेकंड तक जीवित रखें। डिफ़ॉल्ट 75 सेकंड है.

Keepalive_requests: समय की एक विशिष्ट अवधि के लिए जीवित रखने के लिए कई अनुरोधों को कॉन्फ़िगर करें। आप अनुरोधों की संख्या 20 या 30 पर सेट कर सकते हैं.

Keepalive_disable: यदि आप किसी विशिष्ट समूह के ब्राउज़र के लिए Keepalive कनेक्शन को अक्षम करना चाहते हैं, तो इस निर्देश का उपयोग करें.

send_timeout: ग्राहक को डेटा संचारित करने के लिए एक समय-सीमा निर्धारित करें.

Nginx के लिए सुरक्षा कॉन्फ़िगरेशन

निम्नलिखित केवल इस बात पर ध्यान केंद्रित करता है कि वेब एप्लिकेशन के बजाय Nginx को सुरक्षित रूप से कैसे कॉन्फ़िगर किया जाए। इस प्रकार हम एसक्यूएल इंजेक्शन और इतने पर वेब आधारित हमलों को नहीं देखेंगे.

इस अनुभाग में हम निम्नलिखित को कॉन्फ़िगर करने के तरीके के बारे में देखेंगे:

  • फ़ाइलों और निर्देशिकाओं तक पहुंच को प्रतिबंधित करें
  • दुर्भावनापूर्ण गतिविधियों पर नज़र रखने के लिए लॉग कॉन्फ़िगर करें
  • डीडीओ को रोकें
  • निर्देशिका सूची को अक्षम करें

फ़ाइलों और निर्देशिकाओं तक पहुंच को प्रतिबंधित करें

आइए निम्न तरीकों के माध्यम से संवेदनशील फ़ाइलों और निर्देशिकाओं तक पहुंच को प्रतिबंधित करने के बारे में देखें.

HTTP प्रमाणीकरण का उपयोग करके

हम संवेदनशील फ़ाइलों या उन क्षेत्रों तक पहुंच को प्रतिबंधित कर सकते हैं जो उपयोगकर्ताओं या यहां तक ​​कि प्रशासकों से प्रमाणीकरण के लिए संकेत देकर सार्वजनिक देखने के लिए नहीं हैं। यदि आपने इसे स्थापित नहीं किया है, तो पासवर्ड फ़ाइल निर्माण उपयोगिता स्थापित करने के लिए निम्न कमांड चलाएँ.

apt-get install -y अपाचे-बर्तन

अगला, पासवर्ड फ़ाइल और नीचे दिखाए गए अनुसार htpasswd टूल का उपयोग करके एक उपयोगकर्ता बनाएं। Htpasswd टूल Apache2-utils यूटिलिटी द्वारा दिया गया है.

sudo htpasswd -c / etc / apache2 / .htpasswd माइक

आप पुष्टि कर सकते हैं कि क्या आपने निम्नलिखित कमांड के माध्यम से एक उपयोगकर्ता और यादृच्छिक पासवर्ड सफलतापूर्वक बनाया है

cat etc / apache2 / .htpasswd

स्थान अनुभाग के अंदर, आप प्रमाणीकरण_ के लिए उपयोगकर्ताओं को प्रॉम्प्ट करने के लिए निम्नलिखित कोड पेस्ट कर सकते हैं.

स्थान / व्यवस्थापक {

basic_auth "व्यवस्थापक क्षेत्र";
भेषज_बासिक_सेर_फाइल / आदि / अपाचे 2 / .htpasswd;

}

अनुमति दें निर्देश का उपयोग करके

बेसिक_ऑथ डायरेक्टिव के अलावा, हम एक्सेस को प्रतिबंधित करने के लिए अनुमति निर्देश का उपयोग कर सकते हैं.

स्थान अनुभाग के अंदर, आप संवेदनशील क्षेत्र तक पहुंचने के लिए निर्दिष्ट आईपी पते की अनुमति देने के लिए निम्न कोड का उपयोग कर सकते हैं.

स्थान / व्यवस्थापक {
192.168.34.12 अनुमति दें;
192.168.12.34 अनुमति दें;
}

दुर्भावनापूर्ण गतिविधियों पर नज़र रखने के लिए लॉग कॉन्फ़िगर करें

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

error_log: आपको किसी विशेष फ़ाइल में लॉगिंग सेट करने की अनुमति देता है जैसे कि syslog या stderr। आप त्रुटि संदेशों के स्तर को भी निर्दिष्ट कर सकते हैं जिसे आप लॉग करना चाहते हैं.

access_log: उपयोगकर्ताओं को फ़ाइल access.log पर अनुरोध लिखने की अनुमति देता है

HTTP सेक्शन के अंदर, आप निम्न का उपयोग कर सकते हैं.

एचटीटीपी {

access_log लॉग / access.log संयुक्त;
error_log लॉग / चेतावनी .log चेतावनी;

}

डीडीओएस को रोकें

आप Nginx को DDOS हमले से निम्नलिखित तरीकों से सुरक्षित कर सकते हैं:

उपयोगकर्ताओं के अनुरोधों को सीमित करना 

आप मिनटों में उपयोगकर्ताओं द्वारा भेजे गए अनुरोध की दर को सीमित करने के लिए limit_req_zone और limit_req निर्देशों का उपयोग कर सकते हैं.

सर्वर अनुभाग में एम्बेडेड स्थान अनुभाग में निम्नलिखित कोड जोड़ें.

limit_req_zone $ Binary_remote_addr ज़ोन = एक: 10 मीटर दर = 30r / मी;

सर्वर {
स्थान /admin.html {
limit_req ज़ोन = एक;
}

}

कनेक्शन की संख्या को सीमित करें 

आप कुछ स्थानों या क्षेत्रों में कनेक्शन को सीमित करने के लिए limit_conn और limit_conn_zone निर्देशों का उपयोग कर सकते हैं। उदाहरण के लिए, नीचे दिया गया कोड ग्राहकों से एक विशिष्ट अवधि के लिए 15 कनेक्शन प्राप्त करता है.

निम्न कोड स्थान अनुभाग पर जाएगा.

limit_conn_zone $ Binary_remote_addr ज़ोन = addr: 10m;

सर्वर {

स्थान / उत्पाद / {
limit_conn Addr 10;

}
}

धीमे कनेक्शन को समाप्त करें   

आप टाइमआउट निर्देशों का उपयोग कर सकते हैं जैसे कि क्लाइंट_बॉडी_टाइमआउट और क्लाइंट_हाईडर_टाइमआउट को नियंत्रित करने के लिए कि क्लाइंट बॉडी और क्लाइंट हेडर से लिखने के लिए Nginx कितनी देर तक इंतजार करेगा।.

सर्वर अनुभाग के अंदर निम्नलिखित जोड़ें.

सर्वर {
client_body_timeout 5s;
client_header_timeout 5s;
}

यहां बताए अनुसार क्लाउड-आधारित समाधानों का लाभ उठाते हुए डीडीओएस हमलों को किनारे पर रोकना भी एक अच्छा विचार होगा.

निर्देशिका सूची को अक्षम करें

आप निर्देशिका लिस्टिंग को रोकने के लिए auto_index निर्देश का उपयोग कर सकते हैं जैसा कि नीचे दिए गए कोड में दिखाया गया है। निर्देशिका लिस्टिंग को अक्षम करने के लिए आपको इसे बंद पर सेट करने की आवश्यकता है.

स्थान / {
auto_index बंद;
}

निष्कर्ष

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

Jeffrey Wilson Administrator
Sorry! The Author has not filled his profile.
follow me
    Like this post? Please share to your friends:
    Adblock
    detector
    map