首頁 > 軟體

nginx實現資料庫埠轉發

2023-03-09 06:07:19

出於資料安全性考慮,正常情況下,網站或者專案的資料庫一般都是禁止外網存取,或者只允許部分主機存取。那麼,如何才能不修改這類許可權的前提下,讓其他被禁止存取的主機也能存取這個資料庫呢。這時,Nginx的作用就體現出來了。

1、mysql為例

oracle、sqlserver等資料庫設定和下面設定一樣,只是資料庫的埠不一樣而已
需要注意的是這個設定要寫在http外邊

#使用nginx做資料庫埠轉發
stream {
    upstream sql {   
    # 設定資料庫的ip和埠
        server 172.16.8.190:3306 weight=1 max_fails=2 fail_timeout=30s;   
    }
    server {
     # 設定本機暴露埠
       listen     925;
       proxy_connect_timeout 1s;
       proxy_timeout 3s;
       proxy_pass sql;
    }
}

2、完整設定如下

#user  nobody;#設定使用者或者使用者組,預設為nobody
worker_processes  2;#允許生成的程序數,預設為1

#制定紀錄檔路徑,級別。這個設定可以放入全域性塊,http塊,server塊,
#級別以此為:debug|info|notice|warn|error|crit|alert|emerg
#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;#指定nginx程序執行檔案存放地址


events {
    worker_connections  1024;    #最大連線數,預設為512
    accept_mutex on;   #設定網路連線序列化,防止驚群現象發生,預設為on
    multi_accept on;  #設定一個程序是否同時接受多個網路連線,預設為off
    #use epoll;      #事件驅動模型,select|poll|kqueue|epoll|resig|/dev/poll|eventport
}

stream {
    upstream sql {   
        server 172.16.8.190:3306 weight=1 max_fails=2 fail_timeout=30s;   
    }
    server {
       listen     925;
       proxy_connect_timeout 1s;
       proxy_timeout 3s;
       proxy_pass sql;
    }
}

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;

    #gzip  on;

    #設定tomcat的IP地址和存取埠
    upstream tomcat {
        server 172.16.8.190:8080;
        
     }
    
    server {
        listen       9008;
        server_name  172.16.8.190;
    #header name含下劃線
    underscores_in_headers on; 
    #charset gbk; # 編碼設定
    #開啟gzip壓縮
        #gzip模組設定
        gzip on; #開啟gzip壓縮輸出
        gzip_min_length 1k; #最小壓縮檔案大小
        gzip_buffers 4 16k; #壓縮緩衝區
        gzip_http_version 1.0; #壓縮版本(預設1.1,前端如果是squid2.5請使用1.0)
        gzip_comp_level 2; #壓縮等級
        gzip_types text/plain application/x-javascript text/css application/xml;
        #壓縮型別,預設就已經包含text/html,所以下面就不用再寫了,寫上去也不會有問題,但是會有一個warn。
        gzip_vary on;
        #charset koi8-r;
        #charset utf-8,gbk; # 避免中文亂碼
        #root    D:/htmlPage/dist; 
        #access_log  logs/host.access.log  main;
    location /{
        #這個地方指定被存取的資料夾位置
        root   D:/htmlPage;
        index  index.html index.htm;
        #limit_rate 1280k; #限制速度
        client_max_body_size  100M;
        allow all;
        autoindex on;
        proxy_set_header X-Real-IP  $remote_addr;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        add_header 'Access-Control-Allow-Headers' 'Content-Type';
        add_header 'Access-Control-Allow-Methods' 'GET';
        add_header 'Access-Control-Allow-Methods' 'POST';
        add_header 'Access-Control-Allow-Credentials' 'true';
        add_header 'Access-Control-Allow-Origin' '*';
        proxy_connect_timeout       600s;
        proxy_read_timeout          600s;
        proxy_send_timeout          600s; 
        access_log off;
        break;
        }
     }
 }

到此這篇關於nginx實現資料庫埠轉發的文章就介紹到這了,更多相關nginx 資料庫埠轉發內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com