CouchDB 与 Fauxton 的一个版本捆绑在一起,该版本存在一个严重错误,如果 CouchDB 托管在非根位置,Fauxton 将无法正常工作。因此,如果您想在 托管 CouchDB /couchdb
,则 的捆绑 Fauxton/couchdb/_utils
会尝试访问根位置/
而不是 位置的CouchDB /couchdb
,从而导致 Fauxton 功能中断。
GitHub 上的以下问题更详细地解释了该问题:
- https://github.com/apache/couchdb-fauxton/issues/1199
- https://github.com/apache/couchdb-fauxton/issues/944
- 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;
}
需要注意的几点:
- 是
proxy_pass http://...5984/;
。请注意/
最后的 。 - 您应该输入
http://example.com/mycouch/_utils/
。请注意/
末尾的 。 - 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/。
此解决方案适用于遇到以下问题的人: