要在 Ubuntu 上对 Nginx 进行源码编译并包含 TCP 负载均衡模块(即 Stream 模块),请按照以下步骤操作:
1. 安装编译所需的依赖
首先,确保系统的软件包列表是最新的,并安装编译 Nginx 所需的基本工具和库:
sudo apt update
sudo apt install -y build-essential libpcre3 libpcre3-dev zlib1g zlib1g-dev libssl-dev wget
- build-essential: 包含编译工具如
gcc
和make
。 - libpcre3 & libpcre3-dev: 正则表达式库,Nginx 用于处理配置中的正则表达式。
- zlib1g & zlib1g-dev: 压缩库,支持 Gzip 压缩。
- libssl-dev: OpenSSL 库,支持 HTTPS 和其他加密功能。
- wget: 下载工具,用于获取 Nginx 源码。
2. 下载 Nginx 源码
访问 Nginx 官方下载页面 获取最新的稳定版本。以下示例假设下载的是版本 1.24.0
,请根据实际情况替换版本号:
cd /usr/local/src
sudo wget http://nginx.org/download/nginx-1.24.0.tar.gz
sudo tar -zxvf nginx-1.24.0.tar.gz
cd nginx-1.24.0
3. 配置编译选项
在编译 Nginx 时,需要启用 stream
模块以支持 TCP 负载均衡。使用 ./configure
脚本并添加相应的选项:
sudo ./configure \
--sbin-path=/usr/local/nginx/nginx \
--conf-path=/usr/local/nginx/nginx.conf \
--error-log-path=/var/log/nginx/error.log \
--http-log-path=/var/log/nginx/access.log \
--with-stream \
--with-stream_ssl_module \
--with-http_ssl_module \
--with-pcre \
--with-zlib=/usr/local/src/nginx-1.24.0
选项说明:
--sbin-path
:指定 Nginx 可执行文件的安装路径。--conf-path
:指定主配置文件的路径。--error-log-path
和--http-log-path
:指定错误日志和访问日志的路径。--with-stream
:启用 Stream 模块,支持 TCP/UDP 流量的处理。--with-stream_ssl_module
:启用 Stream 模块的 SSL 支持。--with-http_ssl_module
:启用 HTTP 模块的 SSL 支持。--with-pcre
:启用 PCRE 库支持,用于正则表达式。--with-zlib
:指定 zlib 库的路径,支持 Gzip 压缩。
注意: 如果需要添加额外的第三方模块,可以使用 --add-module=/path/to/module
选项。
4. 编译并安装 Nginx
完成配置后,运行以下命令进行编译和安装:
sudo make
sudo make install
说明:
make
:编译源码。make install
:将编译好的二进制文件和相关文件安装到指定路径。
5. 配置 Nginx 使用 TCP 负载均衡
安装完成后,需要编辑 Nginx 的配置文件以设置 TCP 负载均衡。默认配置文件路径为 /usr/local/nginx/nginx.conf
。
使用文本编辑器打开配置文件:
sudo nano /usr/local/nginx/nginx.conf
在文件末尾添加 stream
块,例如:
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
# 其他 HTTP 配置
}
stream {
upstream backend_tcp {
server 192.168.1.100:12345;
server 192.168.1.101:12345;
}
server {
listen 3306; # 监听的端口,如 MySQL 默认端口
proxy_pass backend_tcp;
}
}
配置说明:
stream
块用于定义 TCP/UDP 流量的处理。upstream
定义了后端服务器的地址和端口,Nginx 将在这些服务器之间进行负载均衡。server
块中listen
指定了 Nginx 监听的端口,proxy_pass
指定了要转发到的 upstream。
保存并关闭文件(在 nano 中按 Ctrl + O
保存,Ctrl + X
退出)。
6. 启动 Nginx
使用以下命令启动 Nginx:
sudo /usr/local/nginx/nginx
验证 Nginx 是否启动成功:
sudo /usr/local/nginx/nginx -t
如果配置正确,将看到类似如下输出:
nginx: the configuration file /usr/local/nginx/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/nginx.conf test is successful
查看 Nginx 进程是否在运行:
ps aux | grep nginx
7. 设置 Nginx 开机自启(可选)
为了让 Nginx 在系统启动时自动运行,可以创建一个 systemd 服务文件。
创建并编辑服务文件:
sudo nano /etc/systemd/system/nginx.service
添加以下内容:
[Unit]
Description=The NGINX HTTP and reverse proxy server
After=network.target
[Service]
Type=forking
ExecStart=/usr/local/nginx/nginx
ExecReload=/usr/local/nginx/nginx -s reload
ExecStop=/usr/local/nginx/nginx -s quit
PIDFile=/usr/local/nginx/nginx.pid
PrivateTmp=true
[Install]
WantedBy=multi-user.target
保存并关闭文件后,执行以下命令以启用并启动 Nginx 服务:
sudo systemctl daemon-reload
sudo systemctl enable nginx
sudo systemctl start nginx
验证服务状态:
sudo systemctl status nginx
8. 验证 TCP 负载均衡
确保后端服务器在指定的端口(如 12345
)上运行,并且防火墙允许相应的流量。可以使用 telnet
或其他工具测试负载均衡是否正常工作。
示例测试:
telnet your_nginx_server_ip 3306
连接应会被分配到后端的某一台服务器。你可以多次连接以确认负载均衡策略(如轮询)是否按预期工作。