Nginx 代理 MySQL 连接

news2025/1/11 16:57:02

文章目录

  • 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.254
 allow 192.168.137.0/16;
 
 # 允许192.168.137.1到192.168.137.254
 allow 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.254
 deny 192.168.137.0/16;
 
 # 禁止192.168.137.1到192.168.137.254
 deny 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.coloradmin.cn/o/1035519.html

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

相关文章

Windows批处理文件 @echo off作用

bat批处理文件代码中有echo off 这样的语句,echo off是什么意思?在bat中扮演着什么作用呢? A: echo off的意思是在批处理运行命令的时候不会一条一条的显示执行的命令,与之相匹配的还有echo on。 echo off 与echo on …

机器视觉康耐视Visionpro-脚本编写标记标识:点,直线,矩形,圆

显示标记标识的重要作用就是,对NG或者OK对操作机器视觉的人去看到具体位置缺陷或者NG坐标。 一.点CogPointMarker CogPointMarker PointMarker1 = new CogPointMarker();//创建对象,点CogPointMarker //注意运行工具 PointMarker1.X = 100; PointMarker1

基于FPGA的16QAM调制verilog代码

名称:FPGA的16QAM调制verilog 软件:Quartus 语言:Verilog 要求: 使用FPGA实现16QAM的调制,并进行仿真 代码下载:FPGA的16QAM调制verilog_Verilog/VHDL资源下载 代码网:hdlcode.com 部分代…

万界星空科技MES与WMS如何集成的?

传统制造业数字化转型正汹涌而来,要进一步提高产业发展质量,重塑制造业竞争优势,就必须加快发展数字化制造,加紧推动制造业的数字化转型。在这一数字化背景下,新一代科技技术的运用尤为重要。在具体实践中,…

工具及方法 - 二进制编辑软件

之前介绍过用Notepad和VSCode进行二进制文件编辑。 很多通用型的文本编辑器都会集成二进制文件编辑功能,或者使用插件等形式扩展此项功能。比如vi/vim等工具。 而且,作为文本编辑、二进制文件编辑一类的工具,数量众多,各有特色。…

msvcp140为什么会丢失?msvcp140.dll丢失的解决方法

msvcp140.dll 是一个动态链接库文件,它包含了 C 运行时库的一些函数和类,例如全局对象、异常处理、内存管理、文件操作等。它是 Visual Studio 2015 及以上版本中的一部分,用于支持 C 应用程序的运行。如果 msvcp140.dll 丢失或损坏&#xff…

redis安装问题

title: “Redis安装问题” createTime: 2022-01-04T20:47:0608:00 updateTime: 2022-01-04T20:47:0608:00 draft: false author: “name” tags: [“redis”] categories: [“install”] description: “测试的” title: redis安装可能遇到的错误 createTime: 2022-01-04T20:47…

如何在pycharm专业版使用conda虚拟环境

目 录 本文背景 前提条件 操作步骤 1.查看当前虚拟环境 2.创建一个新的虚拟环境 3.查看虚拟环境 4.切换虚拟环境 5.无依赖运行pandas代码 6.终端安装依赖 7.再次运行 本文背景 在经历了之前痛苦的环境各种报错的情况下,我终于知道如何有序地管理环境了 那…

SPA项目之登录注册--请求问题(POSTGET)以及跨域问题

🥳🥳Welcome Huihuis Code World ! !🥳🥳 接下来看看由辉辉所写的关于Vue的相关操作吧 目录 🥳🥳Welcome Huihuis Code World ! !🥳🥳 一.ElementUI是什么 💡准备工作&…

数据结构与算法-时间复杂度与空间复杂度

数据结构与算法 🎈1.概论🔭1.1什么是数据结构?🔭1.2什么是算法? 🎈2.算法效率🔭2.1如何衡量一个算法的好坏?🔭2.2算法的复杂度🔭2.3时间复杂度📖2…

Oracle 12c自动化管理特性的新进展:自动备份、自动恢复和自动维护功能的优势|oracle 12c相对oralce 11g的新特性(3)

一、前言: 前面几期讲解了oracle 12c多租户的使用、In-Memory列存储来提高查询性能以及数据库的克隆、全局数据字典和共享数据库资源的使用 今天我们讲讲oracle 12c的另外的一个自动化管理功能新特性:自动备份、自动恢复、自动维护的功能 二、自动备份、自动恢复、自动维护…

新思路,4.9+氧化应激相关基因构建风险模型

今天给同学们分享一篇氧化应激预后模型的生信文章“Construction of an oxidative stress-related lncRNAs signature to predict prognosis and the immune response in gastric cancer”,这篇文章于2023年5月31日发表在Scientific Reports期刊上,影响因…

【LeetCode】——双指针(快慢指针)/多指针

个人主页 代码仓库 C语言专栏 初阶数据结构专栏 Linux专栏 前言 大家好!这是新开的LeetCode刷题专栏,这个专栏不只是随便的拿一些我练过的题讲解,而是总结我在刷题中的一些方法适用于一大类的题,是给大家提供这一大类题的解题…

STL-函数对象、谓词、常用算法

函数对象 函数对象概念 重载函数调用操作符的类,其对象常称为函数对象 函数对象使用重载的()时,行为类似函数调用,也叫仿函数 本质: 函数对象(仿函数)是一个类,不是一个函数 函数对象使用…

第一章:最新版零基础学习 PYTHON 教程(第十节 - Python 语句中的 – Python 如果否则)

在现实生活中,有时我们需要做出一些决定,并根据这些决定来决定下一步应该做什么。在编程中也会出现类似的情况,我们需要做出一些决定,并根据这些决定我们将执行下一个代码块。编程语言中的决策语句决定了程序执行流程的方向(控制流)。 Python 中的控制流类型 在Python…

计算π的近似值分数 ——python

利用格里高利公式: 计算 的近似值,直到最后一项的绝对值小于给定精度eps。 输入格式: 输入小于1且大于0的阈值。 输出格式: 输出满足阈值条件的近似圆周率,输出到小数点后6位。 输入样例: 在这里给出一组输入。例如: 0.0…

基于Quartz的可视化UI操作组件GZY.Quartz.MUI更新说明(附:在ABP中集成GZY.Quartz.MUI可视化操作组件)

NET Core 基于Quartz的UI可视化操作组件 GZY.Quartz.MUI 简介 像swaggerUI一样,项目入侵量小,仅需要在Startup中注入的UI组件 先上一张效果图,给没用过的兄弟们科普一下,如图: 更新内容 接下来,介绍一下更新了哪些功能. 1.修复采用数据库持久化数据的情况下,偶尔出现的异常…

一、vue2的基础语法巩固

一、定义:是一个渐进式的JavaScript框架 二、特点: 减少了大量的DOM操作编写 ,可以更专注于逻辑操作分离数据和界面的呈现,降低了代码耦合度(前端端分离)支持组件化开发,更利于中大型项目的代码组织 vue2核心功能&a…

NIO简单介绍

一、什么是NIO 1、Java NIO全称java non-blocking IO, 是指JDK提供的新API。从JDK1.4开始,Java提供了一系列改进的输入/输出的新特性,被统称为NIO(即New IO),是同步非阻塞的 2、NIO有三大核心部分: Channel(通道), Buf…

2023-9-23 区间覆盖

题目链接&#xff1a;区间覆盖 #include <iostream> #include <algorithm>using namespace std;const int N 100010;int n; struct Range {int l, r;bool operator< (const Range &W) const{return l < W.l;} }range[N];int main() {int st, ed;cin >…