web-dev-qa-db-fra.com

Comment utiliser nginx pour proxy vers un hôte nécessitant une authentification?

Comment puis-je configurer une directive nginx proxy_pass qui inclura également les informations d'authentification HTTP Basic envoyées à l'hôte proxy?

Ceci est un exemple de l'URL que je dois utiliser pour proxy:

http://username:[email protected]/export?uuid=1234567890

L'objectif final est d'autoriser 1 serveur à présenter des fichiers à partir d'un autre serveur (celui sur lequel nous procurons des proxy) sans exposer l'URI du serveur proxy. J'ai ce travail correct à 90% maintenant en suivant la configuration Nginx trouvée ici:

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

J'ai juste besoin d'ajouter l'authentification HTTP Basic pour envoyer au serveur proxy

46
bwizzy

J'ai obtenu ce travail avec la réponse d'alvosu mais j'ai dû entrer le mot "Basic" à l'intérieur de la citation de la chaîne base64 pour qu'il ressemble à ceci:

proxy_set_header Authorization "Basic dGVzdHN0cmluZw==";
21
bwizzy

J'ai fait un résumé à ce sujet il y a quelque temps. Voir les détails ici:

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

Par exemple:

 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" est "king: isnaked" encodé en base64, ce qui fonctionnerait pour

http: // king: [email protected]

N'hésitez pas à consulter le blog pour plus de détails.

59
Shai

Définissez l'autorisation proxy_set_header "USER_AND_PASS", où USER_AND_PASS = base64 (utilisateur: passe)

4
alvosu

Supprimez l'en-tête d'autorisation qui est transmis transmis par nginx avec proxy_set_header Authorization "";.

J'ai configuré nginx pour faire l'authentification de base mais l'en-tête Authorization était transmis dans le proxy_pass directive et l'extrémité réceptrice n'a pas pu gérer le jeton.

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

(Spécifique à mon cas, cette erreur a été renvoyée Reason: No AuthenticationProvider found for org.springframework.security.authentication.UsernamePasswordAuthenticationToken)

2
sunapi386