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

简介: 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应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
相关文章
|
存储 负载均衡 算法
什么是Minio?如何搭建Minio集群?
MinIO 是高性能的对象存储,是为海量数据存储、人工智能、大数据分析而设计的,它完全兼容Amazon S3接口,单个对象最大可达5TB,适合存储海量图片、视频、日志文件、备份数据和容器/虚拟机镜像等。MinIO主要采用Golang语言实现,,客户端与存储服务器之间采用http/https通信协议。
3592 0
什么是Minio?如何搭建Minio集群?
|
存储 Kubernetes 算法
MinIO 分布式集群搭建
MinIO 分布式集群搭建 分布式 Minio 可以让你将多块硬盘(甚至在不同的机器上)组成一个对象存储服务。由于硬盘分布在不同的节点上,分布式 Minio 避免了单点故障。 Minio 分布式模式可以搭建一个高可用的对象存储服务,你可以使用这些存储设备,而不用考虑其真实物理位置。
7662 0
|
应用服务中间件 nginx 数据安全/隐私保护
你好,MinIO
不花钱的对象就是香!
1948 0
|
消息中间件 Kubernetes 数据安全/隐私保护
milvus本地集群部署(非k8s)
milvus本地集群部署(非k8s)
1555 0
|
SQL druid Java
springboot +logback+阿里数据源(druid)打印sql日志以及简化日志输出方式
springboot +logback+阿里数据源(druid)打印sql日志以及简化日志输出方式
3648 0
|
监控 Linux 应用服务中间件
Linux多节点多硬盘部署MinIO:分布式MinIO集群部署指南搭建高可用架构实践
通过以上步骤,已成功基于已有的 MinIO 服务,扩展为一个 MinIO 集群。该集群具有高可用性和容错性,适合生产环境使用。如果有任何问题,请检查日志或参考MinIO 官方文档。作者联系方式vx:2743642415。
4111 57
|
10月前
|
安全 NoSQL API
拼多多:通过微信支付API实现社交裂变付款的技术解析
基于微信JSAPI构建社交裂变支付系统,用户发起拼单后生成预订单与分享链接,好友代付后通过回调更新订单并触发奖励。集成微信支付、异步处理、签名验签与Redis关系绑定,提升支付成功率与裂变系数,实现高效安全的闭环支付。
1020 0
|
存储 API 数据安全/隐私保护
使用宝塔搭建MinIO并且设置域名访问
本文介绍了如何使用宝塔面板搭建MinIO并设置域名访问的完整流程。首先通过宝塔面板安装Docker及MinIO,配置域名与端口,完成Web管理界面的部署。接着,创建存储桶、配置访问规则和API密钥,实现资源的安全管理。最后,通过反向代理设置API接口,测试文件上传功能,确保MinIO可用于图片和文件资源的存储。作者Harry技术还分享了相关开源项目,适合开发者快速上手。
2612 2
使用宝塔搭建MinIO并且设置域名访问
|
Dubbo Java 应用服务中间件
Dubbo 3.3.0-beta 版本正式发布
Dubbo 3.3.0-beta 版本正式发布
1127 108