Nginx代理mongoDB TCP

Nginx代理mongoDB TCP

mongoDB申请的是公有云服务器,Dataworks在专有云服务器上,连接不通。
通过专有云nginx转发mongoDB 然后用SLB代理nginx端口。Dataworks连专有云即可

在这里插入图片描述
这里讲道理nginx其实DataWorks已经可以连接,但是nginx也是台ECS需要开放端口,而DataWorks ip不固定,添加会很复杂。所以用SLB代理一层,这样就不需要添加白名单了。
如果说没有这种限制,到nginx结束了

mongodb需要tcp 而nginx提供了http 所以会出错 需要在nginx.conf中增加如下配置

配置

采用docker

docker run --name nginx_mongodb -d -p 3717:80 -v /data/nginx3/html:/usr/share/nginx/html -v /data/nginx3/conf/nginx.conf:/etc/nginx/nginx.conf  -v /data/nginx3/logs:/var/log/nginx -v /data/nginx3/conf.d:/etc/nginx/conf.d  -v /data/nginx3/tcp.d:/etc/nginx/tcp.d  -d nginx

最好能进nginx里看下 –with-stream这个模块有没有,stream需要这个模块的支持

#查看
nginx -V

最简单配置,直接修改/data/nginx3/conf/nginx.conf即可

worker_processes  1;

events {
    worker_connections  1024;
}

stream {

     upstream stream_mongo {
      # 监听mongoDB服务的ip和端口
      server xx:3717;

	}
	
    server {
        #注意配置80,监听nginx的
        listen  80;
        #proxy_connect_timeout 8s;
        #proxy_timeout 24h;
        proxy_pass    stream_mongo;
    }
}

然后docker restart或者reload一下即可

复杂些

nginx.conf (请注意,stream配置不能放到http内,即不能放到/data/nginx/conf.d/,因为stream是通过tcp层转发,而不是http转发)

user nginx;
worker_processes 1;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
.................
}

# tcp层转发的配置文件夹

include /data/nginx3/tcp.d/*.conf;

在这里插入图片描述
新建一个以.conf结尾的配置文件

worker_processes  1;

events {
    worker_connections  1024;
}

stream {

     upstream stream_mongo {
      # 监听mongoDB服务的ip和端口
      server xx:3717;

	}
	
    server {
        #注意配置80,监听nginx的
        listen  80;
        #proxy_connect_timeout 8s;
        #proxy_timeout 24h;
        proxy_pass    stream_mongo;
    }
}

然后重启即可。

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐