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

ops/2025/1/12 4:04:58/

要在 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 块,例如:

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:

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

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


http://www.ppmy.cn/ops/149343.html

相关文章

怎么对PDF插入图片并设置可见程度-免费PDF编辑工具分享

一、PDF文件插入图片操作的需求背景 在我们日常对PDF文件的各种处理中,我们有时需要对手中的PDF插入一些图片,以期达到更好的页面视觉效果,包括增强视觉效果、丰富信息呈现、个性化定制、提高专业度、简化阅读流程、符合法规要求以及适应不同…

朝天椒USB服务器在三枪集团财务中心的应用

三枪集团作为一家大型企业集团,其财务中心日常需处理大量的网银操作和资金流转,网银U盾的管理成为一项重要而复杂的任务。传统U盾管理方式存在诸多不便,如U盾分散、管理混乱、使用效率低下以及安全隐患等。为了解决这些问题,三枪集…

大疆上云API连接遥控器和无人机

文章目录 1、部署大疆上云API关于如何连接我们自己部署的上云API2、开启无人机和遥控器并连接自己部署的上云API如果遥控器和无人机没有对频的情况下即只有遥控器没有无人机的情况下如果遥控器和无人机已经对频好了的情况下 4、订阅无人机或遥控器的主题信息4.1、订阅无人机实时…

Kali系统(Debian 10.3) 遇到的问题

目录 问题一:非问题 kali 基础官网与安装 问题二: 问题三: Kali系统 MySQL问题Cant connect to local MySQL server through socket /run/mysqld/mysqld.sock (2) 问题四:重新安装MySQL 也就是MariaDB(MariaDB 含 MySQL相关…

集成Log4j2以及异步日志

文章目录 1.环境搭建1.在sunrays-common下创建一个单独的模块2.依赖关系1.继承父模块的版本和通用依赖 3.创建自动配置相关1.目录2.pom.xml3.Log4j2AutoConfiguration.java 自动配置类4.META-INF/spring.factories 指定自动配置类 2.集成Log4j2以及异步日志1.目录2.引入依赖3.l…

(五)ROS通信编程——参数服务器

前言 参数服务器在ROS中主要用于实现不同节点之间的数据共享(P2P)。参数服务器相当于是独立于所有节点的一个公共容器,可以将数据存储在该容器中,被不同的节点调用,当然不同的节点也可以往其中存储数据,关…

【JVM】总结篇之GC日志分析 和 案例

文章目录 GC日志参数GC日志格式GC日志分类MinorGCFullGC 文件概念 OOMOOM案例1:堆溢出OOM案例2:元空间溢出OOM案例3:GC overhead limit exceededOOM案例4:线程溢出 GC日志参数 GC日志格式 GC日志分类 MinorGC MinorGC(或young …

探索微软 M365 安全:全方位守护数字世界

在当今这个科技呈井喷式飞速发展,数字化浪潮以汹涌澎湃、锐不可当之势席卷全球的时代,企业与个人仿若置身于一片浩瀚无垠、信息奔涌的海洋之中,尽情畅享着技术革新所带来的无穷无尽便利。然而,恰如平静海面下潜藏着暗礁与汹涌暗流,网络安全问题恰似隐匿在暗处、随时可能给…