NGINX反向代理NFS
NGINX反向代理NFS

NGINX反向代理NFS

前言

Nginx是一个轻量级、高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。其特点是占有内存少,并发能力强,因它的稳定性、丰富的功能集、简单的配置文件和低系统资源的消耗而闻名。

nginx 常用于七层代理,四层代理一般使用 lvs 或者haproxy,但 nginx 从1.9.0 版本开始支持四层代理,做四层代理时,源码编译需要添加--with-stream模块,或通过yum安装nginx1.21或更高的版本,默认是支持stream功能的。

NFS共享由于安全和网络等多种因素,无法直接提供对外访问,需通过代理服务器进行端口转发,以实现对外访问。

一、环境架构


代理服务器有2个网卡,一个网卡与NFS存储直连,另外一个网卡与NFS客户端相连接,代理服务器中部署nginx,通过nginx将nfs存储进行反向代理,对nfs客户端提供nfs访问接口。

二、环境信息

服务器 主机名 IP地址 部署软件 备注
NFS存储 nfs-server 192.168.0.102 nfs-utils
代理服务器 nginx 192.168.0.254,192.168.1.254 nginx
NFS客户端 nfs-client 192.168.1.101 nfs-utils

三、NFS存储配置

所有操作在NFS存储节点进行

1.安装nfs

yum install nfs-utils -y

2.配置nfs共享

mkdir /data
cat <<EOF> /etc/exports
/data *(rw,insecure)
EOF

参数说明:/data是nfs存放数据目录,可自行定义。 *是允许所有IP访问。

3.防火墙放开nfs端口

firewall-cmd --zone=public --add-port=111/tcp --permanent
firewall-cmd --zone=public --add-port=111/udp --permanent
firewall-cmd --zone=public --add-port=2049/tcp --permanent
firewall-cmd --zone=public --add-port=2049/udp --permanent
firewall-cmd --zone=public --add-port=20048/tcp --permanent
firewall-cmd --zone=public --add-port=20048/udp --permanent
firewall-cmd --reload

通过配置防火墙规则,放开nfs的111、2049、20048三个端口,允许tcp和udp两种协议进行访问。也可以通过关闭防火墙来实现。

四、代理服务器配置

所有操作在代理服务器进行

代理服务器可以通过两种方法进行NFS端口转发,即通过nginx和firewalld。本环境因为只有1台NFS存储,所以两种方法都可以采用,如果后端有多台NFS存储,是集群模式的,那么建议使用nginx,因为nginx除反向代理外还有负载均衡能力。

nginx反向代理nfs

1.关闭防火墙和selinux

systemctl stop firewalld
systemctl disable firewalld
setenforce 0
sed -i "s/SELINUX=enforcing/SELINUX=disabled/" /etc/selinux/config

2.配置nginx的yum源

cat <<EOF> /etc/yum.repos.d/nginx.repo 
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/\$releasever/\$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
EOF

必须配置nginx的yum源,以保证是nginx 1.21以上的最新版本,否则低版本nginx不支持stream功能,不能实现四层的端口转发功能。

3.安装nginx

 yum install nginx -y

4.修改nginx配置文件

修改nginx主配置文件,加入straem功能,stream功能与http属于平级功能

cat <<EOF>> /etc/nginx/nginx.conf
stream {
    include /etc/nginx/nfs/*.conf;
}
EOF

生成NFS端口转发文件

mkdir /etc/nginx/nfs/
cat <<EOF> /etc/nginx/nfs/nfs.conf

upstream nfs {
    server 192.168.0.102:111;
}
upstream rpc {
    server 192.168.0.102:2049;
}
upstream mountd {
    server 192.168.0.102:20048;
}
server {
    listen 111 udp;
    proxy_connect_timeout 5s;
    proxy_timeout 300s;
    proxy_pass nfs;
}
server {
    listen 111;
    proxy_connect_timeout 5s;
    proxy_timeout 300s;    
    proxy_pass nfs;
}
server {
    listen 2049 udp;
    proxy_connect_timeout 5s;
    proxy_timeout 300s;
    proxy_pass rpc;
}
server {
    listen 2049;
    proxy_connect_timeout 5s;
    proxy_timeout 300s;
    proxy_pass rpc;
}
server {
    listen 20048 udp;
    proxy_connect_timeout 5s;
    proxy_timeout 300s;
    proxy_pass mountd;
}
server {
    listen 20048;
    proxy_connect_timeout 5s;
    proxy_timeout 300s;
    proxy_pass mountd;
}
EOF

参数说明:192.168.0.102是NFS存储IP地址,可根据实际情况修改。通过tcp和udp两种协议监听111、2049、20048三个端口,将该3个端口的请求转发到NFS存储端的对应端口,实现NFS反向代理。

5.启动nginx服务

systemctl start nginx
systemctl enable nginx

如果启动失败,可通过查看nginx服务状态,根据信息提示处理配置文件的语法错误。

6.查看转发效果

netstat -anp |grep nginx

查看端口111、2049、20048是否被nginx转发。

firewalld转发NFS端口

如果已通过nginx进行NFS端口转发,可直接忽略此部分,此方法与“nginx反向代理nfs”二选一即可。

启动防火墙

systemctl start firewalld

配置端口转发规则,并将转发的端口放开允许访问

firewall-cmd -add-forward-port=port=111:proto=tcp:toport=222:toaddr=192.168.0.102 --zone=public --permanent
firewall-cmd --add-forward-port=port=111:proto=tcp:toport=111:toaddr=192.168.0.102 --zone=public --permanent
firewall-cmd --add-forward-port=port=111:proto=udp:toport=111:toaddr=192.168.0.102 --zone=public --permanent
firewall-cmd --add-forward-port=port=2049:proto=tcp:toport=2049:toaddr=192.168.0.102 --zone=public --permanent
firewall-cmd --add-forward-port=port=2049:proto=udp:toport=2049:toaddr=192.168.0.102 --zone=public --permanent
firewall-cmd --add-forward-port=port=20048:proto=tcp:toport=20048:toaddr=192.168.0.102 --zone=public --permanent
firewall-cmd --add-forward-port=port=20048:proto=udp:toport=20048:toaddr=192.168.0.102 --zone=public --permanent
firewall-cmd --zone=public --list-ports
firewall-cmd --zone=public --add-port=111 --permanent
firewall-cmd --zone=public --add-port=111/tcp --permanent
firewall-cmd --zone=public --add-port=111/udp --permanent
firewall-cmd --zone=public --add-port=2049/tcp --permanent
firewall-cmd --zone=public --add-port=2049/udp --permanent
firewall-cmd --zone=public --add-port=20048/tcp --permanent
firewall-cmd --zone=public --add-port=20048/udp --permanent
firewall-cmd --reload

参数说明:192.168.0.102是NFS存储IP,根据实际情况进行替换即可。

五、NFS客户端配置

所有操作在NFS客户端节点进行

1.安装nfs

yum install nfs-utils -y

2.通过代理服务器访问nfs共享

查找nfs列表

showmount -e 192.168.1.254

挂载nfs存储

mount -t nfs 192.168.1.254:/data /mnt/

查看挂载状态

df -hT -t nfs4

测试结果

更多咨询
公众号

官网

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注