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

要在 Ubuntu 上对 Nginx 进行源码编译并包含 TCP 负载均衡模块(即 Stream 模块),请按照以下步骤操作:

1. 安装编译所需的依赖

首先,确保系统的软件包列表是最新的,并安装编译 Nginx 所需的基本工具和库:

bash 复制代码
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,请根据实际情况替换版本号:

bash 复制代码
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 脚本并添加相应的选项:

bash 复制代码
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

完成配置后,运行以下命令进行编译和安装:

bash 复制代码
sudo make
sudo make install

说明:

  • make:编译源码。
  • make install:将编译好的二进制文件和相关文件安装到指定路径。

5. 配置 Nginx 使用 TCP 负载均衡

安装完成后,需要编辑 Nginx 的配置文件以设置 TCP 负载均衡。默认配置文件路径为 /usr/local/nginx/nginx.conf

使用文本编辑器打开配置文件:

bash 复制代码
sudo nano /usr/local/nginx/nginx.conf

在文件末尾添加 stream 块,例如:

nginx 复制代码
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:

bash 复制代码
sudo /usr/local/nginx/nginx

验证 Nginx 是否启动成功:

bash 复制代码
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 进程是否在运行:

bash 复制代码
ps aux | grep nginx

7. 设置 Nginx 开机自启(可选)

为了让 Nginx 在系统启动时自动运行,可以创建一个 systemd 服务文件。

创建并编辑服务文件:

bash 复制代码
sudo nano /etc/systemd/system/nginx.service

添加以下内容:

ini 复制代码
[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 服务:

bash 复制代码
sudo systemctl daemon-reload
sudo systemctl enable nginx
sudo systemctl start nginx

验证服务状态:

bash 复制代码
sudo systemctl status nginx

8. 验证 TCP 负载均衡

确保后端服务器在指定的端口(如 12345)上运行,并且防火墙允许相应的流量。可以使用 telnet 或其他工具测试负载均衡是否正常工作。

示例测试:

bash 复制代码
telnet your_nginx_server_ip 3306

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

相关推荐
郝亚军4 分钟前
Ubuntu启一个http server,通过terminal测试通不通
linux·运维·ubuntu
草莓熊Lotso2 小时前
Linux 基础 IO 初步解析:从 C 库函数到系统调用,理解文件操作本质
linux·运维·服务器·c语言·数据库·c++·人工智能
Cx330❀2 小时前
从零实现Shell命令行解释器:原理与实战(附源码)
大数据·linux·数据库·人工智能·科技·elasticsearch·搜索引擎
岁岁种桃花儿9 小时前
MySQL从入门到精通系列:InnoDB记录存储结构
数据库·mysql
郝亚军10 小时前
如何在Ubuntu和win10/11之间通过samba访问对方的文件
linux·服务器·ubuntu
jiunian_cn10 小时前
【Redis】hash数据类型相关指令
数据库·redis·哈希算法
曦云沐10 小时前
【避坑指南】Ubuntu更新报错“Repository is not signed”的快速修复
linux·ubuntu·docker
冉冰学姐10 小时前
SSM在线影评网站平台82ap4(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面
数据库·ssm框架·在线影评平台·影片分类
知识分享小能手11 小时前
SQL Server 2019入门学习教程,从入门到精通,SQL Server 2019数据库的操作(2)
数据库·学习·sqlserver
踩坑小念12 小时前
秒杀场景下如何处理redis扣除状态不一致问题
数据库·redis·分布式·缓存·秒杀