रिवर्स प्रॉक्सी: एक एड्रेस पर कई एप्लिकेशन
डोमेन और पाथ के हिसाब से एक पब्लिक VDS एड्रेस को कई एप्लिकेशन में कैसे बाँटें, हेडर सही तरीके से पास करें, और WebSocket को न तोड़ें।
23 अगस्त 2026 को अपडेट किया गया
एक मशीन का एक ही पब्लिक IPv4 पता होता है, लेकिन उस पर आमतौर पर कई एप्लिकेशन चलते हैं। रिवर्स प्रॉक्सी पोर्ट 80 और 443 पर आने वाली सभी रिक्वेस्ट लेता है और डोमेन नाम या पाथ के हिसाब से उन्हें अंदरूनी सर्विसेज़ तक पहुँचाता है। यही एक सर्टिफिकेट और साझा लॉग भी संभालता है।
लेआउट
हर एप्लिकेशन अपने अलग लोकल पोर्ट पर और सिर्फ़ 127.0.0.1 पर सुनता है:
- फ्रंटएंड साइट —
127.0.0.1:3000; - API —
127.0.0.1:8000; - मॉनिटरिंग डैशबोर्ड —
127.0.0.1:9090.
बाहर सिर्फ़ Nginx खुला रहता है। यह जाँचने के लिए कि कोई एप्लिकेशन सीधे एक्सपोज़ नहीं है:
ss -tulpn | grep LISTEN
0.0.0.0:3000 जैसी लाइनों का मतलब है कि सर्विस इंटरनेट से सीधे पहुँची जा सकती है — प्रॉक्सी को बायपास करके और बिना एन्क्रिप्शन के।
डोमेन के हिसाब से
server {
listen 80;
server_name app.example.ru;
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;
}
}
server {
listen 80;
server_name api.example.ru;
location / {
proxy_pass http://127.0.0.1:8000;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
X-Forwarded-For के बिना एप्लिकेशन को हर रिक्वेस्ट 127.0.0.1 से आती दिखती है, और IP पर आधारित सारी पाबंदियाँ काम करना बंद कर देती हैं।
पाथ के हिसाब से
location /api/ {
proxy_pass http://127.0.0.1:8000/;
}
यहाँ proxy_pass में आखिरी स्लैश मायने रखता है: उसके साथ /api प्रीफ़िक्स हट जाता है और एप्लिकेशन को /users मिलता है; उसके बिना उसे /api/users मिलता है। प्रॉक्सी पर होने वाले आधे “रहस्यमय 404” ठीक इसी वजह से होते हैं।
WebSocket और लंबे रिस्पॉन्स
location /ws/ {
proxy_pass http://127.0.0.1:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_read_timeout 3600s;
}
Upgrade/Connection की जोड़ी के बिना हैंडशेक के तुरंत बाद कनेक्शन टूट जाता है; टाइमआउट बढ़ाए बिना एक मिनट की चुप्पी के बाद टूट जाता है।
आम गलतियाँ
| लक्षण | वजह |
|---|---|
502 Bad Gateway | एप्लिकेशन चल नहीं रहा या किसी और पोर्ट पर सुन रहा है |
504 Gateway Time-out | एप्लिकेशन proxy_read_timeout से ज़्यादा समय ले रहा है |
| अनंत रीडायरेक्ट | एप्लिकेशन को HTTPS की जानकारी नहीं है — X-Forwarded-Proto पास करें |
| फ़ाइल अपलोड टूट जाते हैं | client_max_body_size बहुत छोटा है; डिफ़ॉल्ट 1 MB है |
| एप्लिकेशन लॉग में वही IP | X-Forwarded-For पास नहीं हो रहा |
आगे: कई साइटें, सर्टिफिकेट, ऑटोमैटिक HTTPS के साथ Caddy।
प्रॉक्सी पर लगा एक सर्टिफिकेट उसके पीछे के सभी एप्लिकेशन को कवर करता है।
127.0.0.1पर होने वाले अंदरूनी कनेक्शन को एन्क्रिप्शन की ज़रूरत नहीं — वे मशीन से बाहर ही नहीं जाते।