博客 / Linux/ Centos7-64bit-编译安装配置Nginx stream四层负载均衡 动态加载

Centos7-64bit-编译安装配置Nginx stream四层负载均衡 动态加载

Centos7-64bit-编译安装配置Nginx stream四层负载均衡 动态加载

前言

本文介绍在 CentOS 7 64 位系统上,通过编译安装的方式为 Nginx 启用并动态加载 Stream 模块,以实现四层(TCP/UDP)负载均衡功能。文中将涵盖从环境准备、编译配置、服务管理到最终配置的全过程。

环境准备与编译安装

首先,建议使用 screentmux 来保持编译会话,防止因网络中断导致任务终止。

yum install screen -y
screen -S nginx_compile

安装编译工具与依赖

安装必要的开发工具和依赖库。请注意,原文中的部分包名可能不准确或已过时,以下命令已修正并补充了必要组件。

sudo yum -y groupinstall "Development Tools"
sudo yum -y install epel-release wget gcc autoconf automake pcre-devel zlib-devel openssl-devel perl perl-devel libxslt libxslt-devel libxml2 libxml2-devel gd gd-devel GeoIP GeoIP-devel

下载源码包

本文示例使用 Nginx 1.13.2 版本,但请注意此版本已停止维护。建议从 Nginx 官网 获取最新的稳定版(Stable version)源码。以下命令仅为演示流程。

wget https://nginx.org/download/nginx-1.13.2.tar.gz
tar zxvf nginx-1.13.2.tar.gz
wget https://ftp.pcre.org/pub/pcre/pcre-8.40.tar.gz
tar xzvf pcre-8.40.tar.gz
wget https://www.zlib.net/zlib-1.2.11.tar.gz
tar xzvf zlib-1.2.11.tar.gz
wget https://www.openssl.org/source/openssl-1.1.0f.tar.gz
tar xzvf openssl-1.1.0f.tar.gz
rm -rf *.tar.gz
cd nginx-1.13.2

配置编译参数

关键配置项是 --with-stream=dynamic,这会将 Stream 模块编译为动态共享对象(.so 文件),以便后续动态加载。以下是一个包含常用模块的配置示例:

./configure --prefix=/etc/nginx 
  --sbin-path=/usr/sbin/nginx 
  --modules-path=/usr/lib64/nginx/modules 
  --conf-path=/etc/nginx/nginx.conf 
  --error-log-path=/var/log/nginx/error.log 
  --pid-path=/var/run/nginx.pid 
  --lock-path=/var/run/nginx.lock 
  --user=nginx 
  --group=nginx 
  --with-threads 
  --with-file-aio 
  --with-http_ssl_module 
  --with-http_v2_module 
  --with-http_realip_module 
  --with-http_sub_module 
  --with-http_gunzip_module 
  --with-http_gzip_static_module 
  --with-http_stub_status_module 
  --with-stream=dynamic 
  --with-stream_ssl_module 
  --with-stream_realip_module 
  --with-pcre=../pcre-8.40 
  --with-pcre-jit 
  --with-zlib=../zlib-1.2.11 
  --with-openssl=../openssl-1.1.0f 
  --with-debug

运行 ./configure 后,请检查输出末尾是否有错误信息。确认无误后,执行编译和安装。

make
sudo make install

创建符号链接与 Nginx 用户

为动态模块目录创建符号链接,方便配置引用。

sudo ln -s /usr/lib64/nginx/modules /etc/nginx/modules

创建 Nginx 运行用户(如果不存在):

sudo useradd --system --home /var/cache/nginx --shell /sbin/nologin --comment "nginx user" --user-group nginx

验证安装与配置系统服务

检查编译参数,确认包含 --with-stream=dynamic

nginx -V 2>&1 | grep stream

创建必要的缓存目录并测试配置文件:

sudo mkdir -p /var/cache/nginx
sudo nginx -t

配置 systemd 服务单元文件。创建或编辑 /usr/lib/systemd/system/nginx.service

[Unit]
Description=nginx - high performance web server
Documentation=https://nginx.org/en/docs/
After=network-online.target remote-fs.target nss-lookup.target
Wants=network-online.target

[Service]
Type=forking
PIDFile=/var/run/nginx.pid
ExecStartPre=/usr/sbin/nginx -t -c /etc/nginx/nginx.conf
ExecStart=/usr/sbin/nginx -c /etc/nginx/nginx.conf
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s TERM $MAINPID

[Install]
WantedBy=multi-user.target

启动 Nginx 并设置开机自启:

sudo systemctl start nginx
sudo systemctl enable nginx

检查服务状态:

sudo systemctl status nginx
curl -I 127.0.0.1

防火墙配置

如果系统防火墙(firewalld)处于活动状态,需要放行 Nginx 使用的端口(例如 80、443)。

sudo firewall-cmd --permanent --zone=public --add-service=http
sudo firewall-cmd --permanent --zone=public --add-service=https
sudo firewall-cmd --reload

常用防火墙管理命令:

sudo systemctl start firewalld      # 启动防火墙
sudo systemctl stop firewalld       # 停止防火墙
sudo systemctl enable firewalld     # 开机自启防火墙
sudo systemctl disable firewalld    # 禁止开机自启防火墙

配置 Nginx Stream 四层负载均衡

Nginx 默认配置文件路径为 /etc/nginx/nginx.conf。动态加载 Stream 模块需要在主配置文件的顶部使用 load_module 指令。

首先,备份原始配置:

sudo cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.backup

编辑 /etc/nginx/nginx.conf,一个基础的四层 TCP 负载均衡配置示例如下:

# 动态加载 Stream 模块
load_module modules/ngx_stream_module.so;

# 工作进程数,通常设置为 CPU 核心数
worker_processes auto;

events {
    worker_connections 1024;
}

# Stream 模块配置块,用于四层代理
stream {
    # 定义上游服务器组,名为 backend
    upstream backend {
        # 使用客户端 IP 进行一致性哈希
        hash $remote_addr consistent;
        # 后端服务器,请替换为实际 IP 和端口
        server 176.58.111.12:80 weight=5 max_fails=3 fail_timeout=30s;
        server 178.79.163.35:80 weight=5 max_fails=3 fail_timeout=30s;
    }

    server {
        # 监听 80 端口(TCP)
        listen 80;
        proxy_connect_timeout 1s;
        proxy_timeout 3s;
        # 代理到上游服务器组
        proxy_pass backend;
    }
}

配置完成后,测试配置文件语法并重载 Nginx:

sudo nginx -t
sudo systemctl reload nginx

管理命令与路径参考

  • 服务管理systemctl start|stop|restart|reload|status nginx
  • 检查端口监听ss -tlnp | grep :80
  • 默认网站根目录/usr/share/nginx/html
  • 主配置文件/etc/nginx/nginx.conf
  • 附加配置目录/etc/nginx/conf.d/(通常用于 HTTP 配置)

总结

通过编译安装并动态加载 Stream 模块,可以在无需重新编译整个 Nginx 的前提下,灵活地启用或禁用四层代理功能。这为构建 TCP/UDP 负载均衡器提供了便利。请注意,生产环境应使用更新的软件版本,并根据实际网络拓扑和安全策略调整配置。

发表评论

您的邮箱不会公开。必填项已用 * 标注。