<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          如何用 Nginx 代理 MySQL 連接,并限制可訪問IP?

          共 4432字,需瀏覽 9分鐘

           ·

          2023-08-07 17:34

          點擊關注公眾號,Java干貨及時送達??

          我們的生產環(huán)境基本上都部署在云服務器上,例如應用服務器、MySQL服務器等。如果MySQL服務器直接暴露在公網,就會存在很大的風險,為了保證數據安全,MySQL服務器的端口是不對外開放的。

          好巧不巧,線上業(yè)務遇到bug了,開發(fā)的小伙伴需要遠程連接MySQL來查看數據,那應該怎么辦呢?

          我們可以通過Nginx代理(“跳板機”)來進行連接。

          2.Nginx代理連接

          要實現(xiàn)對連接的代理轉發(fā),我們需要一臺服務器并安裝Nginx,且與MySQL服務器處于一個內網之中,內網之間可以訪問。

          其次,我們需要用到ngx_stream_core_module模塊,該模塊不是默認構建的,我們需要在configure時添加--with-stream來進行構建。

          添加過程可以參照【Nginx基本命令&不停機版本升級】一文進行,我們這里不再贅述。

          既然要用到ngx_stream_core_module模塊,首當其沖,是看看其提供的指令,我們才知道怎么來進行配置。

          1)stream

          該指令定義了stream服務器。與http塊平級,定義在main塊中。

          • 作用域:main

          • 語法:stream {...}

          示例:

           stream {
               server {
                   ......
               }
           }

          2)server

          該指令定義一個虛擬主機,與http塊中的server類似。我們可以在stream塊中定義多個server塊。

          • 作用域:stream

          • 語法:server {...}

          stream {
               server {
                   ......
               }
               server {
                   ......
               }
           }

          3)listen

          該指令定義虛擬主機server要監(jiān)聽的socket的地址和端口。

          • 作用域:server

          • 語法:listen address:port;

          示例:

          listen 127.0.0.1:3306;
           listen *:3306;
           # 效果與listen *:3306一樣
           listen 3306;
           listen localhost:3306;

          4)配置示例

          MySQL服務器,端口3306(單機環(huán)境)

          stream  {
               server {
                   listen 3306;
                   proxy_pass 192.168.110.101:3306;
               }
           }

          MySQL服務器,端口3306(集群環(huán)境)

          stream  {
               upstream mysql_socket {
                   server 192.168.110.101:3306;
               }
               server {
                       listen 3306;
                       proxy_pass mysql_socket;
               }
           }

          此時,我們就可以通過例如Navicat等客戶端進行連接。

          3.限制訪問IP

          實現(xiàn)了對連接的代理,所有人都可以通過訪問Nginx來連接MySQL服務器,解決了外網無法連接的問題。

          為了更進一步的縮小訪問范圍,保證數據安全,我們可以限制只有公司網絡的IP地址可以通過Nginx進行連接。

          Nginx提供了ngx_stream_access_module模塊,其指令非常簡單,僅包含allow和deny指令。

          1)allow

          該指令設置指定的IP允許訪問。可以和deny指令配合使用

          • 作用域:stream, server

          • 語法:allow address | CIDR | unix: | all;

          示例:

           # 允許192.168.110.1訪問
           allow 192.168.110.1;
           
           # 允許192.168.110.1到192.168.255.254
           allow 192.168.110.0/16;
           
           # 允許192.168.110.1到192.168.110.254
           allow 192.168.110.0/24;
           
           # 允許所有的IP訪問
           allow all;

          2)deny

          該指令設置指定的IP禁止訪問??梢院蚢llow指令配合使用。

          • 作用域:stream, server

          • 語法:deny address | CIDR | unix: | all;

          # 禁止192.168.110.1訪問
           deny 192.168.110.1;
           
           # 禁止192.168.110.1到192.168.255.254
           deny 192.168.110.0/16;
           
           # 禁止192.168.110.1到192.168.110.254
           deny 192.168.110.0/24;
           
           # 禁止所有的IP訪問
           deny all;

          3)配置示例

          禁止所有的IP訪問,192.168.110.100除外。

          allow 192.168.110.100;
           deny all;

          Tips:如果指定了allow,需要配合deny使用,否則就是允許所有的IP地址訪問。

          4.綜合案例

          只允許192.168.110.100通過Nginx連接MySQL服務器。

          stream  {
               allow 192.168.110.100;
               deny all;
               server {
                   listen 3306;
                   proxy_pass 192.168.110.101:3306;
               }
           }
          來源:toutiao.com/article/7234104886726705716

               

          公司新來了一個同事,把權限系統(tǒng)設計的爐火純青!

          Docker 入門終極指南,詳細版!別再說不會用 Docker 了!

          一行 log 日志,結果引發(fā)了 P1 的線上事故

          最近面試BAT,整理一份面試資料Java面試BATJ通關手冊,覆蓋了Java核心技術、JVM、Java并發(fā)、SSM、微服務、數據庫、數據結構等等。

          獲取方式:點“在看”,關注公眾號并回復 Java 領取,更多內容陸續(xù)奉上。

          文章有幫助的話,在看,轉發(fā)吧。


          瀏覽 715
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  夜夜爽夜夜高潮夜夜爽 | 三级视频在线观看视频 | 久久久一区二区三区四曲免费听 | 国产内射免费在线观看 | 俺去了俺也去超碰在线 |