0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何用Nginx代理MySQL连接并限制可访问IP

马哥Linux运维 来源:头条号fkjavaer 2023-08-15 11:12 次阅读

1.前言

我们的生产环境基本上都部署在云服务器上,例如应用服务器、MySQL服务器等。如果MySQL服务器直接暴露在公网,就会存在很大的风险,为了保证数据安全,MySQL服务器的端口是不对外开放的。

好巧不巧,线上业务遇到bug了,开发的小伙伴需要远程连接MySQL来查看数据,那应该怎么办呢?

我们可以通过Nginx代理(“跳板机”)来进行连接。

2.Nginx代理连接

要实现对连接的代理转发,我们需要一台服务器并安装Nginx,且与MySQL服务器处于一个内网之中,内网之间可以访问。

其次,我们需要用到ngx_stream_core_module模块,该模块不是默认构建的,我们需要在configure时添加--with-stream来进行构建。

既然要用到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要监听的socket的地址和端口。

作用域:server

语法:listen address:port;

示例:

listen127.0.0.1:3306;
listen*:3306;
#效果与listen*:3306一样
listen3306;
listenlocalhost:3306;

4)配置示例

MySQL服务器,端口3306(单机环境)

stream{
server{
listen3306;
proxy_pass192.168.110.101:3306;
}
}

MySQL服务器,端口3306(集群环境)

stream{
upstreammysql_socket{
server192.168.110.101:3306;
}
server{
listen3306;
proxy_passmysql_socket;
}
}

此时,我们就可以通过例如Navicat等客户端进行连接。

3.限制访问IP

实现了对连接的代理,所有人都可以通过访问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访问
allow192.168.110.1;

#允许192.168.110.1到192.168.255.254
allow192.168.110.0/16;

#允许192.168.110.1到192.168.110.254
allow192.168.110.0/24;

#允许所有的IP访问
allowall;

2)deny

该指令设置指定的IP禁止访问。可以和allow指令配合使用。

作用域:stream, server

语法:deny address | CIDR | unix: | all;

#禁止192.168.110.1访问
deny192.168.110.1;

#禁止192.168.110.1到192.168.255.254
deny192.168.110.0/16;

#禁止192.168.110.1到192.168.110.254
deny192.168.110.0/24;

#禁止所有的IP访问
denyall;

3)配置示例

禁止所有的IP访问,192.168.110.100除外。

allow192.168.110.100;
denyall;

Tips:如果指定了allow,需要配合deny使用,否则就是允许所有的IP地址访问。

4.综合案例

只允许192.168.110.100通过Nginx连接MySQL服务器。

stream{
allow192.168.110.100;
denyall;
server{
listen3306;
proxy_pass192.168.110.101:3306;
}
}

审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 服务器
    +关注

    关注

    12

    文章

    8116

    浏览量

    82509
  • HTTP
    +关注

    关注

    0

    文章

    466

    浏览量

    30315
  • 虚拟主机
    +关注

    关注

    0

    文章

    64

    浏览量

    11270
  • MySQL
    +关注

    关注

    1

    文章

    775

    浏览量

    26004
  • nginx
    +关注

    关注

    0

    文章

    135

    浏览量

    11985

原文标题:Nginx 代理 MySQL 连接,并限制可访问IP

文章出处:【微信号:magedu-Linux,微信公众号:马哥Linux运维】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    本地LabVIEW访问远程mysql

    SQL SERVER我也尝试过,在连接字符串中写入远程访问对象的IP就可以。可是MYSQL这个数据库没用过,更没用LabVIEW对其进行过访问
    发表于 12-15 14:38

    【NanoPi NEO试用体验】之安装配置Nginx环境WEB网站详解

    本帖最后由 Q69693721 于 2016-10-18 13:54 编辑 LNMP(Linux+Nginx+Mysql+PHP)相信学过计算机编程和网站的人应该都知道他一直是Linux环境下
    发表于 10-18 12:25

    NanoPi NEO - 可靠的Nginx 网络服务器

    服务器部署,删除匿名用户和测试数据库。#mysql_secure_installation根据提示进行选择:3. 安装nginx如果你之前已经安装了Apache2,则需要先移除apache2
    发表于 06-20 15:43

    采用Nginx的反向代理解决跨域

    40Nginx的反向代理功能解决跨域问题
    发表于 10-10 10:58

    看看nginx连接频率limit_conn_module和请求频率limit_req_module限制模块

    影响业务正常运行。往往办法是限制对同一个IP连接数和并发数进行限制。今天我们就来看看nginx连接
    发表于 10-19 14:20

    使用代理IP还能查到真实IP

    。    一、代理分为透明代理与匿名代理    1.透明代理    仍然会发送你的真实IP,这种代理
    发表于 12-19 15:32 4778次阅读

    高匿ip代理工具具备什么功能?

    的安全系数。高匿ip代理主要的功能有有以下这些:1. 突破封锁:一般情况下很多网站会被限制访问,这是一种认为的限制,并且不同的服务器对
    发表于 01-05 18:06 538次阅读

    如何彻底搞懂Nginx知识网结构

    ,性能是其最重要的要求,十分注重效率,有报告nginx能支持高达50000个并发连接数 1.1反向代理 正向代理 正向代理:局域网中的电脑用
    的头像 发表于 05-03 14:15 1465次阅读
    如何彻底搞懂<b class='flag-5'>Nginx</b>知识网结构

    配置Nginx访问日志

    每当处理客户请求时,Nginx都会在访问日志中生成一个新记录。每个事件记录都包含一个时间戳,并包含有关客户端和所请求资源的各种信息。访问日志可以显示访问者的位置,
    的头像 发表于 05-24 09:59 1995次阅读

    linux是如何设置nginxmysql开机自启动?

    有很多小伙伴都没有一个统一的设置nginxmysql开机自启动的方式,今天我就将我的统一开机自启动格式分享给大家
    的头像 发表于 01-20 10:25 1321次阅读

    如何提高Mysql数据库的访问瓶颈

    为了提高Mysql数据库的访问瓶颈,常用的方法有如下两个: 在服务器端增加缓存服务器缓存常用的数据(例如redis) 增加连接池,来提高MYsql Server的
    的头像 发表于 11-08 16:22 780次阅读
    如何提高<b class='flag-5'>Mysql</b>数据库的<b class='flag-5'>访问</b>瓶颈

    Nginx目录结构有哪些

    什么是NginxNginx是一个 轻量级/高性能的反向代理Web服务器,他实现非常高效的反向代理、负载平衡,他可以处理2-3万并发连接
    的头像 发表于 11-11 11:27 382次阅读
    <b class='flag-5'>Nginx</b>目录结构有哪些

    nginx使用学习之正、反向代理

    Nginx 不仅可以做反向代理,实现负载均衡。还能用作正向代理来进行上网等功能。正向代理:如果把局域网外的 Internet 想象成一个巨大的资源库,则局域网中的客户端要访 问 Int
    的头像 发表于 11-13 10:54 239次阅读
    <b class='flag-5'>nginx</b>使用学习之正、反向<b class='flag-5'>代理</b>

    Nginx的配置文件如何设置头信息保留真实IP不丢失

    Nginx 配置中设置头信息以保留客户端的真实 IP 地址通常是在使用反向代理的场景中需要的。当 Nginx 作为反向代理时,客户端的真
    的头像 发表于 11-30 10:54 914次阅读

    如何通过Nginx实现禁止国外IP访问网站

    最近不少小伙伴反馈自己维护的项目中,经常在后台可以看到来自国外IP的攻击,令人头疼。今天浩道跟大家分享如何通过Nginx来实现禁止国外IP访问网站,确保你网站免遭国外
    的头像 发表于 12-01 11:12 717次阅读
    如何通过<b class='flag-5'>Nginx</b>实现禁止国外<b class='flag-5'>IP</b><b class='flag-5'>访问</b>网站