目录
Nginx Proxy for MinIO Cluster
虽然MinIO集群内置了负载均衡和高可用,但是用Nginx代理MinIO集群还有其他的好处:
- 负载均衡与高可用(非主要)
- 统一入口与域名管理
- 性能优化
1. MinIO 集群配置
首先已经部署了一个MinIO集群(例如 4 个节点:node201
、node202
、node203
、node204
),并且每个节点都可以通过 HTTP 访问(例如 http://node201:9000
)。MinIO集群搭建参考:MinIO在Linux上的集群安装与部署-CSDN博客
2. 安装配置 Nginx
2.1. 安装 Nginx
在一台新的虚拟机或现有虚拟机上安装 Nginx,这里使用192.168.33.205
yum install nginx -y
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; } } }
upstream minio_cluster
:定义 MinIO 集群节点。proxy_pass
:将请求转发到 MinIO 集群。
2.3. 解决SELinux限制
2.3.1. SELinux解析
SELinux(Security-Enhanced Linux)是 Linux 内核的强制访问控制(MAC)安全模块,核心作用包括:
- 最小权限原则
每个进程(如Nginx、Minio)仅拥有完成其任务所需的最小权限,即使进程以root身份运行,仍受策略限制。
示例:Nginx默认无法绑定非HTTP端口,也无法访问Minio集群地址。 - 防止提权攻击
即使攻击者利用漏洞获取进程控制权,也无法突破SELinux策略访问其他资源。 - 细粒度资源控制
通过定义策略,精确控制:
- 进程能访问的文件、目录、端口。
- 进程之间的通信权限(如Nginx与Minio的API交互)。
- 安全上下文(Context)
所有系统资源(文件、端口、进程)被赋予安全标签(如http_port_t
),策略基于标签匹配权限。
模式 |
作用 |
适用场景 |
Enforcing |
强制执行安全策略,阻止所有违反策略的操作,并记录日志。 |
生产环境,需严格安全控制时。 |
Permissive |
仅记录违反策略的操作,不实际阻止。用于审计和调试策略问题。 |
调试阶段,需要观察哪些操作会被SELinux拦截,但不想中断服务时。 |
Disabled |
完全关闭SELinux,不加载任何策略。需重启生效,且重新启用后需重新标记文件系统上下文。 |
临时解决兼容性问题,或确认问题与SELinux无关时(不推荐长期使用)。 |
sudo setenforce 1 # 切换为Enforcing(临时生效,重启后失效) sudo setenforce 0 # 切换为Permissive sudo vi /etc/selinux/config # 永久修改模式(需重启)
2.3.2. SELinux限制解除
- SELinux 限制访问外部网络
SELinux会限制 httpd_t
(Nginx 进程域)的网络访问权限,拦截对外部服务的 TCP 连接,需要手动开启
# 永久允许Nginx网络连接 setsebool -P httpd_can_network_connect 1 # 验证设置 getsebool httpd_can_network_connect
- 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
2.4. 启动 Nginx
systemctl start nginx systemctl enable nginx
2.5. 验证 Nginx 配置
访问 Nginx 服务器的 IP 或域名(例如 http://192.168.33.205:9000
),确认请求被正确转发到 MinIO 集群。
编辑
2.6. 查看 Nginx 日志
tail -f /var/log/nginx/error.log tail -f /var/log/nginx/access.log