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 回答