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」が必要になることに注意してください。
ポール

回答:


16

ロケーションディレクティブにこのディレクティブを追加してみてください

proxy_set_header Authorization $http_authorization;
proxy_pass_header  Authorization;

このヘッダは通過しているユーザー名:HTTP認証から基本YXJuZTpraWxsZXI、ない正しい名前(;
opHASnoNAME

6
これは、base64エンコードされた文字列でなければなりませんen.wikipedia.org/wiki/Basic_access_authentication#cite_note-8のそれを解読しよう
アンドレイMikhaltsov

許可ヘッダーはbase64でエンコードされたヘッダーである必要があります、はい。しかし、それは問題の目的ではありません。問題は、完全な認証ヘッダーではなく、ヘッダーで認証ユーザー名を渡すことです。
オッリ

1
YXJuZTpraWxsZXIデコードarne:killer-良い例@opHASnoNAME :-)
エンダファレル

pass_headerとset_header ...?これは2倍多かれ少なかれ同じ効果ではありませんか?両方とも機能するはずです。
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.