Linux सर्वर पर Nginx को रिवर्स प्रॉक्सी के रूप में कॉन्फ़िगर करने की एक पूर्ण, सटीक गाइड — प्रॉक्सी हेडर, WebSockets, HTTPS, लोड बैलेंसिंग और कैशिंग, साथ ही प्रोडक्शन-रेडी कॉन्फ़िग जिसे आप कॉपी कर सकते हैं।
रिवर्स प्रॉक्सी क्या करता है
एक रिवर्स प्रॉक्सी एक या अधिक बैकएंड एप्लिकेशन के सामने बैठता है और क्लाइंट अनुरोधों को उन तक अग्रेषित करता है। अपने ऐप सर्वर (Node.js, Python, PHP-FPM, एक Docker कंटेनर) को सीधे इंटरनेट पर उजागर करने के बजाय, क्लाइंट Nginx से बात करते हैं, और Nginx एक निजी पते पर आपके ऐप से बात करता है।
यह आपको एक एकल सार्वजनिक प्रवेश बिंदु देता है जहाँ आप TLS को टर्मिनेट कर सकते हैं, कई बैकएंड के बीच ट्रैफ़िक को संतुलित कर सकते हैं, प्रतिक्रियाओं को कैश कर सकते हैं, रेट लिमिट लागू कर सकते हैं, और आंतरिक टोपोलॉजी को छिपा सकते हैं। यह प्रोडक्शन वेब ऐप्स के लिए मानक पैटर्न है — और यह Skyline Cloud के एक VPS या क्लाउड सर्वर के साथ स्वाभाविक रूप से जुड़ जाता है, जहाँ आपका डेटा PDPL और NCA अनुरूपता के लिए इन-किंगडम रहता है।
यह गाइड Ubuntu/Debian पाथ का उपयोग करती है, लेकिन हर डायरेक्टिव RHEL-परिवार के सिस्टम पर समान रूप से लागू होता है।
पूर्वापेक्षाएँ
sudoएक्सेस वाला एक Linux सर्वर (एक Skyline Cloud VPS या क्लाउड सर्वर अच्छा काम करता है)।- एक बैकएंड ऐप जो पहले से ही चल रहा है और स्थानीय रूप से सुन रहा है — उदाहरण के लिए
127.0.0.1:3000पर। - एक डोमेन (जैसे एक
.saडोमेन) जिसमें एकAरिकॉर्ड आपके सर्वर के सार्वजनिक IP की ओर इशारा करता हो।
चरण 1 — Nginx इंस्टॉल करें
sudo apt update
sudo apt install nginx -y
पुष्टि करें कि यह चल रहा है और बूट पर सक्षम है:
sudo systemctl status nginx
sudo systemctl enable nginx
यदि आप UFW का उपयोग करते हैं तो फ़ायरवॉल खोलें:
sudo ufw allow 'Nginx Full'
चरण 2 — रिवर्स प्रॉक्सी सर्वर ब्लॉक बनाएँ
Nginx /etc/nginx/conf.d/ से .conf में समाप्त होने वाली किसी भी फ़ाइल को लोड करता है, और Debian/Ubuntu पर यह /etc/nginx/sites-enabled/ को भी पढ़ता है। एक समर्पित फ़ाइल बनाएँ ताकि आप डिफ़ॉल्ट को न छुएँ:
sudo nano /etc/nginx/conf.d/app.conf
निम्नलिखित जोड़ें, app.example.com और बैकएंड पते को अपने स्वयं के पते से बदलते हुए:
server {
listen 80;
listen [::]:80;
server_name app.example.com;
location / {
proxy_pass http://127.0.0.1:3000;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_connect_timeout 60s;
proxy_send_timeout 60s;
proxy_read_timeout 60s;
}
}
प्रत्येक हेडर क्यों मायने रखता है
| डायरेक्टिव | उद्देश्य |
|---|---|
proxy_pass |
वह बैकएंड पता जिस पर Nginx अग्रेषित करता है। यहाँ कोई ट्रेलिंग स्लैश न होने से मूल URI पाथ बना रहता है। |
Host |
मूल होस्टनेम को पास करता है ताकि ऐप सही लिंक उत्पन्न करे और डोमेन के अनुसार रूट करे। |
X-Real-IP |
क्लाइंट का असली IP, जिसे प्रॉक्सी अन्यथा छिपा देता। |
X-Forwarded-For |
प्रत्येक प्रॉक्सी हॉप को जोड़ता है ताकि ऐप पूरी क्लाइंट श्रृंखला देख सके। |
X-Forwarded-Proto |
ऐप को बताता है कि मूल अनुरोध http था या https — TLS जोड़ने के बाद यह आवश्यक है। |
चरण 3 — टेस्ट करें और रीलोड करें
कॉन्फ़िगरेशन लागू करने से पहले हमेशा उसे सत्यापित करें। यह सिंटैक्स त्रुटियों को आपकी साइट को डाउन करने से पहले पकड़ लेता है:
sudo nginx -t
आपको syntax is ok और test is successful दिखना चाहिए। फिर रीलोड करें — reload कॉन्फ़िग को सहजता से फिर से पढ़ता है, लगभग शून्य व्यवधान के साथ, restart के विपरीत:
sudo systemctl reload nginx
http://app.example.com पर जाएँ और आपको Nginx के माध्यम से सर्व किया गया अपना बैकएंड ऐप दिखना चाहिए।
चरण 4 — WebSockets का समर्थन करें
यदि आपका ऐप WebSockets का उपयोग करता है (चैट, लाइव डैशबोर्ड, डेव सर्वर), तो आपको Upgrade और Connection हेडर को अग्रेषित करना होगा, अन्यथा कनेक्शन प्रोटोकॉल बदलने में विफल हो जाएगा। इन्हें उसी location ब्लॉक के अंदर जोड़ें:
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
चरण 2 की proxy_http_version 1.1; लाइन इसके काम करने के लिए आवश्यक है।
चरण 5 — एक मुफ़्त प्रमाणपत्र के साथ HTTPS जोड़ें
TLS को Nginx पर टर्मिनेट करें ताकि बैकएंड आंतरिक रूप से केवल सादा HTTP संभाले। Certbot इंस्टॉल करें और इसे स्वचालित रूप से SSL कॉन्फ़िगर करने दें:
sudo apt install certbot python3-certbot-nginx -y
sudo certbot --nginx -d app.example.com
Certbot आपके सर्वर ब्लॉक को संपादित करता है, एक listen 443 ssl सर्वर जोड़ता है, और एक स्वचालित नवीनीकरण टाइमर सेट करता है। एक ड्राई रन के साथ सत्यापित करें कि नवीनीकरण काम करता है:
sudo certbot renew --dry-run
HTTP/2 सक्षम करने के लिए, SSL ब्लॉक में listen लाइन को क्रॉस-वर्शन फ़ॉर्म में बदलें:
listen 443 ssl http2;
अलग
http2 on;डायरेक्टिव के बजायlisten 443 ssl http2;का उपयोग करें — संयुक्त फ़ॉर्म सभी वर्तमान Nginx संस्करणों पर काम करता है।
चरण 6 — कई बैकएंड के बीच लोड बैलेंस करें
ट्रैफ़िक को कई ऐप इंस्टेंस के बीच वितरित करने के लिए, एक upstream समूह परिभाषित करें और नाम से उस पर प्रॉक्सी करें। upstream ब्लॉक को फ़ाइल के शीर्ष पर, server के बाहर रखें:
upstream backend_pool {
least_conn;
server 127.0.0.1:3000;
server 127.0.0.1:3001;
server 127.0.0.1:3002 backup;
keepalive 32;
}
server {
listen 80;
server_name app.example.com;
location / {
proxy_pass http://backend_pool;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Connection "";
}
}
least_connप्रत्येक अनुरोध को सबसे कम सक्रिय कनेक्शन वाले बैकएंड पर भेजता है। डिफ़ॉल्ट (कोई डायरेक्टिव नहीं) राउंड-रॉबिन है।backupएक ऐसे सर्वर को चिह्नित करता है जिसका उपयोग केवल तभी होता है जब अन्य डाउन हों।keepalive 32अपस्ट्रीम कनेक्शन का पुन: उपयोग करता है। इसका उपयोग करते समय, प्रति अनुरोध उन्हें बंद होने से बचाने के लिएproxy_set_header Connection "";सेट करें।
चरण 7 — बैकएंड प्रतिक्रियाओं को कैश करें (वैकल्पिक)
कैशिंग उस सामग्री के लिए आपके ऐप पर लोड को कम करती है जो प्रति उपयोगकर्ता नहीं बदलती। http कॉन्टेक्स्ट में कैश स्टोर परिभाषित करें (उदाहरण के लिए /etc/nginx/nginx.conf में):
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=app_cache:10m
max_size=1g inactive=60m use_temp_path=off;
फिर इसे location ब्लॉक के अंदर संदर्भित करें:
proxy_cache app_cache;
proxy_cache_valid 200 302 10m;
proxy_cache_valid 404 1m;
add_header X-Cache-Status $upstream_cache_status;
X-Cache-Status प्रतिक्रिया हेडर HIT, MISS, या BYPASS रिपोर्ट करता है, ताकि आप अपने ब्राउज़र के नेटवर्क टैब से कैशिंग की पुष्टि कर सकें।
समस्या निवारण
- 502 Bad Gateway — बैकएंड तक नहीं पहुँचा जा सकता। पुष्टि करें कि यह
ss -tlnp | grep 3000से सुन रहा है औरproxy_passमें पता मेल खाता है। - 504 Gateway Timeout — एक धीमा बैकएंड;
proxy_read_timeoutबढ़ाएँ। - HTTPS के पीछे ऐप
http://लिंक उत्पन्न करता है — सुनिश्चित करें किX-Forwarded-Proto $schemeसेट है और आपका ऐप इस पर भरोसा करता है। - लॉग जाँचें:
sudo tail -f /var/log/nginx/error.log।
समापन
अब आपके पास एक प्रोडक्शन-ग्रेड रिवर्स प्रॉक्सी है: TLS टर्मिनेशन, सही क्लाइंट हेडर, WebSocket समर्थन, लोड बैलेंसिंग, और वैकल्पिक कैशिंग। इसे अपने उपयोगकर्ताओं और अपने डेटा के करीब चलाएँ — Skyline Cloud सब कुछ इन-किंगडम होस्ट करता है, PDPL/NCA अनुरूपता, स्थानीय अरबी समर्थन, और पारदर्शी मूल्य निर्धारण के साथ। इस प्रॉक्सी को मैनेज्ड बिज़नेस ईमेल होस्टिंग के साथ जोड़कर एक पूर्ण स्टैक बनाएँ, और सऊदी वेब होस्टिंग हब में और अधिक गाइड देखें।
तैनात करने के लिए तैयार हैं? अपना Skyline Cloud खाता बनाएँ और मिनटों में एक VPS शुरू करें।
Comments
0 total · 0 threads