当前位置:首页 > 技术文章 > 正文内容

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

arlanguage5个月前 (12-19)技术文章41

现阶段,对于一个互联网公司来讲,其生产环境基本上都是在云服务器上,例如常用的一些应用服务器、数据库服务器等等。但是在我们部署引用的时候,如果直接将数据库的链接暴露在公网上很明显不现实,存在很大的安全隐患。而一般情况下,数据库服务端口是不对外开放的。但是在生产环境出现问题之后,我们又需要通过数据库来查看问题。这个问题,一般的解决方案是使用VPN技术,或者是使用跳板机技术。下面我们就来看看如何使用Nginx来实现一个跳板机。

Nginx代理原理

既然要实现代理的请求转发,必不可少的就是需要一个Nginx服务器,并且要保证其与MySQL所在的服务器在同一个内网环境中,也就是说通过内网环境可以相互访问。

其次,需要我们去安装 ngx_stream_core_module模块 这个模块并不是默认构建的,而是需要我们在安装Nginx的时候通过 -with-stream 配置来进行构建。

Nginx的Stream模块主要是用来做四层的负载均衡,流量转发。它支持TCP和UDP流量的转发。相对于HTTP流量,TCP/UDP流量的负载均衡和处理更接近底层。 使用Nginx流代理可以极大的方便解决一些TCP/UDP流量管理的问题。

在这个模块安装好之后,有如下几个配置需要我们注意

stream

这个配置模块主要用来指定stream服务器的相关配置,是与HTTP模块平级的块。其定义在main模块中

stream {
		server{
    ……
    }
}

server

指定一个虚拟机,与http模块中的server功能类似,我们可以在stream中定义多个server如下所示。

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

listen

这个指令定义了虚拟机server所监听的socket的地址端口。

listen 127.0.0.1:3306;
 listen *:3306;
 # 效果与listen *:3306一样
 listen 3306;
 listen localhost:3306;

配置MySQL链接

以MySQL为例来进行配置,如果是在单机环境下则是通过如下的配置实现。

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

如果是在集群的环境下我们可以通过如下的方式来进行配置。这个配置有点类似于我们通过Nginx配置反向代理的负载均衡的方式。

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

完成上述配置之后,我们就可以通过MySQL的客户端工具来连接服务了。

对于IP访问的限制

配置完成之后,接下就需要对IP进行访问限制。为了保证安全Stream模块中还提供了如下的两条指令

  • allow:允许访问的IP
  • deny:禁止访问的IP

其配置如下。

 # 允许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;

禁止访问的配置如下

# 禁止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;

我们可以通过如下的设置来限制IP的访问。

allow 192.168.110.100;
deny all;

这里需要注意这两个指令是相互配合使用,如果只设置其中的一个选项,则另一个配置选项就成了默认值。

总结

通过下面这个配置,我们就可以实现一个MySQL数据库连接配置设置,允许192.168.110.100访问并且只允许192.168.110.100访问。

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

扫描二维码推送至手机访问。

版权声明:本文由AR编程网发布,如需转载请注明出处。

本文链接:http://www.arlanguage.com/post/338.html

标签: nginx 指定ip
分享给朋友:

“如何用 Nginx 代理 MySQL 连接,并限制可访问 IP?” 的相关文章

强烈推荐一个非常好的 NGINX WEB UI 可视化用户界面

在线预览网址:https://demo.nginxui.com用户名:admin密码:admin特色在线查看服务器 CPU、内存、系统负载、磁盘使用率等指标在线 ChatGPT 助理一键申请和自动续签 Let's encrypt 证书在线编辑 Nginx 配置文件,编辑器支持 Nginx 配...

一次说清-Nginx反向代理及参数配置

我们在配置服务时常常会用到Nginx来设置反向代理,虽然常用,但是我们真的了解各个参数的意思吗?不如我们一起来看下吧。1、反向代理反向代理(reverse proxy)方式是指用代理服务器来接受Internet上的连接请求,然后将请求转发给内部网络中的上游服务器,并将从上游服务器上得到的结果返回给I...

Nginx Lua编程基础

Lua是一门脚本动态语言,并不太适合做复杂业务逻辑的程序开发,但是,在高并发场景下,Nginx Lua编程是解决性能问题的利器。Nginx Lua编程主要的应用场景如下:API网关:实现数据校验前置、请求过滤、API请求聚合、AB测试、灰度发布、降级、监控等功能,著名的开源网关Kong就是基于Ngi...

nginx启动、重启、关闭

一、启动cd usr/local/nginx/sbin./nginx二、重启更改配置重启nginxkill -HUP 主进程号或进程号文件路径或者使用cd /usr/local/nginx/sbin./nginx -s reload 判断配置文件是否正确nginx -t -c /usr/local/...

基于Docker一键LNMP(Nginx+MySQL+PHP7/5+Redis)安装程序

一键部署LNMP环境的目的,该环境特点:完全开源支持多版本PHP切换(PHP5.4、PHP5.6、PHP7.2...)支持绑定任意多个域名支持HTTPS和HTTP/2PHP源代码位于host中MySQL data位于host中所有配置文件可在host中直接修改所有日志文件可在host中直接查看内置完...

nginx 解决 readv() failed (104: Connection reset by peer)

查看nginx error错误,发现上传接口报以下错:2019/10/10 19:58:25 [error] 299784#0: *5967188 readv() failed (104: Connection reset by peer) while reading upstream, clien...