nginx를 사용하여 인증이 필요한 호스트에 프록시하는 방법은 무엇입니까? 않고 하나의 서버가 다른 서버 (프록시하려는

프록시 호스트로 전송되는 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 기본 인증을 추가하면됩니다.



답변

나는 얼마 전에 이것에 대해 글을 썼다. 자세한 내용은 여기를 참조하십시오.

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

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


답변

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

proxy_set_header Authorization "Basic dGVzdHN0cmluZw==";

답변

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


답변

과의 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)