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.