传递编码的request_uri并删除字符串

时间:2017-08-02 17:31:08

标签: nginx couchdb nginx-location

使用CouchDB数据库进行Web应用程序设置让我很头疼。问题似乎是,文档ID包含特殊字符" /"," - "或空格。这是一个示例URL(编码)

http://127.0.0.1:5984/procedures/1%2F1%2F1143%2F1%2Fschwer%2F1%2F0.0%2F1.3

CouchDB配置了nginx作为反向代理,所以 http://127.0.0.1:5984/可在以下网址获得 https://example.com/db

现在的问题是,当使用标准程序时,nginx似乎在重写期间对URL进行解码,但之后不再对其进行编码。

我们在nginx中提出了以下位置设置来克服这个问题:

location /db {
  set $modified_uri $request_uri;

  if ($modified_uri ~ "^(.{3})(.*)") {
    set $modified_uri $2;
  }
  proxy_pass http://127.0.0.1:5984$modified_uri;
}

然而现在,斜线" /"用'%252F'编码而不是'%2F'。 有没有人知道如何解决这个问题?非常感谢!

1 个答案:

答案 0 :(得分:0)

使用正则表达式捕获uri,然后设置指令以保持编码完整。

location  ~ ^/db(.*)$ {
  set $query $1;
  proxy_pass http://127.0.0.1:5984$query;
}