Nginx-HTTP AUTH 전달-사용자?


13

Nginx와 Jenkins (Hudson)에 문제가 있습니다. HTTP 기본 인증으로 Jenkins 인스턴스의 Nginx를 리버스 프록시로 사용하려고합니다.

지금까지 작동하지만 인증 사용자 이름으로 헤더를 전달하는 방법을 모르겠습니다.

location / {
  auth_basic "Restricted";
  auth_basic_user_file /usr/share/nginx/.htpasswd;
  sendfile off;

  proxy_pass         http://192.168.178.102:8080;
  proxy_redirect     default;
  proxy_set_header   Host             $http_host;
  proxy_set_header   X-Real-IP        $remote_addr;
  proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
  proxy_set_header   X-Forwarded-User $http_authorization; 
  proxy_max_temp_file_size 0;

  #this is the maximum upload size
  client_max_body_size       10m;
  client_body_buffer_size    128k;

  proxy_connect_timeout      90;
  proxy_send_timeout         90;
  proxy_read_timeout         90;             
  proxy_buffer_size          4k;
  proxy_buffers              4 32k;
  proxy_busy_buffers_size    64k;
  proxy_temp_file_write_size 64k;

}


1
"X-Forwared-User"에서 여분의 'd'를 원할 것입니다.
Paul

답변:


16

이 지시문을 위치 블록에 추가하십시오

proxy_set_header Authorization $http_authorization;
proxy_pass_header  Authorization;

이 헤더는 다음과 같습니다. 사용자 이름 : 기본 YXJuZTpraWxsZXI, http auth의 올바른 이름이 아님 (;
opHASnoNAME

6
이 코드는 base64로 인코딩 된 문자열이어야합니다. en.wikipedia.org/wiki/Basic_access_authentication#cite_note-8 디코딩 시도
Andrei Mikhaltsov

권한 부여 헤더는 base64로 인코딩 된 헤더 여야합니다 (예). 그러나 그것은 그 질문에 관한 것이 아닙니다. 문제는 전체 인증 헤더가 아닌 헤더에 인증 사용자 이름을 전달하는 것입니다.
Olli

1
YXJuZTpraWxsZXI디코드 arne:killer-좋은 예 @opHASnoNAME :-)
Enda Farrell

pass_header와 set_header ...? 이 효과가 두 배나 똑같지 않습니까? 둘 다 작동해야합니까?
phip1611

6

Jenkins 리버스 프록시 인증 플러그인과 함께 작동하게하려면 다음을 수행하십시오.

proxy_set_header Authorization "";
proxy_set_header X-Forwarded-User $remote_user;

Authorization헤더를 재설정하지 않으면 nginx는 기본적으로이를 전달하고 리버스 프록시 인증 플러그인을 활성화하면 Jenkins (jetty)가 사용자를 다시 인증하려고 시도하고 실패합니다.

nginx 버전 1.12.1, Jenkins 2.113.


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