Nginx 代理 MySQL 连接

文章目录

  • Nginx 代理 MySQL 连接
  • 1. 前言
  • 2. 部署 Nginx,MySQL
  • 3. ngx_stream_core_module 配置方式
      • 3.1 stream
      • 3.2 server
      • 3.3 listen
      • 3.4 配置示例
  • 4. 限制访问 IP
      • 4.1 allow
      • 4.2 deny
      • 4.3 配置示例
  • 5. 综合案例

Nginx 代理 MySQL 连接

原文地址:https://mp.weixin.qq.com/s/sd_u6R7eLeUOsCynu771cw

1. 前言

本次测试目的:

  • 使用 Nginx 机器当做跳板机,外部机器通过 Nginx 机器连接到 mysql 数据库并进行操作。
  • 在 nginx 中配置内容进行访问限制。

要求:

  • 一台服务器并安装Nginx,且与MySQL服务器处于一个内网之中,内网之间可以访问。

2. 部署 Nginx,MySQL

👉 部署 nginx

参考连接:Nginx

部署要求:

  • 需要用到ngx_stream_core_module模块,该模块不是默认构建的,需要在configure时添加--with-stream来进行构建
  • 示例:./configure --with-stream

👉 部署 mysql

参考连接:MySQL

3. ngx_stream_core_module 配置方式

3.1 stream

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

  • 作用域:main
  • 语法格式:
 stream {server {......}}

3.2 server

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

  • 作用域:stream
  • 语法格式:
stream {server {......}server {......}}

3.3 listen

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

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

3.4 配置示例

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 3306;proxy_pass mysql_socket;}}

在这里插入图片描述

4. 限制访问 IP

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

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

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

4.1 allow

该指令设置指定的IP允许访问。可以和deny指令配合使用

  • 作用域:stream, server
  • 语法:allow address | CIDR | unix: | all;
  • 示例
 # 允许192.168.137.1访问allow 192.168.137.1;# 允许192.168.137.1到192.168.255.254allow 192.168.137.0/16;# 允许192.168.137.1到192.168.137.254allow 192.168.137.0/24;# 允许所有的IP访问allow all;

4.2 deny

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

  • 作用域:stream, server
  • 语法:deny address | CIDR | unix: | all;
  • 示例
# 禁止192.168.137.1访问deny 192.168.137.1;# 禁止192.168.137.1到192.168.255.254deny 192.168.137.0/16;# 禁止192.168.137.1到192.168.137.254deny 192.168.137.0/24;# 禁止所有的IP访问deny all;

4.3 配置示例

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

allow 192.168.137.102;
deny all;

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

5. 综合案例

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

stream  {allow 192.168.137.102;deny all;server {listen 3306;proxy_pass 192.168.137.130:3306;}}

在这里插入图片描述

 
 
 
 
 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/86230.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何用好免费的ChatGPT

如何用好免费的ChatGPT 前言ChatGPT使用入口在线体验地址:点我体验 ChatGPT介绍ChatGPT初级使用技巧初级使用技巧:清晰明了的问题表达 ChatGPT中级使用语法中级使用语法:具体化问题并提供背景信息 ChatGPT高级使用高级使用:追问、…

JMeter:断言之响应断言

一、断言的定义 断言用于验证取样器请求或对应的响应数据是否返回了期望的结果。可以是看成验证测试是否预期的方法。 对于接口测试来说,就是测试Request/Response,断言即可以针对Request进行,也可以针对Response进行。但大部分是对Respons…

推动统一供应链“度量衡”,上汽大通突破传统拥抱SaaS生态

中国汽车市场规模已连续14年位居世界第一,目前占世界汽车份额31%。近年来,物联网、人工智能、电池等技术的快速发展,也为中国从汽车大国逐步迈向汽车强国注入巨大动力。在新一轮的汽车产业变革中,构建一个更智能、更高效协同的供应…

[Linux入门]---git命令行的基本使用

文章目录 1.git使用gitee仓库创建git使用测试ignore文件 1.git使用 git是一款对文件进行版本控制的软件,gitee、github是基于git软件搭建的网站,是可以对代码进行托管的平台;github是国外的网站,访问慢,不稳定&#xf…

RobotFramework+Eclispe环境安装篇

【软件测试面试突击班】如何逼自己一周刷完软件测试八股文教程,刷完面试就稳了,你也可以当高薪软件测试工程师(自动化测试) 环境安装是学习任何一个新东西的第一步,这一步没走舒坦,那后面就没有心情走下去了…

Docker赋能物联网:探索软件供应链的优势、挑战和安全性

作者:JFrog大中华区总经理董任远 随着联网设备硬件性能的日益提升及价格愈发低廉,物联网应用的复杂性随之提升。常用的容器化平台Docker能够帮助精简流程,助力开发人员更轻松地创建和维护物联网应用。本文将探讨Docker为物联网开发带来的优势…

【C语言学习笔记---字符串函数】

C语言程序设计笔记---018 C语言字符串函数1、字符串函数1.1、strlen函数1.2、strcpy函数1.3、strcat函数1.4、strcmp函数1.5、strncpy函数1.6、strncat函数1.7、strncmp函数1.8、strstr函数1.9、strtok函数1.10、strerror函数 2、字符分类函数2.1、islower函数2.2、isdigit 和 …

docker镜像相关

docker镜像相关 docker镜像相关理解解释unionFS(联合文件系统)镜像加载原理docker镜像要采用这种分层结构 重点理解docker镜像commit 操作实例案例演示总结 docker镜像相关理解 解释 镜像是一种轻量级,可执行的独立软件包,它包含…

Vue基础知识点(面试可用):v-if和v-show的区别

① 简述v-if和v-show的区别? v-if 在编译过程中会被转化成三元表达式,条件不满足时不渲染此节点。元素销毁和重建控制显示隐藏。 v-show 会被编译成指令,条件不满足时控制样式将此节点隐藏(display:none) css样式控制…

【Datawhale课程笔记-简单学点大模型】模型架构

模型架构 参考地址:https://github.com/datawhalechina/so-large-lm/blob/main/第七章:模型架构.md 大模型之模型概括 语言模型的一开始就可以被看做是一个黑箱,当前大规模语言模型的能力在于给定一个基于自身需求的prompt就可以生成符合需…

Redis学习笔记--002

Redis的JAVA客户端 文章目录 Redis的JAVA客户端一、Redis的Java客户端的种类二、Jedis2.1、使用步骤2.2、Jedis连接池 三、[SpringDataRedis](https://spring.io/projects/spring-data-redis)3.1、介绍3.2、RedisTemplate3.3、SpringDataRedis使用步骤3.4、SpringDataRedis的序…

RabbitMQ工作模式——PubSub生产者及消费者

PubSub模式生产者代码 public class Producer_PubSub {public static void main(String[] args) throws IOException, TimeoutException {//1.创建连接工厂ConnectionFactory factory new ConnectionFactory();//2.设置参数factory.setHost("172.16.98.133"); ip 默…

JavaWeb 学习笔记 8:AJAX

JavaWeb 学习笔记 8:AJAX AJAX(Asynchronous JavaScript And XML,异步 js 和 XML)是一种用 js 代码异步(或同步)的方式请求服务端数据,并在页面显示或加载的技术。 1.快速入门 先看如何用纯 …

STM32-无人机-电机-定时器基础知识与PWM输出原理

电机控制基础——定时器基础知识与PWM输出原理 - 掘金单片机开发中,电机的控制与定时器有着密不可分的关系,无论是直流电机,步进电机还是舵机,都会用到定时器,比如最常用的有刷直流电机,会使用定时器产生PW…

Linux学习记录——삼십 socket编程---udp套接字

文章目录 UDP套接字简单通信1、服务端1、创建文件,写框架2、用命令行参数调起程序3、服务端运行逻辑 2、客户端1、创建套接字2、发送数据 3、测试4、通信5、加功能1、处理数据2、群聊 6、Windows下socket编程的不同 UDP套接字简单通信 1、服务端 1、创建文件&…

【C语言学习笔记---内存函数】

C语言程序设计笔记---019 C语言进阶之内存函数1、memcpy函数1.1、模拟实现memcpy 2、memmove函数2.1、模拟实现memmove函数 3、memset函数4、memcmp函数5、结语 C语言进阶之内存函数 前言: 通过C语言进阶前篇的字符串函数的知识,继续C语言的内存函数学习…

vue+element plus 使用table组件,清空用户的选择项

<el-table ref"tableRef"> .... </el-table> <script lang"ts" setup> import { onMounted, reactive, ref, nextTick } from vue const clearBtn () > {console.log(清空用户的选择项)tableRef.value.clearSelection() } </scr…

基于Java的酒店管理系统

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战 主要内容&#xff1a;毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询 文末联系获取 项目介绍…

洛谷P5660:数字游戏 ← CSP-J 2019 复赛第1题

【题目来源】https://www.luogu.com.cn/problem/P5660https://www.acwing.com/problem/content/1163/【题目描述】 小 K 同学向小 P 同学发送了一个长度为 8 的 01 字符串来玩数字游戏&#xff0c;小 P 同学想要知道字符串中究竟有多少个 1。 注意&#xff1a;01 字符串为每一个…

docker alpine:3.16 root权限安装Anaconda3-2020.07-Linux-x86_64和jdk

首先查看系统版本: rootfv-az454-287:/tmp# uname -a Linux fv-az454-287 5.15.0-1046-azure #53~20.04.1-Ubuntu SMP Mon Aug 28 14:17:23 UTC 2023 x86_64 x86_64 x86_64 GNU/Linux rootfv-az454-287:/tmp# grep NA /etc/os-release NAME"Ubuntu" PRETTY_NAME&q…