web-dev-qa-db-ja.com

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

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

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

http://username:[email protected]/export?uuid=1234567890

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

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

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

46
bwizzy

これをalvosuの回答で機能させましたが、base64文字列の引用符の中に「Basic」という単語を入力する必要があったので、次のようになります。

proxy_set_header Authorization "Basic dGVzdHN0cmluZw==";
21
bwizzy

私はこれについて少し前に書きました。詳細はこちら:

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

http:// king:[email protected]

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

59
Shai

Proxy_set_header Authorization "USER_AND_PASS"を設定します。ここで、USER_AND_PASS = base64(user:pass)

4
alvosu

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で返されました)

2
sunapi386