向 CouchDB 添加 gzip 支持的推荐方法是什么?

Mik*_*Kay 7 couchdb pouchdb

我正在尝试设置一个 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 部署的最佳实践是什么?

Ram*_*ose 0

使用反向代理。

为了便于说明,请安装 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;

}
Run Code Online (Sandbox Code Playgroud)

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

curl -D -G -H "Accept-Encoding: gzip" http://user:pass@127.0.0.1:8080/mydb/_all_docs > out.gz
Run Code Online (Sandbox Code Playgroud)

响应将被压缩。使用 _all_docs 等端点来确保响应具有超过 1000b 的响应数据,以进行确认。

CouchDB 脱离 Web 服务器轨道已经有一段时间了,例如列表和显示函数的弃用就证明了这一点。CouchDB 不是 Web 服务器,关注点分离很重要。