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 集群中是否有新密钥。
我正在使用带 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 集群中是否有新密钥。