65 votes

Comment utiliser nginx comme 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 du proxy ?

Voici un exemple de l'URL vers laquelle je dois me diriger :

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

L'objectif final est de permettre à un serveur de présenter les fichiers d'un autre serveur (celui vers lequel nous nous dirigeons) sans exposer l'URI du serveur proxy. J'ai réussi à faire fonctionner ce système à 90% en suivant la configuration de 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 de base à envoyer au serveur proxy.

76voto

Shai Points 907

J'ai fait un article sur ce sujet il y a quelques 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" codé en base64, donc cela fonctionnerait pour

http://king:isnaked@6.6.6.6

N'hésitez pas à consulter l'article du blog pour plus de détails.

27voto

Mike Points 11

J'ai réussi à le faire fonctionner avec la réponse d'alvosu, mais j'ai dû entrer le mot "Basic" à l'intérieur des guillemets de la chaîne base64, de sorte que cela ressemblait à ceci :

proxy_set_header Authorization "Basic dGVzdHN0cmluZw==";

6voto

alvosu Points 8259

Définir

proxy_set_header Authorization "Basic USER_AND_PASS"

donde USER_AND_PASS = base64(user:pass) .

5voto

Jeroen Teeuwen Points 331

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

J'ai configuré nginx pour qu'il effectue l'authentification de base, mais les Authorization était transmise dans l'en-tête proxy_pass et le destinataire n'a pas pu traiter 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 "";
}

(Dans mon cas, l'erreur suivante a été retournée Reason: No AuthenticationProvider found for org.springframework.security.authentication.UsernamePasswordAuthenticationToken )

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X