Authentication Nginx反向代理在Jenkins中导致500个内部服务器错误

Authentication Nginx反向代理在Jenkins中导致500个内部服务器错误,authentication,nginx,jenkins,Authentication,Nginx,Jenkins,我有一个面向公众的jenkins,我想用nginx/fail2ban保护它。在我在nginx中启用基本身份验证之前,nginx反向代理非常有效。当我激活nginx basic auth时,jenkins给出一个500内部服务器错误 nginx配置: location /jenkins/ { auth_basic "Development"; auth_basic_user_file /etc/nginx/.htpasswd;

我有一个面向公众的jenkins,我想用nginx/fail2ban保护它。在我在nginx中启用基本身份验证之前,nginx反向代理非常有效。当我激活nginx basic auth时,jenkins给出一个500内部服务器错误

nginx配置:

    location /jenkins/ {
            auth_basic "Development";
            auth_basic_user_file /etc/nginx/.htpasswd;

            rewrite ^/jenkins(/.*)$ $1 break;
            proxy_pass http://127.0.0.1:8080$request_uri;
            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_set_header X-Forwarded-Proto $scheme;
            proxy_set_header X-Forwarded-User $remote_user;
            proxy_redirect http://127.0.0.1:8080 $scheme://xxxxx.com.au;
    }
nginx访问日志:

XXX.XX.XX.XXX - mark [04/Jun/2017:12:01:35 +1000] "GET /jenkins/login?from=%2Fjenkins%2F HTTP/1.1" 500 595 "https://xxxxx.com.au/jenkins/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36" "-"
值得注意的是:

  • 如果我在nginx config中注释掉auth_basic条目,那么代理 使用jenkins local auth可以很好地工作
  • jenkins日志中没有任何内容,即使我升级了调试级别 到九点
  • 如果我授权nginx,然后关闭基本身份验证 一切都很好。即X-Forwarded-User报头继续 设置(尽管身份验证已关闭)并转发给jenkins 根据其本地数据库进行正确身份验证
  • 我已经尝试了反向代理身份验证插件,它似乎没有使 没有区别

你能移动
auth_basic“Development”吗;auth\u basic\u user\u文件/etc/nginx/.htpasswd
到服务器
部分
并尝试而不是
位置
部分?感谢您的提示,但是将auth移动到服务器部分并不会改变任何事情:(好的。您可以在浏览器网络控制台中检查有无auth的请求标题吗?谢谢您的帮助,我可以在Chrome with auth中看到附加的auth标题(即授权等)打开。我尝试清除Cookie,这也没有什么区别。如果我在使用nginx进行身份验证后关闭nginx basic auth,则仍然会保留相同的头,并且这些头会传递给Jenkins,因为我可以看到它正在根据其本地数据库进行身份验证。我非常喜欢你的想法,我想知道是否有办法在ngin之间查看头x和jenkins。这听起来确实像curlprit。我在反向代理身份验证插件中尝试了whoAmI页面,但是一旦打开nginx basic Auth,我就得到了500错误页面。你能移动
Auth\u basic“Development”吗对服务器
部分
进行身份验证,而不是
位置
部分?谢谢提示,但是将身份验证移动到服务器部分不会改变任何内容:(好的。你能在浏览器网络控制台中检查带有和不带auth的请求头吗?谢谢你的帮助,我可以在Chrome浏览器中看到带有auth的附加auth头(即授权等)打开。我尝试清除Cookie,这也没有什么区别。如果我在使用nginx进行身份验证后关闭nginx basic auth,则仍然会保留相同的头,并且这些头会传递给Jenkins,因为我可以看到它正在根据其本地数据库进行身份验证。我非常喜欢你的想法,我想知道是否有办法在ngin之间查看头这听起来确实像curlprit。我在反向代理身份验证插件中尝试了whoAmI页面,但是只要打开nginx基本身份验证,我就得到了500错误页面。