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

本文涉及的产品
网络型负载均衡 NLB,每月750个小时 15LCU
传统型负载均衡 CLB,每月750个小时 15LCU
应用型负载均衡 ALB,每月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

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
相关文章
|
7月前
|
监控 Linux 应用服务中间件
Linux多节点多硬盘部署MinIO:分布式MinIO集群部署指南搭建高可用架构实践
通过以上步骤,已成功基于已有的 MinIO 服务,扩展为一个 MinIO 集群。该集群具有高可用性和容错性,适合生产环境使用。如果有任何问题,请检查日志或参考MinIO 官方文档。作者联系方式vx:2743642415。
2346 57
|
3月前
|
安全 NoSQL API
拼多多:通过微信支付API实现社交裂变付款的技术解析
基于微信JSAPI构建社交裂变支付系统,用户发起拼单后生成预订单与分享链接,好友代付后通过回调更新订单并触发奖励。集成微信支付、异步处理、签名验签与Redis关系绑定,提升支付成功率与裂变系数,实现高效安全的闭环支付。
442 0
|
存储 Kubernetes 算法
MinIO 分布式集群搭建
MinIO 分布式集群搭建 分布式 Minio 可以让你将多块硬盘(甚至在不同的机器上)组成一个对象存储服务。由于硬盘分布在不同的节点上,分布式 Minio 避免了单点故障。 Minio 分布式模式可以搭建一个高可用的对象存储服务,你可以使用这些存储设备,而不用考虑其真实物理位置。
7343 0
|
9月前
|
NoSQL Java 关系型数据库
微服务——SpringBoot使用归纳——Spring Boot 中集成Redis——Redis 介绍
本文介绍在 Spring Boot 中集成 Redis 的方法。Redis 是一种支持多种数据结构的非关系型数据库(NoSQL),具备高并发、高性能和灵活扩展的特点,适用于缓存、实时数据分析等场景。其数据以键值对形式存储,支持字符串、哈希、列表、集合等类型。通过将 Redis 与 Mysql 集群结合使用,可实现数据同步,提升系统稳定性。例如,在网站架构中优先从 Redis 获取数据,故障时回退至 Mysql,确保服务不中断。
357 0
微服务——SpringBoot使用归纳——Spring Boot 中集成Redis——Redis 介绍
|
7月前
|
存储 Java Linux
SpringBoot × MinIO 极速开发指南:对象存储服务高可用实战
生成临时访问URL接口和文件预览其实是同一个方法,只是文件预览内定了七天访问,而这个方法可以自行制定,单位是秒。方法,所以返回的是地址信息,但是可以通过dubug看到Bucket中的属性,确实是当前所有桶信息。配置类中奖MinIOClient客户端注入到Springboot中。MinIO集群的在Linux上的部署可以参考:​​​​​​​。Nginx代理MinIO集群可以参考:​​​​​​​。从Bucket源码可以看出,并没有实现。
731 0
|
SQL 关系型数据库 Linux
搭建 PostgreSQL 流复制主从指南(适用于 CentOS 7.x)
搭建 PostgreSQL 流复制主从指南(适用于 CentOS 7.x)
643 7
|
Linux
[minio]挂载minio到本地
[minio]挂载minio到本地
821 2
|
缓存 监控 安全
优化Elasticsearch 集群配置
优化Elasticsearch 集群配置
335 4

热门文章

最新文章