Couchbase Nginx 插件模块作为反向代理

Couchbase Nginx Plugin Module as Reverse Proxy

我正在使用带 Nginx 的 couchbase 模块,如果我们只想以 Couchbase REST 方式设置/获取/删除数据,它工作得很好。我的要求有点不同。我希望 Nginx 作为反向代理工作,以防在 Couchbase 中使用正常的 http 调用找不到密钥。因此,如果找不到密钥,我想将相同的请求转发给 httpd,然后从 Nginx 取回响应并存储在 couchbase 中。

您需要为其编译另一个模块,srcache子请求缓存的通用模块。这是说明

mkdir -p nginx-couchbase
cd nginx-couchbase
wget http://nginx.org/download/nginx-1.3.7.tar.gz
wget http://packages.couchbase.com/clients/c/libcouchbase-2.0.3nginx3.tar.gz
wget http://packages.couchbase.com/clients/c/nginx-couchbase-module-0.3.1.tar.gz
wget -O srcache-nginx-module-0.30.tar.gz https://github.com/openresty/srcache-nginx-module/archive/v0.30.tar.gz
for i in *.tar.gz; do tar xvf $i; done

export PREFIX=/opt/nginx-couchbase

cd libcouchbase-2.0.3nginx3
./configure --prefix=$PREFIX --enable-debug --disable-plugins --disable-tests --disable-couchbasemock
make && sudo make install
cd ..

cd nginx-1.3.7
export LIBCOUCHBASE_INCLUDE=$PREFIX/include
export LIBCOUCHBASE_LIB=$PREFIX/lib
./configure --prefix=$PREFIX --add-module=../nginx-couchbase-module-0.3.1 --add-module=../srcache-nginx-module-0.30
make && sudo make install

上面的命令会将 nginx 安装到 /opt/couchbase-nginx,现在让我们为它设置最小工作配置以缓存动态后端的响应:

worker_processes  1;
error_log  logs/error.log  debug;

events {
    worker_connections  1024;
}

http {
    upstream ruby {
        server localhost:9292;
    }

    server {
        listen       8080;
        server_name  localhost;

        location / {
            set $key $uri$args;
            srcache_fetch GET /cache key=$key;
            srcache_store PUT /cache key=$key;
            srcache_store_statuses 200 301 302;
            proxy_pass http://ruby;
        }

        location /cache {
            internal;
            set $couchbase_key $arg_key;
            set $couchbase_cmd $arg_cmd;
            set $couchbase_val $arg_val;
            couchbase_connect_timeout 6ms;
            couchbase_timeout 3ms;
            couchbase_pass localhost:8091,127.0.0.1:8091,localhost bucket=default;
        }
    }
}

这里我假设您已将 Couchbase 服务器安装到 localhost:8091 并且在端口 9292 上有一些动态,例如:

ruby -run -ehttpd /usr/share/doc -p9292

它将提供 /usr/share/doc(其他单线 here)的所有服务。

现在 运行

sudo /opt/couchbase-nginx/sbin/nginx

转到 http://localhost:8080,浏览您的文档,并检查您的 couchbase 集群中是否有新密钥。