प्रमाणीकरण की आवश्यकता वाले होस्ट को प्रॉक्सी से nginx का उपयोग कैसे करें?


41

मैं एक nginx प्रॉक्सी_पास निर्देश को कैसे सेट कर सकता हूं जिसमें प्रॉक्सी होस्ट को भेजी गई HTTP बेसिक प्रमाणीकरण जानकारी भी शामिल होगी?

यह उस URL का एक उदाहरण है जिसे मुझे प्रॉक्सी करने की आवश्यकता है:

http://username:password@192.168.0.5/export?uuid=1234567890

अंतिम लक्ष्य प्रॉक्सी सर्वर के यूआरआई को उजागर किए बिना 1 सर्वर को किसी अन्य सर्वर (जिस पर हम प्रॉक्सी कर रहे हैं) से फ़ाइलों को अनुमति देने के लिए है। मेरे पास यह 90% काम है जो अभी यहाँ मिले Nginx config का अनुसरण करने से है:

http://kovyrin.net/2010/07/24/nginx-fu-x-accel-redirect-remote/

मुझे केवल प्रॉक्सी सर्वर को भेजने के लिए HTTP बेसिक प्रमाणीकरण में जोड़ना होगा


@all: सुनिश्चित करें कि आपको इस समाधान का उपयोग करते समय HTTP बेसिक प्रमाणीकरण की आवश्यकता है - HTTP डाइजेस्ट ऑथेंटिकेशन नहीं;) जब तक मुझे पता नहीं चला, तब तक इसके चारों ओर डिबगिंग में काफी कठिन समय था ... stackoverflow.com/questions/9534602/…
SimonSCity

जवाबों:


57

मैंने कुछ समय पहले इस पर राइटअप किया था। यहां देखें विवरण:

http://shairosenfeld.blogspot.com/2011/03/authorization-header-in-nginx-for.html

उदाहरण के लिए:

 location / {
    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_pass http://6.6.6.6:80;
    proxy_set_header Authorization "Basic a2luZzppc25ha2Vk";
 }

"a2luZzppc25ha2Vk" है "राजा: isnaked" base64 एन्कोडेड, ताकि इसके लिए काम किया जा सके

http: // राजा: isnaked@6.6.6.6

अधिक जानकारी के लिए ब्लॉग पोस्ट देखने के लिए स्वतंत्र महसूस करें।


2
लिंक टूटा है
एलेक्स

1
लिंक अब यहाँ है: shairosenfeld.blogspot.com/search?q=nginx मामले किसी में सोच रहा है
सीकेएम

1
मुझे कुछ और कठिन चाहिए
Ilja

7
आपका समाधान पर्याप्त लचीला नहीं है। यह उपयोगकर्ता नाम कूटशब्द के लिए बहुत उपयोगी हो सकता है: मक्खी पर पासवर्ड। सबसे पहले, nginx को यूजरनेम को पार्स करना चाहिए: URL से पासवर्ड, दूसरी बात, nginx को इस डेटा को एनकोड करना होगा और उपयुक्त हेडर में सेट करना होगा। मैं हार्डकोड एन्कोडेड क्रेडेंशियल्स नहीं करना चाहता।
जॉनी

मेरे सेटअप पर इसे आज़माते समय मुझे "खराब अनुरोध" मिलता है .. कोई विचार?
स्पॉक

21

मुझे यह अल्वोसु के उत्तर के साथ काम कर रहा था लेकिन मुझे बेस 64 स्ट्रिंग के उद्धरण के अंदर "बेसिक" शब्द दर्ज करना था, इसलिए यह इस तरह दिखता था:

proxy_set_header Authorization "Basic dGVzdHN0cmluZw==";

1
क्या आप जानते हैं कि उपयोगकर्ता नाम को कैसे सांकेतिक शब्दों में बदलना: nginx के साथ मक्खी पर पासवर्ड? हार्डकॉक्ड क्रेडेंशियल लचीला नहीं है, क्योंकि मैं उपयोगकर्ता को URL में उनके द्वारा निर्दिष्ट क्रेडेंशियल्स के साथ प्रमाणित करना चाहता हूं।
जॉनी

1
मैंने पाया है कि nginx wiki.nginx.org/HttpSetMiscModule#set_encode_base64 के साथ base64 को कैसे एनकोड करना है । यह हार्डकोडेड क्रेडेंशियल्स की तुलना में अधिक उपयोगी है।
जॉनी

@ जॉनी लिंक उन डॉक्स के लिए अब यहां हैं: github.com/openresty/set-misc-nginx-module#set_encode_base64
Al Dass


2

उस प्राधिकरण शीर्ष लेख को निकालें जिसे nginx द्वारा अग्रेषित किया गया है proxy_set_header Authorization "";

मैंने nginx को मूलभूत रूप से कॉन्फ़िगर करने के लिए कॉन्फ़िगर किया Authorizationथा , लेकिन हेडर proxy_passनिर्देशन में पास हो रहा था और प्राप्त अंत टोकन को संभाल नहीं सका।

# Basic Auth
auth_basic "Private Stuff";
auth_basic_user_file /etc/nginx/.htpasswd;

location /server {
    proxy_pass http://172.31.31.140:9090;
    proxy_set_header Authorization "";
}

(मेरे मामले के लिए विशिष्ट, यह त्रुटि लौटा दी गई Reason: No AuthenticationProvider found for org.springframework.security.authentication.UsernamePasswordAuthenticationToken)

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.