Bootstrap

在 Ubuntu 上对 Nginx 进行源码编译的详细指南

要在 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: 包含编译工具如 gccmake
  • 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

连接应会被分配到后端的某一台服务器。你可以多次连接以确认负载均衡策略(如轮询)是否按预期工作。

;