在 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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/505948.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【docker】exec /entrypoint.sh: no such file or directory

dockerfile生成的image 报错内容: exec /entrypoint.sh: no such file or directory查看文件正常在此路径,但是就是报错没找到。 可能是因为sh文件的换行符使用了win的。

python-42-使用selenium-wire爬取微信公众号下的所有文章列表

文章目录 1 seleniumwire1.1 selenium-wire简介1.2 获取请求和响应信息2 操作2.1 自动获取token和cookie和agent2.3 获取所有清单3 异常解决3.1 请求url失败的问题3.2 访问链接不安全的问题4 参考附录1 seleniumwire Selenium WebDriver本身并不直接提供获取HTTP请求头(header…

Bytebase 3.0.1 - 可配置在 SQL 编辑器执行 DDL/DML

🚀 新功能 新增环境策略,允许在 SQL 编辑器内直接执行 DDL/DML 语句。 支持为 BigQuery 数据脱敏。 在项目下新增数据访问控制及脱敏管理页面。 在数据库页面,支持回滚到变更历史的某个版本。 🔔 兼容性变更 禁止工单创建…

C++类的引入

C中类的前身 1> 面向对象三大特征:封装、继承、多态 2> 封装:将能够实现某一事物的所有万事万物都封装到一起,包括成员属性(成员变量),行为(功能函数)都封装在一起&#xff…

【YOLOv8杂草作物目标检测】

YOLOv8杂草目标检测 算法介绍模型和数据集下载 算法介绍 YOLOv8在禾本科杂草目标检测方面有显著的应用和效果。以下是一些关键信息的总结: 农作物幼苗与杂草检测系统:基于YOLOv8深度学习框架,通过2822张图片训练了一个目标检测模型&#xff…

图像处理 | 图像二值化

在图像处理领域,图像二值化是一个重要的操作,它将彩色或灰度图像转换为只有两种颜色(通常是黑白)的图像。二值化广泛应用于文字识别、图像分割、边缘检测等领域,尤其在处理简洁和高对比度的图像时非常有效。本文将深入…

概率论与数理统计总复习

复习课本:中科大使用的教辅《概率论和数理统计》缪柏其、张伟平版本 目录 0.部分积分公式 1.容斥原理 2.条件概率 3.全概率公式 4.贝叶斯公式 5.独立性 6.伯努利分布(两点分布) 7.二项分布 8.帕斯卡分布(负二项分布&am…

从CentOS到龙蜥:企业级Linux迁移实践记录(系统安装)

引言: 随着CentOS项目宣布停止维护CentOS 8并转向CentOS Stream,许多企业和组织面临着寻找可靠替代方案的挑战。在这个背景下,龙蜥操作系统(OpenAnolis)作为一个稳定、高性能且完全兼容的企业级Linux发行版&#xff0…

计算机网络期末复习(知识点)

概念题 在实际复习之前,可以看一下这个视频将网络知识串一下,以便更好地复习:【你管这破玩意叫网络?】 网络规模的分类 PAN(个人区域网络):用于个人设备间的连接,如手机与蓝牙耳机…

IDEA Maven构建时报错:无效的目标发行版17

报错分析 报错原因:Maven 构建时,Java 版本配置不匹配 我安装的JDK版本是1.8,但由于种种原因,Maven构建时指定了 Java 17 作为目标发行版,从而导致错误 解决方案 首先,java -version,查看环…

国产编辑器EverEdit - 扩展脚本:关闭所有未修改文档

1 扩展脚本:关闭所有未修改文档 1.1 应用场景 当用户打开过多文档时,部分文档已经修改,而大部分没有修改,为了减少在众多已打开文档中来回跳转的不便,可以将没有修改的文档全部关闭,但目前提供的快速关闭窗…

Knowledge Editing through Chain-of-Thought

题目 通过思路链进行知识编辑 论文地址:https://arxiv.org/abs/2412.17727 摘要 大型语言模型 (LLM) 在广泛的自然语言处理 (NLP) 任务中表现出卓越的能力。然而,由于频繁重新训练的成本很高,让这些模型与不断发展的世界知识保持同步仍然是一…

运行.Net 7 Zr.Admin项目(后端)

1.下载Zr.Admin代码压缩包 https://codeload.github.com/izhaorui/Zr.Admin.NET/zip/refs/heads/main 2.打开项目 我这里装的是VS2022社区版 进入根目录,双击ZRAdmin.sln打开项目 3.安装.net7运行时 我当时下载的代码版本是.net7的 点击安装 点击安装&#xff0…

spark——RDD算子集合

目录 算子转换算子示例mapflatMapReduceByKeyfilterdistinctglomgroupBygroupByKeySortBysortByKeyunion交集intersection和差集subtractjoinpartitionBymapPartitionsample 行动算子示例ForeachPartitionForeachSaveAsTextFileCountByKeyReducefoldfirst、take、counttop、tak…

Taro+react 开发第一节创建 带有redux状态管理的项目

Taro 项目基于 node,请确保已具备较新的 node 环境(>16.20.0),推荐使用 node 版本管理工具 nvm 来管理 node,这样不仅可以很方便地切换 node 版本,而且全局安装时候也不用加 sudo 了。 1.安装 npm inf…

Qt C++读写NFC标签NDEF网址URI

本示例使用的发卡器&#xff1a;https://item.taobao.com/item.htm?spma21dvs.23580594.0.0.1d292c1biFgjSs&ftt&id615391857885 #include "mainwindow.h" #include "ui_mainwindow.h" #include <QDebug> #include "QLibrary" …

Js的回调函数

一、什么是回调函数&#xff08;Callback&#xff09;&#xff1f; 回调函数&#xff08;Callback Function&#xff09;是指一个函数被作为参数传递给另一个函数&#xff0c;并在特定事件发生或操作完成时执行。 可以通俗地理解为一种“委托”机制。 在JavaScript中&#xff0…

OSPF - 1类LSA(Router-LSA)

前篇博客有对常用LSA的总结 1类LSA是OSPF计算最原始的材料&#xff0c;他会泛洪发给所有的路由器 LSA是包含在LSU中的&#xff0c;一条LSU能够携带多条LSA options位所有LSA都会有&#xff0c;用于标记起源于什么类型的区域&#xff0c;具体查看文章【邻居建立】 flags位是一…

python学opencv|读取图像(三十一)缩放图像的三种方法

【1】引言 前序学习进程中&#xff0c;我们至少掌握了两种方法&#xff0c;可以实现对图像实现缩放。 第一种方法是调用cv2.resize()函数实现&#xff0c;相关学习链接为&#xff1a; python学opencv|读取图像&#xff08;三&#xff09;放大和缩小图像_python opencv 读取图…

实训云上搭建集群

文章目录 1. 登录实训云1.1 实训云网址1.2 登录实训云 2. 创建网络2.1 网络概述2.2 创建步骤 3. 创建路由器3.1 路由器名称3.1 创建路由器3.3 查看网络拓扑 4. 连接子网5. 创建虚拟网卡5.1 创建原因5.2 查看端口5.3 创建虚拟网卡 6. 管理安全组规则6.1 为什么要管理安全组规则6…