4

proxy_pass を使用して、私のドメインで実行されている NGINX を介して、Cloudant の couchdb 機能の一部を公開したいと考えています。これまでのところ、いくつかの問題を解決してきましたが (以下に記載)、承認に関しては行き詰まっています。誰にもヒントはありますか?

location /couchdb {
    rewrite /couchdb/(.*) /$1 break;   #chop off start of this url

    proxy_redirect off
    proxy_buffering off;
    proxy_set_header Host myusername.cloudant.com;   
    # cannot use $host! must specify my vhost on cloudant

    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Authorization "Basic base64-encode(username:password)";

    proxy_pass http://myusername.cloudant.com$request_uri;
    # must use a variable in this url so that the domain is looked up late. 
    # otherwise nginx will fail to start about half the time because of resolver issues
    # (unknown why though)
}

このセットアップを使用すると、Cloudant に正常にプロキシできますが、常に禁止された応答を受け取ります。たとえば、次のリクエスト:

http://mydomain/couchdb/my-cloudant-db

戻り値

{"error":"forbidden", "reason":"_reader access is required for this request"}

助けてくれてありがとう。

4

2 に答える 2

5

問題が見つかりました。最初の行が $request_uri を書き換え、リクエストのフルフィルメントの一部として $uri 変数を変更するので、無害に見える書き換えルールです。$request_uri は書き換えによる変更はありません。したがって、その変数をproxy_passの場所に含めたときに、/couchdb/が削除された編集済みのURLが正しく含まれていませんでした。

proxy_pass 行を次のように変更します。

proxy_pass http://myusername.cloudant.com$uri;

問題なく動作するようになりました。これは、SSL の問題でも、基本認証の問題でも、その他の http ヘッダーの問題でも、Cloudant の問題でもありません。これはすべて、リクエストの転送先の URI に関連していました。

于 2013-06-17T15:59:53.803 に答える
1

「解決するリゾルバーが定義されていません」というエラーが発生しました。実際にリゾルバーを追加することで解決できました。例: リゾルバー 8.8.8.8;

参照: http://www.nginx-discovery.com/2011/05/day-51-proxypass-and-resolver.html

于 2013-07-10T15:09:18.443 に答える