NGINX को विभिन्न पोर्ट नंबरों के लिए रिवर्स प्रॉक्सी के रूप में कैसे कॉन्फ़िगर करें?


15
I have NGINX configured like this as a reverse proxy for http requests:

server {
    listen 80;
    server_name 203.0.113.2;

    proxy_set_header X-Real-IP  $remote_addr; # pass on real client IP

    location / {
        proxy_pass http://203.0.113.1:3000;
    }
}

मैं प्रॉक्सी ssh (पोर्ट 22) के अनुरोध भी करना चाहता हूं। क्या मैं उसी कॉन्फ़िगरेशन फ़ाइल में इस तरह एक और सर्वर ब्लॉक जोड़ सकता हूं:

server {
    listen 22;
    server_name 203.0.113.2;

    proxy_set_header X-Real-IP  $remote_addr; # pass on real client IP

    location / {
        proxy_pass http://203.0.113.1:22;
    }
}

ऐसा है कि अंतिम परिणाम यह है:

server {
    listen 80;
    server_name 203.0.113.2;

    proxy_set_header X-Real-IP  $remote_addr; # pass on real client IP

    location / {
        proxy_pass http://203.0.113.1:3000;
    }
}
server {
    listen 22;
    server_name 203.0.113.2;

    proxy_set_header X-Real-IP  $remote_addr; # pass on real client IP

    location / {
        proxy_pass http://203.0.113.1:22;
    }
}

टीआईए,
ओले


2
nginxएक httpप्रॉक्सी के रूप में कार्य कर रहा है । यदि आप इसे प्रॉक्सी पोर्ट 22 को रिवर्स करने के लिए सेट करते हैं, तो यह आपको SSH ट्रैफ़िक को पास करने की अनुमति नहीं देगा - केवल httpSSH सर्वर पर ट्रैफ़िक, जो स्पष्ट रूप से विफल हो जाएगा।
garethTheRed

HAProxy की जाँच करें ।

जवाबों:


13

Ssh प्रोटोकॉल HTTP पर आधारित नहीं है, और, के रूप में इस तरह के, नियमित रूप से के माध्यम से प्रॉक्सी नहीं किया जा सकता है proxy_passकीngx_http_proxy_module

हालाँकि, हाल ही में, nginx 1.9.0 (2016-04-26 पर 1.10.0 के साथ स्थिर के रूप में जारी) के साथ शुरू हुआ , nginx ने TCP स्ट्रीम प्रॉक्सिंग करने के लिए समर्थन हासिल किया , जिसका अर्थ है कि यदि आपके पास nginx का हाल ही में पर्याप्त संस्करण है, आप वास्तव में, इसके साथ प्रॉक्सी ssh कनेक्शन कर सकते हैं (हालाँकि, ध्यान दें कि आप X-Real-IPप्रॉक्सी कनेक्शन की तरह कुछ भी नहीं जोड़ पाएंगे , क्योंकि यह HTTP पर आधारित नहीं है)।

अधिक जानकारी और उदाहरणों के लिए, इस पर एक नज़र डालें:


8

Nginx संस्करण 1.9.0 के बाद से, NGINX ngx_stream_core_module मॉड्यूल का समर्थन करता है, इसे --with- स्ट्रीम के साथ सक्षम किया जाना चाहिए। जब स्ट्रीम मॉड्यूल सक्षम होता है तो वे प्रोटोकॉल tcp प्रॉक्सी ssh के लिए संभव होते हैं

stream {
    upstream ssh {
        server 192.168.1.12:22;
    }
        server {
        listen        12345;
        proxy_pass    ssh;

    }

}

https://www.nginx.com/resources/admin-guide/tcp-load-balancing/


यह nginx की सभी अच्छी सुविधा है - लेकिन IMHO यह बेकार है जब आप वास्तविक रिवर्स प्रॉक्सी लेना चाहते हैं जैसे कि nginx HTTP के लिए एकदम सही काम करता है। बात यह है कि धाराओं का दृष्टिकोण सरल NAT है - इसलिए मैं उस कार्य को एज राउटर पर करना चाहूंगा। मैं यहाँ क्या करना चाहता / चाहूंगी - ठीक वैसा ही फीचर है जो HTTP रिवर्स प्रॉक्सी के रूप में सेट किया गया है। दूसरे शब्दों में, मेरे पास केवल एक सार्वजनिक आईपी पता है - इस प्रकार पोर्ट 22 केवल एक मशीन के लिए उपलब्ध है - लेकिन अगर एक फॉर्म में अनुरोधों को अलग करने का एक तरीका था ssh me@srv1.my.netऔर ssh me@srv2.my.net- यह बहुत अच्छा होगा। यह प्रोटोकॉल सीमा है (SSH DNS नाम क्लाइंट उपयोगों को नहीं देगा)
stamster

@stamster, आप पहले से ही लगभग एक ही काम कर सकते हैं, या तो अलग-अलग पोर्ट नंबर (जैसे, 122 के लिए srv1और 222 के लिए srv2) का उपयोग करके, या नेस्टेड ssh सत्र का उपयोग करके, जहां आप पहली बार सार्वजनिक सर्वर / आईपी में, और वहां से ssh। पत्तों में ssh; जैसे, ssh user@example.org 'ssh user@192.168.5.1'
cnst

1
नहीं, आवश्यकता / विचार गंतव्य पोर्ट के रूप में डिफ़ॉल्ट पोर्ट (22 या किसी अन्य सेवा ..) का उपयोग करना है, और फिर DNS नाम या तो के आधार पर ट्रैफ़िक को रूट करना है। जैसे हम सभी nginx को रिवर्स वेब http प्रॉक्सी सर्वर के रूप में उपयोग कर रहे हैं, इसलिए प्रत्येक डोमेन डिफ़ॉल्ट पोर्ट 80, 443 और फिर nginx मार्गों को प्रॉक्सी नियमों के आधार पर लक्षित करता है। बेशक ग्राहक के पास HOSTहेडर होता है इसलिए यह भेद करना आसान होता है कि वह किस साइट को लक्षित करता है ... नेस्टेड एसएसएच सत्र एक प्रकार का समाधान है लेकिन एक गड़बड़ है - हालांकि यह काम करता है। सबसे KISS और विश्वसनीय समाधान के रूप में अच्छे पुराने नेट - मैं हमारे किनारे नेटवर्क पर विभिन्न बंदरगाहों के साथ समाप्त हो गया।
स्टैमस्टर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.