<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 連接,并限制可訪問(wèn)IP

          共 4201字,需瀏覽 9分鐘

           ·

          2023-08-31 08:16


                     

          鏈接:https://www.toutiao.com/article/7234104886726705716

          1.前言

          我們的生產(chǎn)環(huán)境基本上都部署在云服務(wù)器上,例如應(yīng)用服務(wù)器、MySQL服務(wù)器等。如果MySQL服務(wù)器直接暴露在公網(wǎng),就會(huì)存在很大的風(fēng)險(xiǎn),為了保證數(shù)據(jù)安全,MySQL服務(wù)器的端口是不對(duì)外開(kāi)放的。

          好巧不巧,線(xiàn)上業(yè)務(wù)遇到bug了,開(kāi)發(fā)的小伙伴需要遠(yuǎn)程連接MySQL來(lái)查看數(shù)據(jù),那應(yīng)該怎么辦呢?

          我們可以通過(guò)Nginx代理(“跳板機(jī)”)來(lái)進(jìn)行連接。

          2.Nginx代理連接

          要實(shí)現(xiàn)對(duì)連接的代理轉(zhuǎn)發(fā),我們需要一臺(tái)服務(wù)器并安裝Nginx,且與MySQL服務(wù)器處于一個(gè)內(nèi)網(wǎng)之中,內(nèi)網(wǎng)之間可以訪問(wèn)。

          其次,我們需要用到ngx_stream_core_module模塊,該模塊不是默認(rèn)構(gòu)建的,我們需要在configure時(shí)添加--with-stream來(lái)進(jìn)行構(gòu)建。

          既然要用到ngx_stream_core_module模塊,先看看其提供的指令,我們才知道怎么來(lái)進(jìn)行配置。

          1)stream

          該指令定義了stream服務(wù)器。與http塊平級(jí),定義在main塊中。

          • 作用域:main
          • 語(yǔ)法:stream {...}

          示例:

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

          2)server

          該指令定義一個(gè)虛擬主機(jī),與http塊中的server類(lèi)似。我們可以在stream塊中定義多個(gè)server塊。

          • 作用域:stream
          • 語(yǔ)法:server {...}
          stream {
               server {
                   ......
               }
               server {
                   ......
               }
           }

          3)listen

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

          • 作用域:server
          • 語(yǔ)法:listen address:port;

          示例:

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

          4)配置示例

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

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

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

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

          此時(shí),我們就可以通過(guò)例如Navicat等客戶(hù)端進(jìn)行連接。

          3.限制訪問(wèn)IP

          實(shí)現(xiàn)了對(duì)連接的代理,所有人都可以通過(guò)訪問(wèn)Nginx來(lái)連接MySQL服務(wù)器,解決了外網(wǎng)無(wú)法連接的問(wèn)題。

          為了更進(jìn)一步的縮小訪問(wèn)范圍,保證數(shù)據(jù)安全,我們可以限制只有公司網(wǎng)絡(luò)的IP地址可以通過(guò)Nginx進(jìn)行連接。

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

          1)allow

          該指令設(shè)置指定的IP允許訪問(wèn)。可以和deny指令配合使用

          • 作用域:stream, server
          • 語(yǔ)法:allow address | CIDR | unix: | all;

          示例:

           # 允許192.168.110.1訪問(wèn)
           allow 192.168.110.1;
           
           # 允許192.168.110.1192.168.255.254
           allow 192.168.110.0/16;
           
           # 允許192.168.110.1192.168.110.254
           allow 192.168.110.0/24;
           
           # 允許所有的IP訪問(wèn)
           allow all;

          2)deny

          該指令設(shè)置指定的IP禁止訪問(wèn)。可以和allow指令配合使用。

          • 作用域:stream, server
          • 語(yǔ)法:deny address | CIDR | unix: | all;
          # 禁止192.168.110.1訪問(wèn)
           deny 192.168.110.1;
           
           # 禁止192.168.110.1192.168.255.254
           deny 192.168.110.0/16;
           
           # 禁止192.168.110.1192.168.110.254
           deny 192.168.110.0/24;
           
           # 禁止所有的IP訪問(wèn)
           deny all;

          3)配置示例

          禁止所有的IP訪問(wèn),192.168.110.100除外。

          allow 192.168.110.100;
           deny all;

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

          4.綜合案例

          只允許192.168.110.100通過(guò)Nginx連接MySQL服務(wù)器。

          stream  {
               allow 192.168.110.100;
               deny all;
               server {
                   listen 3306;
                   proxy_pass 192.168.110.101:3306;
               }
           }


          最近很多小伙伴找我要一些程序員必備資料,于是我翻出了壓箱底的寶藏,免費(fèi)分享給大家!


          掃描海報(bào)二維碼免費(fèi)獲取。


          瀏覽 1441
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <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>
                  91高潮久久久久久久 | 神马影音先锋无码视频 | 91精品免费久久 | 围内精品久久久久久久久久‘变脸 91久久婷婷国产麻豆精品电影 | 欧美日韩日日夜夜 |