【问题标题】:What's the recommended way to add gzip support to CouchDB?向 CouchDB 添加 gzip 支持的推荐方法是什么?
【发布时间】:2017-02-06 12:14:43
【问题描述】:

我正在尝试设置一个 CouchDB 部署,该部署需要能够返回 gzip 的响应(12mb 未压缩与 400kb 压缩响应)。我还需要 SSL 支持和 CORS。

我之前使用过 Apache 作为反向代理,但我发现它对于连接不佳的大型复制是不可靠的。我的偏好是直接为 CouchDB 提供服务,无需任何代理,我们目前在 CouchDB 内提供 SSL。

我已经成功设置了这个代理:http://broken-by.me/tag/accept-encoding-gzip/,它使用节点和连接模块(加上 cors 和压缩)。它非常简单并且工作正常。然后,每当我需要 gzip 响应时,我只需将请求发送到不同的端口。但这意味着我失去了这些请求的 SSL。我应该弄清楚如何将 SSL 添加到节点?还是人家前面什么都推荐ngingx做代理,然后用nginx做gzip、cors和ssl?生产 CouchDB 部署的最佳实践是什么?

【问题讨论】:

  • 我从未将 5 岁的问题视为赏金。我还没有测试过,但是this indicates gzip is supported on all endpoints?
  • 我相信这仅适用于压缩请求。换句话说,您可以将 gzip 的内容发布到 couchdb,但响应不会被压缩。

标签: couchdb pouchdb


【解决方案1】:

使用反向代理。

为了说明,安装 nginx 并在 8080 端口为您的开发箱上的 5984 端口设置反向代理。

此代理配置将帮助您入门

server {

listen 8080;

gzip_min_length     1000;
gzip_buffers        4 8k;
gzip_http_version   1.0;
gzip_types          application/json;
gzip_vary           on;
gzip on;
gzip_proxied any;

location / {

proxy_pass http://127.0.0.1:5984;

}

使用 curl 来验证超过 1000b 的响应是否被压缩,例如

curl -D -G -H "Accept-Encoding: gzip" http://user:pass@127.0.0.1:8080/mydb/_all_docs > out.gz

响应将被压缩。使用像 _all_docs 这样的端点来确保响应包含超过 1000b 的响应数据,以进行确认。

CouchDB 已经远离 Web 服务器轨道已有一段时间了,例如 deprecation of the list and show functions 就是证明。 CouchDB 不是 Web 服务器,关注点分离很重要。

【讨论】:

  • 我为 SSL 省略了 nginx conf,但它是可用的。
  • 谢谢你的回答,我给了你赏金。不过,我不相信这能说明问题 - 请参阅我的问题中的链接,该链接讨论了 gzip 开启时 nginx 如何破坏 etags。我似乎也注意到直接来自 couchdb 的一些 gzip 压缩 - 但我不确定。是否有人通过 http 将大块数据从 couchdb 中移出?
  • 不客气。我相信 gzip/ETag 的问题是resolved。我没有任何移动大型附件的经验,如果这就是你的意思的话。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多