nginxを使用して、認証が必要なホストにプロキシする方法は?


41

プロキシホストに送信されるHTTP基本認証情報も含むnginx proxy_passディレクティブを設定するにはどうすればよいですか?

これは、プロキシする必要があるURLの例です。

http://username:password@192.168.0.5/export?uuid=1234567890

最終目標は、プロキシサーバーのURIを公開せずに、1つのサーバーが別のサーバー(プロキシしているサーバー)からファイルを提示できるようにすることです。ここで見つかったNginxの設定に従うことで、今は90%正しく動作しています。

http://kovyrin.net/2010/07/24/nginx-fu-x-accel-redirect-remote/

HTTP基本認証を追加して、プロキシサーバーに送信するだけです。


@All:このソリューション使用する場合は必ずHTTP基本認証を必要として-いないHTTPダイジェスト認証を;)私はそれを考え出したまでは周りのデバッグにかなり苦労した... stackoverflow.com/questions/9534602/...
SimonSimCity

回答:


57

少し前にこれについて書きました。詳細はこちらをご覧ください:

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」はbase64でエンコードされた「king:isnaked」であるため、

http:// king:isnaked@6.6.6.6

詳細については、ブログ投稿をご覧ください。


2
リンクが壊れています
アレックス

1
リンクはこちら:shairosenfeld.blogspot.com/search?q
nginx

1
もっと難しいものが必要です
イリヤ

7
ソリューションの柔軟性が十分ではありません。その場でusername:passwordをエンコードすると非常に便利です。まず、nginxはURLからusername:passwordを解析する必要があります。次に、nginxはこのデータをエンコードし、適切なヘッダーに設定する必要があります。エンコードされた資格情報をハードコードしたくありません。
ジョニー

セットアップで試してみると、「悪いリクエスト」が表示されます。
スポック

21

私はこれをalvosuの答えで動作させましたが、base64文字列の引用内に単語「Basic」を入力する必要があったため、次のようになりました:

proxy_set_header Authorization "Basic dGVzdHN0cmluZw==";

1
ユーザー名:パスワードをオンザフライでnginxでエンコードする方法を知っていますか?URLで指定された資格情報でユーザーを認証するため、ハードコードされた資格情報は柔軟ではありません。
ジョニー

1
nginx wiki.nginx.org/HttpSetMiscModule#set_encode_base64を使用してbase64にエンコードする方法を見つけました。これは、ハードコードされた資格情報よりも便利です。
ジョニー

これらのドキュメントへの@Johnnyリンクは次のとおり
Al Dass


2

とともに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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.