Nginx-转发HTTP AUTH-用户?


13

我对Nginx和Jenkins(Hudson)感到有些麻烦。我正在尝试使用Nginx作为具有HTTP基本身份验证的Jenkins实例的反向代理。

到目前为止,它仍然有效,但是我不知道如何通过身份验证用户名传递标头?

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

Answers:


16

尝试将此指令添加到您的位置块

proxy_set_header Authorization $http_authorization;
proxy_pass_header  Authorization;

正在传递此标头:用户名:Basic YXJuZTpraWxsZXI,不是来自http auth的正确名称(;
opHASnoNAME 2013年

6
这必须是base64编码的字符串en.wikipedia.org/wiki/Basic_access_authentication#cite_note-8尝试对其进行解码
Andrei Mikhaltsov

授权标头必须是base64编码的标头,是的。但这不是问题所在。问题是关于在标头(而不是完整的授权标头)中传递auth用户名。
奥利(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 '19
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.