nginx를 사용하여 인증이 필요한 호스트에 프록시하는 방법은 무엇입니까?


41

프록시 호스트로 전송되는 HTTP 기본 인증 정보도 포함하는 nginx proxy_pass 지시문을 어떻게 설정합니까?

이것은 내가 프록시 해야하는 URL의 예입니다.

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

최종 목표는 프록시 서버의 URI를 노출시키지 않고 하나의 서버가 다른 서버 (프록시하려는 서버)에서 파일을 제공하는 것입니다. 여기에서 찾은 Nginx 구성을 따라이 작업을 90 % 올바르게 수행했습니다.

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

프록시 서버로 보내려면 HTTP 기본 인증을 추가하면됩니다.


@all : 확인 당신이 필요로하는 HTTP 기본 인증이 솔루션을 사용하는 경우 -하지 HTTP 다이제스트 인증) 꽤 힘든 시간을 내가 그것을 알아 냈 때까지 주위 디버깅을했다 ... stackoverflow.com/questions/9534602/...
SimonSimCity

답변:


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"는 "king : isnaked"base64로 인코딩되어 있으므로

http : // king : isnaked@6.6.6.6

자세한 내용은 블로그 게시물을 확인하십시오.


2
연결이 끊어졌습니다
Alex

1
링크는 지금 여기 있습니다 : shairosenfeld.blogspot.com/search?q=nginx 누군가 궁금해하는 경우
ckm

1
좀 더 어려운 것이 필요합니다
Ilja

7
솔루션이 충분히 유연하지 않습니다. username : password를 즉시 인코딩하는 것이 매우 유용 할 수 있습니다. 먼저, nginx는 URL에서 username : password를 구문 분석해야하며, 둘째, nginx는이 데이터를 인코딩하고 적절한 헤더에 설정해야합니다. 인코딩 된 자격 증명을 하드 코딩하고 싶지 않습니다.
Johnny

설정에서 시도 할 때 "잘못된 요청"이 표시됩니다. 어떤 아이디어입니까?
Spock

21

나는 alvosu의 대답 으로이 작업을했지만 base64 문자열의 인용 부호 안에 "Basic"이라는 단어를 입력해야하므로 다음과 같이 보입니다.

proxy_set_header Authorization "Basic dGVzdHN0cmluZw==";

1
nginx를 사용하여 username : password를 즉시 인코딩하는 방법을 알고 있습니까? URL에 지정된 자격 증명으로 사용자를 인증하고 싶기 때문에 하드 코딩 된 자격 증명은 유연하지 않습니다.
Johnny

1
nginx wiki.nginx.org/HttpSetMiscModule#set_encode_base64 사용하여 base64로 인코딩하는 방법을 찾았 습니다 . 이것은 하드 코딩 된 자격 증명보다 유용합니다.
Johnny

그 문서에 대한 @Johnny 링크는 다음과 같습니다. github.com/openresty/set-misc-nginx-module#set_encode_base64
Al Dass

5

proxy_set_header 권한 부여 "USER_AND_PASS"를 설정하십시오. 여기서 USER_AND_PASS = base64 (user : pass)


3
키워드가 없습니다 Basic.
Jan-Philip Gehrcke

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)

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.