Nginx 反向代理Oracle、MySql、SQLServer以及WebService

发布时间:2019-09-19编辑:佚名阅读(1429)

出于数据安全性考虑,正常情况下,网站或者项目的数据库一般都是禁止外网访问,或者只允许部分主机访问。那么,如何才能不修改这类权限的前提下,让其他被禁止访问的主机也能访问这个数据库呢。这时,Nginx的作用就体现出来了。

Nginx能代理很多的东西(当然需要端口开放),它使得我们能够在某台机器或者某个IP被禁止的情况下能成功的跨越隔断,访问到你想要的数据。

本文主要讲述如何使用Nginx代理数据库,使得其他主机(例如:外网访问只允许内网访问的数据库)访问同一个数据库或者服务。

本文介绍的Nginx代理的数据库包含:Oracle、MySql、SQLServer等;以及如何代理WebService。

1、Nginx配置Oracle代理

#user  nobody;
worker_processes  1;
#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;
#pid        logs/nginx.pid;
events {
    worker_connections  1024;
}
stream {
    upstream oracle {   
        server 172.16.10.222:1521 weight=1 max_fails=2 fail_timeout=30s;   
    }
 server {
        listen       3335;
        proxy_connect_timeout 1s;
        proxy_timeout 3s;
        proxy_pass oracle;
    }
}

2、Nginx配置MySql代理

Nginx 配置mysql代理 -- 基于nginx1.9以上 stream module,stream 模块用于一般的 TCP 代理和负载均衡。

#user  nobody;
worker_processes  1;
#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;
#pid        logs/nginx.pid;
events {
    worker_connections  1024;
}
stream {
    upstream sql {   
        server 172.16.10.229:3306 weight=1 max_fails=2 fail_timeout=30s;   
    }
    server {
       listen     3333;
       proxy_connect_timeout 1s;
       proxy_timeout 3s;
       proxy_pass sql;
    }
}

3、Nginx配置SqlServer代理

#user  nobody;
worker_processes  1;
#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;
#pid        logs/nginx.pid;
events {
    worker_connections  1024;
}
stream {
    
    upstream sqlserver {   
        server 172.16.10.167:1433 weight=1 max_fails=2 fail_timeout=30s;   
    }
   
    server {
       listen       3334;
       proxy_connect_timeout 1s;
       proxy_timeout 3s;
       proxy_pass sqlserver;
    }
}

连接服务器名称:

127.0.0.1,3334

4、最后是Nginx代理WebService的配置

#user  nobody;
worker_processes  4;
#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;
#pid        logs/nginx.pid;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';
    #access_log  logs/access.log  main;
    sendfile        on;
    #tcp_nopush     on;
    #keepalive_timeout  0;
    keepalive_timeout  65;
    upstream esbServer {   
        server 127.0.0.1:8083 weight=1 max_fails=2 fail_timeout=30s;   
    }
    #gzip  on;
    server {
        listen       8081;
        server_name  localhost;
        #charset koi8-r;
        #access_log  logs/host.access.log  main;
        location /ladder_web {
            proxy_set_header X-real-ip $remote_addr;
            proxy_pass http://esbServer;
        }
    }
}

通过上述配置,我们可以实现多台主机连接同一服务或者同一数据库(尤其在数据库端口被禁止外部机器访问的时候),这时候,我们开发不再需要每台电脑都要装一个数据库,而是所有人都可以通过这个映射来共同维护同一个数据库,节省了维护成本,提高了协同开发的效率。

  关键字:Nginx反向代理OracleMySqlSQLServerWebService


鼓掌

0

正能量

1

0

呵呵

0


评论区