Nginx kimlik doğrulaması gerektiren bir ana bilgisayara proxy kullanmak nasıl kullanılır?


41

Proxy sunucusuna gönderilen HTTP Temel kimlik doğrulama bilgilerini de içerecek bir nginx proxy_pass yönergesi nasıl ayarlayabilirim?

Bu, proxy'ye ihtiyacım olan URL'nin bir örneğidir:

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

Son amaç, 1 sunucunun, proxy sunucusunun URI'sini göstermeden başka bir sunucudan (proxy sunucumuzdan) dosyaları sunmasına izin vermektir. Bu çalışma% 90 doğru şimdi burada bulunan Nginx config izleyerek doğru çalışıyor:

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

Proxy sunucusuna göndermek için yalnızca HTTP Temel kimlik doğrulamasını eklemem gerekiyor


@all: Bu çözümü kullanırken HTTP Temel kimlik doğrulamasına ihtiyacınız olduğundan emin olun - HTTP Digest Kimlik Doğrulaması değil;) Bunu çözene kadar hata ayıklamak oldukça zor oldu ... stackoverflow.com/questions/9534602/…
SimonSimCity

Yanıtlar:


57

Bir süre önce bununla ilgili bir yazı yazdım. Ayrıntılara buradan bakın:

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

Örneğin:

 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", "king: isnaked" base64 kodludur, böylece çalışması için

http: // kral: isnaked@6.6.6.6

Daha fazla bilgi için blog gönderisine göz atın.


2
Bağlantı koptu
Alex,

1
Link şimdi burada: shairosenfeld.blogspot.com/search?q=nginx kimsenin merak
etmesi

1
Daha zor bir şeylere ihtiyacım var
Ilja

7
Çözümünüz yeterince esnek değil. Kullanıcı adını kodlamak çok yararlı olabilir: anında şifre. Birincisi, nginx kullanıcı adı ayrıştırmalı: URL'den şifre, ikincisi nginx bu verileri kodlamalı ve uygun başlığa ayarlamalıdır. Kodlanmış kimlik bilgilerini kodlamak istemiyorum.
Johnny

Kurulumumda çalışırken "kötü istek" alıyorum .. herhangi bir fikrin var mı?
Spock

21

Bunu alvosu'nun cevabı ile aldım ancak base64 dizesinin tırnak içindeki "Temel" kelimesini girmek zorunda kaldım, böylece şöyle görünüyordu:

proxy_set_header Authorization "Basic dGVzdHN0cmluZw==";

1
Nginx ile anında kullanıcı adı: şifre nasıl kodlanacağını biliyor musunuz? Sabit kodlanmış kimlik bilgileri esnek değildir, çünkü kullanıcıyı URL'de belirtilen kimlik bilgileriyle doğrulamak istiyorum.
Johnny

1
Base64'e nginx wiki.nginx.org/HttpSetMiscModule#set_encode_base64 ile nasıl kodlanacağını buldum . Bu, kodlanmış kimlik bilgilerinden daha kullanışlıdır.
Johnny

Bu dokümanlara @Johnny bağlantılar artık burada: github.com/openresty/set-misc-nginx-module#set_encode_base64
Al Dass

5

Proxy_set_header Yetkilendirmesini "USER_AND_PASS" olarak ayarlayın; USER_AND_PASS = base64 (kullanıcı: pass)


3
anahtar kelimeyi eksik Basic.
Jan-Philip Gehrcke

2

İle nginx tarafından iletilen yetkilendirme başlığını kaldırın proxy_set_header Authorization "";.

Nginx'i temel auth yapacak şekilde konfigüre ettim ancak Authorizationbaşlık proxy_passdirektifin içinden geçiyordu ve alıcı son ikonu kaldıramadı.

# 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 "";
}

(Benim davama özel, bu hata iade edildi Reason: No AuthenticationProvider found for org.springframework.security.authentication.UsernamePasswordAuthenticationToken)

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.