《Nginx反向代理MinIO集群全实战:负载均衡配置、SELinux安全策略与生产环境调优指南》

本文涉及的产品
传统型负载均衡 CLB,每月750个小时 15LCU
应用型负载均衡 ALB,每月750个小时 15LCU
网络型负载均衡 NLB,每月750个小时 15LCU
简介: SELinux(Security-Enhanced Linux) 是 Linux 内核的一个安全模块,用于提供强制访问控制(MAC, Mandatory Access Control),比传统的 Linux 文件权限(DAC, Discretionary Access Control)更严格。用执行命令时不受SELinux的限制,但Nginx Worker 进程:以。在一台新的虚拟机或现有虚拟机上安装 Nginx,这里使用。),确认请求被正确转发到 MinIO 集群。编辑 Nginx 配置文件。

 

目录

Nginx Proxy for MinIO Cluster

1. MinIO 集群配置

2. 安装配置 Nginx

2.1. 安装 Nginx

2.2. 配置 Nginx 作为负载均衡器

2.3. 解决SELinux限制

2.3.1. SELinux解析

2.3.2. SELinux限制解除

2.4. 启动 Nginx

2.5. 验证 Nginx 配置

2.6. 查看 Nginx 日志


Nginx Proxy for MinIO Cluster

虽然MinIO集群内置了负载均衡和高可用,但是用Nginx代理MinIO集群还有其他的好处:

  1. 负载均衡与高可用(非主要)
  2. 统一入口与域名管理
  3. 性能优化

1. MinIO 集群配置

首先已经部署了一个MinIO集群(例如 4 个节点:node201node202node203node204),并且每个节点都可以通过 HTTP 访问(例如 http://node201:9000)。MinIO集群搭建参考:MinIO在Linux上的集群安装与部署-CSDN博客

2. 安装配置 Nginx

2.1. 安装 Nginx

在一台新的虚拟机或现有虚拟机上安装 Nginx,这里使用192.168.33.205

yum install nginx -y

image.gif

2.2. 配置 Nginx 作为负载均衡器

编辑 Nginx 配置文件 vim /etc/nginx/nginx.conf,添加以下内容:

http {
  upstream minio_api {
    # 配置 MinIO 集群节点
    server node201:9000;
    server node202:9000;
    server node203:9000;
    server node204:9000;
  }
  upstream minio_console {
    # 配置 MinIO 集群节点
    server node201:9001;
    server node202:9001;
    server node203:9001;
    server node204:9001;
  }
  server {
    listen 9000;
    server_name 192.168.33.205;  # 替换为你的域名或 IP
    location / {
      proxy_pass http://minio_api;
      proxy_set_header Host $host;
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header X-Forwarded-Proto $scheme;
    }
  }
  server {
    listen 9001;
    server_name 192.168.33.205;  # 替换为你的域名或 IP
    location / {
      proxy_pass http://minio_console;
      proxy_set_header Host $host;
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header X-Forwarded-Proto $scheme;
    }
  }
}

image.gif

  • upstream minio_cluster:定义 MinIO 集群节点。
  • proxy_pass:将请求转发到 MinIO 集群。

2.3. 解决SELinux限制

2.3.1. SELinux解析

SELinux(Security-Enhanced Linux)是 Linux 内核的强制访问控制(MAC)安全模块,核心作用包括:

  1. 最小权限原则
    每个进程(如Nginx、Minio)仅拥有完成其任务所需的最小权限,即使进程以root身份运行,仍受策略限制。
    示例:Nginx默认无法绑定非HTTP端口,也无法访问Minio集群地址。
  2. 防止提权攻击
    即使攻击者利用漏洞获取进程控制权,也无法突破SELinux策略访问其他资源。
  3. 细粒度资源控制
    通过定义策略,精确控制:
  • 进程能访问的文件、目录、端口。
  • 进程之间的通信权限(如Nginx与Minio的API交互)。
  1. 安全上下文(Context)
    所有系统资源(文件、端口、进程)被赋予安全标签(如 http_port_t),策略基于标签匹配权限。

模式

作用

适用场景

Enforcing

强制执行安全策略,阻止所有违反策略的操作,并记录日志。

生产环境,需严格安全控制时。

Permissive

仅记录违反策略的操作,不实际阻止。用于审计和调试策略问题。

调试阶段,需要观察哪些操作会被SELinux拦截,但不想中断服务时。

Disabled

完全关闭SELinux,不加载任何策略。需重启生效,且重新启用后需重新标记文件系统上下文。

临时解决兼容性问题,或确认问题与SELinux无关时(不推荐长期使用)。

sudo setenforce 1       # 切换为Enforcing(临时生效,重启后失效)
sudo setenforce 0       # 切换为Permissive
sudo vi /etc/selinux/config  # 永久修改模式(需重启)

image.gif

2.3.2. SELinux限制解除

  • SELinux 限制访问外部网络

SELinux会限制 httpd_t(Nginx 进程域)的网络访问权限,拦截对外部服务的 TCP 连接,需要手动开启

# 永久允许Nginx网络连接
setsebool -P httpd_can_network_connect 1
# 验证设置
getsebool httpd_can_network_connect

image.gif

  • SELinux 的端口类型限制

SELinux 为不同服务定义了可绑定的端口类型:80, 443, 8080, 8443等,非标准端口默认不属于 http_port_t,因此 Nginx 会被 SELinux 阻止绑定,需要手动添加

yum install policycoreutils-python -y
#检查端口是否被 SELinux 允许
semanage port -l | grep http_port_t
# 添加端口 9000 9001 到 http_port_t 类型
semanage port -a -t http_port_t -p tcp 9000
semanage port -a -t http_port_t -p tcp 9001

image.gif

2.4. 启动 Nginx

systemctl start nginx
systemctl enable nginx

image.gif

2.5. 验证 Nginx 配置

访问 Nginx 服务器的 IP 或域名(例如 http://192.168.33.205:9000),确认请求被正确转发到 MinIO 集群。

image.gif 编辑

2.6. 查看 Nginx 日志

tail -f /var/log/nginx/error.log
tail -f /var/log/nginx/access.log

image.gif

相关实践学习
小试牛刀,一键部署电商商城
SAE 仅需一键,极速部署一个微服务电商商城,体验 Serverless 带给您的全托管体验,一起来部署吧!
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
目录
相关文章
|
1月前
|
设计模式 消息中间件 监控
并发设计模式实战系列(5):生产者/消费者
🌟 ​大家好,我是摘星!​ 🌟今天为大家带来的是并发设计模式实战系列,第五章,废话不多说直接开始~
78 1
|
1月前
|
设计模式 存储 安全
并发设计模式实战系列(7):Thread Local Storage (TLS)
🌟 大家好,我是摘星! 🌟今天为大家带来的是并发设计模式实战系列,第七章Thread Local Storage (TLS),废话不多说直接开始~
66 0
|
1月前
|
存储 Java Linux
SpringBoot × MinIO 极速开发指南:对象存储服务高可用实战
生成临时访问URL接口和文件预览其实是同一个方法,只是文件预览内定了七天访问,而这个方法可以自行制定,单位是秒。方法,所以返回的是地址信息,但是可以通过dubug看到Bucket中的属性,确实是当前所有桶信息。配置类中奖MinIOClient客户端注入到Springboot中。MinIO集群的在Linux上的部署可以参考:​​​​​​​。Nginx代理MinIO集群可以参考:​​​​​​​。从Bucket源码可以看出,并没有实现。
167 0
|
NoSQL 安全 Linux
Linux|minio对象存储服务的部署和初步使用总结
Linux|minio对象存储服务的部署和初步使用总结
669 0
|
1月前
|
设计模式 监控 Java
并发设计模式实战系列(8):Active Object
🌟 大家好,我是摘星!🌟今天为大家带来的是并发设计模式实战系列,第8章,废话不多说直接开始~
23 0
并发设计模式实战系列(8):Active Object
|
1月前
|
设计模式 缓存 监控
并发设计模式实战系列(14):CAS(无锁编程)
🌟 大家好,我是摘星!🌟今天为大家带来的是并发设计模式实战系列,第十四章,废话不多说直接开始~
26 0
|
1月前
|
存储 安全 Java
【高薪程序员必看】万字长文拆解Java并发编程!(7):不可变类设计指南
🌟 ​大家好,我是摘星!​ 🌟今天为大家带来的是并发编程中Java不可变类设计指南,废话不多说让我们直接开始。
37 0
|
1月前
|
存储 缓存 安全
JVM深入原理(七)(二):运行时数据区
堆的作用:存放对象的内存空间,它是空间最大的一块内存区域.栈上的局部变量表中,可以存放堆上对象的引用。静态变量也可以存放堆对象的引用,通过静态变量就可以实现对象在线程之间共享。堆的特点:线程共享:堆中的对象都需要考虑线程安全的问题垃圾回收:堆有垃圾回收机制,不再引用的对象就会被回收方法区的概述:方法区是存放基础信息的位置,线程共享,主要包括:类的元信息:保存了所有类的基本信息运行时常量池:保存了字节码文件中的常量池内容静态常量池:字节码文件通过编号查表的方式找到常量。
31 0
|
3月前
|
存储 人工智能 Kubernetes
ACK Gateway with AI Extension:面向Kubernetes大模型推理的智能路由实践
本文介绍了如何利用阿里云容器服务ACK推出的ACK Gateway with AI Extension组件,在Kubernetes环境中为大语言模型(LLM)推理服务提供智能路由和负载均衡能力。文章以部署和优化QwQ-32B模型为例,详细展示了从环境准备到性能测试的完整实践过程。
|
3月前
|
存储 人工智能 物联网
ACK Gateway with AI Extension:大模型推理的模型灰度实践
本文介绍了如何使用 ACK Gateway with AI Extension 组件在云原生环境中实现大语言模型(LLM)推理服务的灰度发布和流量分发。该组件专为 LLM 推理场景设计,支持四层/七层流量路由,并提供基于模型服务器负载感知的智能负载均衡能力。通过自定义资源(CRD),如 InferencePool 和 InferenceModel,可以灵活配置推理服务的流量策略,包括模型灰度发布和流量镜像。