如何使用 Nginx 作为反向代理在非根位置使用 Fauxton 托管 CouchDB

如何使用 Nginx 作为反向代理在非根位置使用 Fauxton 托管 CouchDB

CouchDB 与 Fauxton 的一个版本捆绑在一起,该版本存在一个严重错误,如果 CouchDB 托管在非根位置,Fauxton 将无法正常工作。因此,如果您想在 托管 CouchDB /couchdb,则 的捆绑 Fauxton/couchdb/_utils会尝试访问根位置/而不是 位置的CouchDB /couchdb,从而导致 Fauxton 功能中断。

GitHub 上的以下问题更详细地解释了该问题:

  1. https://github.com/apache/couchdb-fauxton/issues/1199
  2. https://github.com/apache/couchdb-fauxton/issues/944
  3. https://github.com/apache/couchdb-fauxton/issues/1188

是否可以使用 Nginx 作为反向代理在非根位置使用 Fauxton 托管 CouchDB,以及如何实现?

答案1

我一直在 Nginx 后面的子文件夹位置使用 Fauxton,配置如下:

    location ^~ /mycouch/ {
        proxy_pass http://192.168.2.5:5984/;
        proxy_redirect off;
        proxy_buffering off;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }

需要注意的几点:

  1. proxy_pass http://...5984/;。请注意/最后的 。
  2. 您应该输入http://example.com/mycouch/_utils/。请注意/末尾的 。
  3. Fauxton 本身存在问题(Unexpected token < in JSON at position 0错误),请关注这个食谱构建并安装最新版本的 Fauxton。

答案2

对我而言有效的方法是让 Nginx 将位置代理/couchdb/_utils/到 Docker 容器内运行的独立 NPM 版本的 Fauxton。/_utils因此,所有请求都不会由捆绑的 CouchDB Fauxton 满足,而是由独立 Fauxton 服务器(具有针对子路径托管的相关修复)满足。

以下是完成此工作所需步骤的一些提示。

NGINX 配置位于/etc/nginx/conf.d/default.conf

upstream couchdb {
  server app-couchdb:5984;
}
upstream fauxton {
  server app-fauxton:8000;
}

server {
  listen 80;
  server_name localhost;

  location /couchdb/_utils/ {
    rewrite /couchdb/_utils/(.*) /$1 break;
    proxy_pass http://fauxton/;
    proxy_redirect off;
    proxy_buffering off;
    proxy_set_header Host $host;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  }

  location /couchdb {
    rewrite /couchdb/(.*) /$1 break;
    proxy_pass http://couchdb/;
    proxy_redirect off;
    proxy_buffering off;
    proxy_set_header Host $host;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  }
  ...
}

CouchDB 配置位于/opt/couchdb/etc/local.d/docker-1.ini

[chttpd]
bind_address = 0.0.0.0

[httpd]
enable_cors = true
bind_address = 0.0.0.0

fauxton:alpine 镜像的 Dockerfile 位于fauxton.dockerfile

FROM node:10-alpine
RUN npm install --silent -g fauxton

docker 配置:

sudo docker build -t fauxton:alpine - < ./fauxton.dockerfile
sudo docker network create app-net
sudo docker create --name app-couchdb --network app-net --restart unless-stopped -v /opt/couchdb/etc/local.d/docker-1.ini:/opt/couchdb/etc/local.d/docker-1.ini -e COUCHDB_USER="$ADMIN_USER" -e COUCHDB_PASSWORD="$ADMIN_PASSWORD" couchdb:latest
sudo docker create --name app-fauxton --network app-net --restart unless-stopped fauxton:alpine fauxton --couchdb "http://app-couchdb:5984"
sudo docker create --name app-nginx --network app-net --restart unless-stopped --publish 8080:80 -v /etc/nginx/conf.d/default.conf:/etc/nginx/conf.d/default.conf:ro nginx:alpine
sudo docker start app-couchdb
sudo docker start app-fauxton
sudo docker start app-nginx

这或多或少应该为您提供最新版本的 CouchDB 和最新版本的独立 Fauxton 的设置,它们都在 Docker 容器内运行,并且可以通过非 root 路径访问http://127.0.0.1:8080/couchdb/_utils/

此解决方案适用于遇到以下问题的人:

  1. https://github.com/apache/couchdb-fauxton/issues/1199
  2. https://github.com/apache/couchdb-fauxton/issues/944
  3. https://github.com/apache/couchdb-fauxton/issues/1188

相关内容