nginx代理DB & ip限制

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL DuckDB 分析主实例,集群系列 8核16GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: nginx代理DB & ip限制

一、前言

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

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

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


二、nginx代理连接

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

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


2.1、在原有模块添加ngx_stream_core_module

安装stream模块

# 安装stream模块实现tcp代理
./configure --with-http_ssl_module --add-module=/usr/local/src/nginx-module-vts-0.1.18/ --with-http_stub_status_module --with-http_sub_module --with-stream
# 编译
make
# 停止当前nginx
nginx -s stop

备份原有的nginx二进制文件mv /use/sbin/nginx{,.bak}

替换原有的二进制文件cp objs/nginx /use/sbin/(拷贝到当前nginx所在文件夹下)

启动nginx

使用nginx -V查看nginx安装了那些模块

配置stream

既然要用到ngx_stream_core_module模块,首当其冲,是看看其提供的指令,我们才知道怎么来进行配置。


2.2、stream

该指令定义了stream服务器。与http块平级,定义在main块中。

  • 作用域:main
  • 语法:stream {...}
  • 示例:
 stream {
     server {
         ......
     }
 }

2.3、server

该指令定义一个虚拟主机,与http块中的server类似。我们可以在stream块中定义多个server

  • 作用域:stream
  • 语法:server {...}
  • 示例:
stream {
     server {
         ......
     }
     server {
         ......
     }
 }

2.4、listen

该指令定义虚拟主机server要监听的socket的地址和端口。

  • 作用域:server
  • 语法:listen address:port;
  • 示例:
listen 127.0.0.1:3306;
 listen *:3306;
 # 效果与listen *:3306一样
 listen 3306;
 listen localhost:3306;

2.5、配置示例

  • 代理MySQL服务器,端口3306(单机环境)
stream  {
     server {
         listen 3306;
         proxy_pass 192.168.110.101:3306;
     }
 }
  • 代理MySQL服务器,端口3306(集群环境)
stream  {
     upstream mysql_socket {
         server 192.168.110.101:3306;
     }
     server {
             listen 3309;
             proxy_pass mysql_socket;
     }
 }
  • 此时,我们就可以通过例如Navicat等客户端连接nginx ip:3309,因为本次搭建是用自己电脑的nginx,使用的是localhost:3309即可连接到mysql。


 


三、限制访问IP


实现了对连接的代理,所有人都可以通过访问Nginx来连接MySQL服务器,解决了外网无法连接的问题。

为了更进一步的缩小访问范围,保证数据安全,我们可以限制只有公司网络的IP地址可以通过Nginx进行连接。

Nginx提供了ngx_stream_access_module模块,其指令非常简单,仅包含allowdeny指令。

3.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;

3.2、deny

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

  • 作用域: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.3、配置示例

  • 禁止所有的IP访问,192.168.110.100除外。
allow 192.168.110.100;
 deny all;
  • Tips:如果指定了allow,需要配合deny使用,否则就是允许所有的IP地址访问!!!!!

3.4、综合案例

  • 只允许127.0.0.1通过Nginx连接MySQL服务器。
stream  {
     allow 127.0.0.1;
     deny all;
     server {
         listen 3309;
         proxy_pass 192.168.110.101:3306;
     }
 }
  • 允许一些指定的一些ip通过nginx访问Mysql服务器
stream  {
     allow 127.0.0.1;
     allow xxx.xxx.xxx.xxx;
     allow xxx.xxx.xxx.xxx;
     allow xxx.xxx.xxx.xxx;
     deny all;
     server {
         listen 3309;
         proxy_pass 192.168.110.101:3306;
     }
 }


相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
相关文章
|
11月前
|
网络协议 应用服务中间件 网络安全
Nginx,正向代理
本文介绍了Nginx作为HTTPS正向代理的两种方案:HTTP CONNECT隧道(7层)和NGINX stream(4层)。HTTP CONNECT隧道需要客户端手动配置代理,通过CONNECT请求建立隧道;而NGINX stream则更适合透明代理,利用SNI字段实现流量转发。文章详细讲解了两者的原理、环境搭建、使用场景及常见问题,并提供了配置示例和最佳实践建议。内容转载自阿里云开发者社区@怀知的文章,推荐读者参阅原文获取更多信息。感谢您的阅读!
1493 80
Nginx,正向代理
|
7月前
|
存储 应用服务中间件 nginx
在使用Nginx之后,如何在web应用中获取用户IP以及相关原理
但总的来说,通过理解网络通信的基础知识,了解http协议以及nginx的工作方式,我们已经能在大多数情况下准确地获取用户的真实IP地址了,在调试问题或者记录日志时会起到很大的帮助。
360 37
|
负载均衡 网络协议 Unix
Nginx七层(应用层)反向代理:SCGI代理scgi_pass篇
Nginx七层(应用层)反向代理:SCGI代理scgi_pass篇
246 1
|
监控 应用服务中间件 测试技术
确保正则表达式在 Nginx 代理中的准确性和稳定性
【10月更文挑战第19天】总之,正则表达式在 Nginx 代理中具有重要作用,但要确保其准确性和稳定性需要付出一定的努力和关注。通过以上方法的综合运用,我们可以提高正则表达式配置的可靠性,为用户提供更好的服务体验。
|
应用服务中间件 API nginx
使用正则表达式实现 Nginx 代理
【10月更文挑战第19天】在不断发展的互联网技术中,掌握正则表达式在 Nginx 代理中的应用是非常重要的。不断探索和实践,将有助于我们在实际工作中更好地运用这一技术,提升项目的质量和效率。
|
缓存 负载均衡 应用服务中间件
Nginx 实现一个端口代理多个前后端服务
【10月更文挑战第19天】Nginx 的强大功能不仅限于此,它还可以与其他技术和工具相结合,为我们的应用提供更强大的支持和保障。在不断发展的互联网时代,掌握 Nginx 的使用技巧将为我们的工作和生活带来更多的便利和效益。
|
12月前
|
缓存 Java 应用服务中间件
nginx的正向代理和反向代理以及tomcat
Nginx的正向代理和反向代理功能在不同的场景中具有重要作用,正向代理主要用于客户端访问控制和匿名浏览,而反向代理则用于负载均衡和高可用性服务。Tomcat作为Java Web应用服务器,与Nginx结合使用,可以显著提升Web应用的性能和稳定性。通过合理配置Nginx和Tomcat,可以构建高效、稳定和可扩展的Web服务架构。
449 11
|
前端开发 应用服务中间件 定位技术
Nginx 如何代理转发传递真实 ip 地址?
【10月更文挑战第32天】
2733 5
Nginx 如何代理转发传递真实 ip 地址?
|
负载均衡 应用服务中间件 Linux
nginx学习,看这一篇就够了:下载、安装。使用:正向代理、反向代理、负载均衡。常用命令和配置文件,很全
这篇博客文章详细介绍了Nginx的下载、安装、配置以及使用,包括正向代理、反向代理、负载均衡、动静分离等高级功能,并通过具体实例讲解了如何进行配置。
582 5
nginx学习,看这一篇就够了:下载、安装。使用:正向代理、反向代理、负载均衡。常用命令和配置文件,很全
|
监控 应用服务中间件 定位技术
要统计Nginx的客户端IP,可以通过分析Nginx的访问日志文件来实现
要统计Nginx的客户端IP,可以通过分析Nginx的访问日志文件来实现
1032 3