11

基本認証を使用して認証しているいくつかのIISWebサーバーの前で、nginxを逆rpoxyサーバーとしてセットアップしようとしています。

(注-これは、パスワードファイルを使用して認証を提供するnginxと同じではありません-ブラウザ/サーバー間ですべてをマーシェル化する必要があります)

その動作はオフですが、ページ上のすべてのリソース(image / cssなど)によって認証のプロンプトが繰り返し表示されます。

upstream my_iis_server {
      server 192.168.1.10;
}

server {
    listen       1.1.1.1:80;
    server_name  www.example.com;  

    ## send request back to my iis server ##
    location / {
     proxy_pass  http://my_iis_server;
     proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
     proxy_http_version      1.1;
     proxy_set_header        Connection "";
     proxy_pass_header       Authorization;     
     proxy_redirect off;
     proxy_buffering off;
     proxy_set_header        Host            $host;
     proxy_set_header        X-Real-IP       $remote_addr;
     proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
   }
}
4

2 に答える 2

7

この正確な状況を理解するのに私は永遠にかかりましたが、OSSは私が推測するようなものです。この投稿は1年前のものなので、元の投稿者がそれを理解したのでしょうか、それともあきらめたのでしょうか。

とにかく、少なくとも私にとっての問題はいくつかの原因によって引き起こされました:

  1. IISは、レルム文字列がNginxに送信されたものと同じであることを期待していますが、Nginx server_nameがアップストリームとは異なるアドレスでリッスンしている場合、サーバー側のWWW-AuthenticateはIISが期待していたものではなく、無視します。
  2. 組み込みのヘッダーモジュールは、他のWWW-Authenticateヘッダー、特に問題のあるWWW-Authenticate:Negotiateをクリアしません。ヘッダーの使用-moreモジュールは古いヘッダーをクリアし、指示した内容を追加します。

この後、私はついにSharepoint2010をNginxを介してプッシュすることができました。

stackoverflowに感謝します。

server {
    listen 80;
    server_name your.site.com;

    location / {
            proxy_http_version      1.1;
            proxy_pass_request_headers on;
            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_header      Authorization; //This didnt work for me
            more_set_input_headers  'Authorization: $http_authorization';

            proxy_set_header  Accept-Encoding  "";

            proxy_pass              https://sharepoint/;
            proxy_redirect          default;
            #This is what worked for me, but you need the headers-more mod
            more_set_headers        -s 401 'WWW-Authenticate: Basic realm="intranet.example.com"';
    }
}
于 2013-10-31T19:06:50.910 に答える
0

私はnginx/1.10.3でこれらと同じ症状を示しました。基本認証で保護されたサービスと、クライアントとサーバー間のリバースプロキシとしてのnginxがあります。要件は、nginxが承認をパススルーすることでした。

サーバーへの最初のリクエストは、Authorizationヘッダーを通過しました。2番目のリクエストは、このヘッダーをブロックしただけです。つまり、クライアントはセッションごとに1つのリクエストしか作成できませんでした。

これはどういうわけかクッキーに関連していました。ブラウザのCookieをクリアすると、このサイクルが繰り返されます。クライアントは認証できましたが、最初のリクエストに対してのみでした。ブラウザを閉じても同じ効果がありました。

私にとっての解決策は、以下を使用して、アップストリームサーバーをhttpsからhttpに変更することでした。

proxy_pass http://$upstream;

それ以外の:

proxy_pass https://$upstream;
于 2017-07-14T00:24:26.457 に答える