रिवर्स प्रॉक्सी पोर्ट 80 और 443 पर सार्वजनिक ट्रैफ़िक लेता है और उसे उन ऐप तक पहुँचाता है जो केवल लोकल पर सुनते हैं। इससे HTTPS, एक IP पर कई साइटें, और लॉग व सीमाओं के लिए एक ही जगह मिलती है। यह गाइड इसे VPS Linux Infrawire पर Node.js, Python या Docker ऐप के लिए सेट करती है।
📋 पूर्वापेक्षाएँ
- root SSH एक्सेस वाला Linux VPS (Ubuntu 24.04 / Debian 12 या AlmaLinux 9 / Rocky 9)। IP और root पासवर्ड कस्टमर एरिया में हैं।
- डोमेन
example.com, जिसके A/AAAA रिकॉर्डVPS_IPकी ओर इशारा करते हों। - लोकल पोर्ट पर सुनने वाला ऐप, जैसे
127.0.0.1:3000।
📦 Nginx इंस्टॉल करें
Bash# Debian / Ubuntu sudo apt update && sudo apt install -y nginx # AlmaLinux / Rocky sudo dnf install -y nginx sudo systemctl enable --now nginx
AlmaLinux/Rocky पर SELinux डिफ़ॉल्ट रूप से Nginx को बैकएंड से जुड़ने नहीं देता। इसे एक बार अनुमति दें:
Bashsudo setsebool -P httpd_can_network_connect 1
🚀 प्रॉक्सी के पीछे पहला ऐप
आपका ऐप 0.0.0.0 पर नहीं बल्कि 127.0.0.1 पर सुने, ताकि वह केवल Nginx के ज़रिए पहुँच में रहे। भाषा कोई भी हो, पैटर्न वही है: पोर्ट 3000 पर node server.js, Python के लिए gunicorn -b 127.0.0.1:8000 app:app, या docker run -d -p 127.0.0.1:3000:80 IMAGE से प्रकाशित कंटेनर।
/etc/nginx/sites-available/example.com बनाएँ (AlmaLinux/Rocky पर /etc/nginx/conf.d/example.com.conf इस्तेमाल करें):
Nginx1server { 2 listen 80; 3 listen [::]:80; 4 server_name example.com; 5 6 location / { 7 proxy_pass http://127.0.0.1:3000; 8 proxy_http_version 1.1; 9 proxy_set_header Host $host; 10 proxy_set_header X-Real-IP $remote_addr; 11 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 12 proxy_set_header X-Forwarded-Proto $scheme; 13 } 14}
Debian/Ubuntu पर इसे सक्षम करें, फिर जांचकर रीलोड करें:
Bashsudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/ sudo nginx -t && sudo systemctl reload nginx
X-Forwarded-* हेडर ऐप को क्लाइंट का असली IP बताते हैं और यह भी कि विज़िटर ने HTTPS इस्तेमाल किया या नहीं। इनके बिना आपका ऐप सिर्फ़ 127.0.0.1 देखता है और http:// लिंक बना सकता है। कई फ़्रेमवर्क को प्रॉक्सी पर भरोसा करने के लिए भी कहना पड़ता है (जैसे Express में app.set('trust proxy', 1))।
🔌 WebSocket सपोर्ट
WebSocket को HTTP अपग्रेड हेडर चाहिए। http संदर्भ के शुरू में एक map जोड़ें (जैसे /etc/nginx/conf.d/websocket.conf में):
Nginxmap $http_upgrade $connection_upgrade { default upgrade; '' close; }
फिर location ब्लॉक में:
Nginxproxy_set_header Upgrade $http_upgrade; proxy_set_header Connection $connection_upgrade;
⏱️ टाइमआउट और बॉडी साइज़
डिफ़ॉल्ट 60 सेकंड और 1 MB हैं। धीमे एंडपॉइंट या अपलोड के लिए इन्हें बदलें:
Nginxproxy_connect_timeout 5s; proxy_read_timeout 120s; proxy_send_timeout 120s; client_max_body_size 50m;
लंबे समय चलने वाले WebSocket के लिए proxy_read_timeout बढ़ाएँ (जैसे 3600s) या ऐप से ping भिजवाएँ।
🔒 Certbot के साथ HTTPS
पहले फ़ायरवॉल में 80 और 443 खोलें, फिर:
Bash# Debian / Ubuntu sudo apt install -y certbot python3-certbot-nginx sudo certbot --nginx -d example.com
AlmaLinux/Rocky पर Certbot के लिए पहले sudo dnf install -y epel-release, फिर sudo dnf install -y certbot python3-certbot-nginx चलाएँ। Certbot सर्टिफ़िकेट को आपके server ब्लॉक में जोड़ता है, HTTP से HTTPS रीडायरेक्ट का विकल्प देता है और ऑटो-रिन्यूअल लगाता है। इसे इससे जांचें:
Bashsudo certbot renew --dry-run
🗂️ एक VPS पर कई ऐप
हर डोमेन के लिए एक server ब्लॉक बनाएँ, हर एक का अपना server_name और अपना लोकल पोर्ट:
Nginx1server { 2 listen 80; 3 server_name app1.example.com; 4 location / { proxy_pass http://127.0.0.1:3000; } 5} 6 7server { 8 listen 80; 9 server_name app2.example.com; 10 location / { proxy_pass http://127.0.0.1:8000; } 11}
हर ब्लॉक में प्रॉक्सी हेडर दोहराएँ, फिर Certbot को -d app1.example.com -d app2.example.com के साथ चलाएँ। आप पाथ के आधार पर भी बाँट सकते हैं (location /api/ { proxy_pass http://127.0.0.1:8000/; }); अंत का स्लैश तब प्रीफ़िक्स हटा देता है।
✅ जांच
Bashcurl -I https://example.com ss -ltnp | grep -E ':(80|443|3000)' sudo tail -f /var/log/nginx/error.log
बैकएंड पोर्ट केवल 127.0.0.1 से बंधा होना चाहिए, जबकि Nginx 80 और 443 पर सुनता है।
🛠️ समस्या निवारण
502 Bad Gateway। ऐप रुका है या दूसरे पोर्ट पर है। ss -ltnp से जांचें और उसे शुरू करें। AlmaLinux/Rocky पर एरर लॉग में Permission denied का मतलब है कि ऊपर वाला SELinux बूलियन गायब है।
504 Gateway Timeout। बैकएंड proxy_read_timeout से ज़्यादा समय ले रहा है। इसे बढ़ाएँ या एंडपॉइंट को ऑप्टिमाइज़ करें।
WebSocket कट जाता है या 400/426 के साथ विफल होता है। Upgrade और Connection हेडर गायब हैं, या proxy_http_version 1.1; नहीं है।
लॉग में गलत क्लाइंट IP। X-Forwarded-For भेजा जा रहा है लेकिन आपका ऐप प्रॉक्सी पर भरोसा नहीं करता। अपने फ़्रेमवर्क की ट्रस्ट सेटिंग चालू करें।
🎉 आपके ऐप अब Nginx के पीछे HTTPS, साफ़ हेडर और उतनी साइटों की जगह के साथ चल रहे हैं जितनी आपका VPS संभाल सके।