Ubuntu环境 nginx 源码 编译安装

ubuntu 终端 使用 wget 下载源码

sudo wget http://nginx.org/download/nginx-1.24.0.tar.gz

 解压刚下载的源码压缩包  nginx-1.24.0.tar.gz

sudo tar -zxvf nginx-1.24.0.tar.gz

解压完成 产生 nginx-1.24.0 目录

进入该目录

cd ./nginx-1.24.0

目录下有一个可执行文件 configure

关于这个 configure 

configure命令做了大量的幕后工作,包括检测操作系统内核和已经安装的软件,参数的解析,

中间目录的生成以及根据各种参数生成一些C源码文件、Makefile文件等

可以参考官方介绍:

nginx documentationhttps://nginx.org/en/docs/https://nginx.org/en/docs/https://nginx.org/en/docs/

进入 nginx 官网

点击  Installing nginx

选择  

  • Building nginx from Sources

或者 直接点击

  • Building nginx from Sources

    执行:

    ./configure --help

    根据需求选择配置编译选项

    这里我的 配置编译选项如下:

     sudo ./configure \--sbin-path=/home/wsd/test/nginx/Nginx \--conf-path=/home/wsd/test/nginx/conf/nginx.conf \--error-log-path=/home/wsd/test/nginx/LOG/error.log \--http-log-path=/home/wsd/test/nginx/LOG/access.log \--with-pcre \--with-http_ssl_module \--with-http_v2_module \--with-http_gzip_static_module \--with-stream \--with-stream_ssl_module

    说明:

    --sbin-path: 指定Nginx可执行文件的安装路径。
    --conf-path: 指定Nginx配置文件的位置。
    --error-log-path & --http-log-path: 指定日志文件的位置。
    --with-pcre: 启用PCRE支持(正则表达式)。
    --with-http_ssl_module: 启用SSL模块。
    --with-http_v2_module: 启用HTTP/2支持。
    --with-http_gzip_static_module: 启用Gzip静态压缩模块。
    --with-stream & --with-stream_ssl_module: 启用TCP/UDP流支持及其SSL模块。
     

       

    现在 执行 上面的  configure  命令还有问题 

    还缺少一些东西

    PCRE PCRE Perl Compatible Regular Expressions Perl 兼容正则表达式)

    如果我们在配置文件nginx.conf里使用了正则表达式,那么在编译Nginx时就必须把PCRE

    库编译进Nginx,因为Nginx的HTTP模块要靠它来解析正则表达式。当然,如果你确认不会使

    用正则表达式,就不必安装它。

    `libpcre3` 和 `libpcre3-dev` 是与 Perhentional Compiling Regular Expressions (PCRE) 库相关的两个软件包,它们的作用如下:

    1. **libpcre3**:
       - 这是 PCRE 库的运行时版本,提供了用 C 语言实现的正则表达式匹配功能。许多程序和库依赖于这个库来处理正则表达式。安装这个库后,任何依赖它的程序都可以使用其提供的 API。

    2. **libpcre3-dev**:
       - 这是 `libpcre3` 的开发包,包含了编译和链接 PCRE 库所需的头文件和其他开发工具。开发者在编写需要使用正则表达式的应用程序时,通常需要安装这个包,以便包含相关的头文件并链接到库。

    简单来说,你需要 `libpcre3` 来运行依赖该库的程序,而在开发新软件时则需要 `libpcre3-dev` 来编译和链接使用到 PCRE 功能的代码。

    更新系统包列表

    sudo apt update

     此命令用于更新可用软件包的索引信息。它会从软件源(repositories)下载最新的软件包列表,确保你的系统知道有哪些软件包可以安装或更新。执行该命令后,系统会显示可用的软件包更新信息,但并不会实际进行更新。

    安装 `libpcre3` 和 `libpcre3-dev`

    sudo apt install -y libpcre3 libpcre3-dev

    好像 nginx-1.24.0 使用的是 PCRE2

    所以:

    sudo apt install libpcre2-dev

    zlib
    zlib 库用于对 HTTP 包的内容做 gzip 格式的压缩,如果我们在 nginx.conf 里配置了 gzip on 并指定对于某些类型( content-type )的 HTTP 响应使用 gzip 来进行压缩以减少网络传输量,那
    么,在编译时就必须把 zlib 编译进 Nginx

    zlib1g 和 zlib1g-dev 是在基于 Debian 的 Linux 发行版(如 Ubuntu)中使用的两个软件包,分别提供了 zlib 库的运行时和开发时支持。

    1. zlib1g

      • 这是 zlib 库的运行时版本,涵盖了用于数据压缩和解压缩的核心功能。
      • 安装这个包后,系统上的应用程序就可以使用 zlib 的功能进行数据压缩。
      • 例如,许多应用程序和库(如 Nginx 或 Apache)在运行时都依赖于 zlib 来处理 gzip 压缩数据。
    2. zlib1g-dev

      • 这个包包含了 zlib 库的开发文件,包括头文件和用于编译的静态库或共享库。
      • 安装这个包后,开发者可以在自己的程序中包含 zlib 的头文件,并将其链接到 zlib 库。
      • 这对于编写应用程序或编译依赖 zlib 的软件包是必需的。

    安装 zlib

    sudo apt install -y zlib1g zlib1g-dev

    OpenSSL 开发库:
    如果我们的服务器不只是要支持 HTTP ,还需要在更安全的 SSL 协议上传输 HTTP ,那么
    就需要拥有 OpenSSL 了。另外,如果我们想使用 MD5 SHA1 等散列函数,那么也需要安装

    `openssl` 和 `libssl-dev` 是 OpenSSL 项目中的两个不同组件,它们的作用有所不同,具体区别如下:

    1. openssl

    - 类型:工具包
    - 用途:`openssl` 是一个命令行工具,用于执行各种与加密相关的操作,如生成密钥、创建证书请求、管理证书、加密和解密数据、计算哈希等。可以通过命令行直接使用 OpenSSL 的功能。
    - 安装后的位置:通常会在 `/usr/bin/openssl` 路径下。

    2. libssl-dev

    - 类型:开发库
    - 用途:`libssl-dev` 是 OpenSSL 的开发包,包含了开发使用 OpenSSL 库所需的头文件和其它开发文件。开发者在编写 C/C++ 应用程序时,需要使用这些库来调用 OpenSSL 提供的加密和安全功能。
    - 内容:包括了 OpenSSL 的头文件(例如 `openssl/ssl.h` 和 `openssl/evp.h`)以及编译时所需的静态链接库和动态链接库。
    - 安装后的位置:头文件通常位于 `/usr/include/openssl`,库文件通常位于 `/usr/lib/x86_64-linux-gnu`(取决于你的系统架构)。

    综上所述:
    - `openssl`:用于用户直接操作的命令行工具。
    - `libssl-dev`:用于开发者编写程序时链接的库和头文件。

    如果你只是想使用 OpenSSL 的命令行功能,安装 `openssl` 就可以了;如果你想在 C/C++ 程序中使用 OpenSSL 的加密功能,那么必须安装 `libssl-dev`。

    安装 openssl 

    sudo apt install -y openssl

    安装 libssl-dev

    sudo apt install -y libssl-dev

    build-essential :

    build-essential 是一个软件包,包含了一组用于编译和构建软件的基本工具和库。这个包通常用于 Debian 和基于 Debian 的发行版(如 Ubuntu)。

    build-essential 包中通常包括以下内容:

    1. 编译器:如 gcc(GNU Compiler Collection)和 g++(GNU C++ Compiler)。
    2. 构建工具:如 make,用于自动化构建过程。
    3. 库和头文件:基本的开发库和头文件,提供编译时所需的支持。

    安装 build-essential 包后,系统就具备了编译其他软件包的基本环境,特别是在从源代码构建软件时尤为重要。

    安装 build-essential

    sudo apt install -y build-essential 

    再次执行:

     sudo ./configure \--sbin-path=/home/wsd/test/nginx/Nginx \--conf-path=/home/wsd/test/nginx/conf/nginx.conf \--error-log-path=/home/wsd/test/nginx/LOG/error.log \--http-log-path=/home/wsd/test/nginx/LOG/access.log \--with-pcre \--with-http_ssl_module \--with-http_v2_module \--with-http_gzip_static_module \--with-stream \--with-stream_ssl_module

    编译:

    sudo make
    make 命令根据 configure 命令生成的 Makefile 文件编译 Nginx 工程,并生成目标文件、最终
    的二进制文件。

    在编译完成后,最终的 Nginx 可执行文件(通常命名为 nginx)会被放置在 objs 目录中

    安装 编译后的 nginx:

    sudo make install
    make install 命令根据 configure 执行时的参数将 Nginx 部署到指定的安装目录,包括相关目
    录的建立和二进制文件、配置文件的复制。

     在 安装目录下执行

    ./nginx -v

    nginx 官网

    nginx

     点击 右侧 

    • documentation

    选择 

    • Beginner’s Guide

    根据 指南 开始使用 nginx

     执行 nginx

     sudo ./nginx

    打开浏览器访问

    http://localhost:80

    退出:

    sudo ./nginx -s quit
     

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

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

    相关文章

    linux如何修改密码,要在CentOS 7系统中修改密码

    要在CentOS 7系统中修改密码,你可以按照以下步骤操作: 步骤 1: 登录到系统 在登录提示符 localhost login: 后输入你的用户名。输入密码并按回车键。 步骤 2: 修改密码 登录后,使用 passwd 命令来修改密码: passwd 系统会提…

    C# volatile 使用详解

    总目录 前言 在多线程编程中,确保线程之间的正确同步和可见性是一个关键挑战。C# 提供了多种机制来处理这些挑战,其中之一就是 volatile 关键字。它用于指示编译器和运行时环境不要对特定变量进行某些优化,以保证该变量的读写操作是线程安全…

    [Unity 热更方案] 使用Addressable进行打包管理, 使用AssetBundle进行包的加载管理.70%跟练

    在正常的开发过程中我们经常遇到一些关于热更的方案,有一些已有的方案供我们选择,但是实机情况往往不尽如人意,各有优缺点. 现在我们同样有一个热更的需求,但是要求打包简单,加载过程可查,防止出现一些资源和流程的问题. 下面介绍我在项目中使用的方案. 打包方面使用Addressabl…

    Flink运行时架构

    一、系统架构 1)作业管理器(JobManager) JobManager是一个Flink集群中任务管理和调度的核心,是控制应用执行的主进程。也就是说,每个应用都应该被唯一的JobManager所控制执行。 JobManger又包含3个不同的组件。 &am…

    在 Windows 11 中为 SMB 3.x 文件共享协议提供 RDMA 支持

    注:机翻,未校。 Enable SMB Direct in Windows 11 在 Windows 11 中启用 SMB Direct Provides RDMA support for the SMB 3.x file sharing protocol 为 SMB 3.x 文件共享协议提供 RDMA 支持 Vigneshwaran Vijayakumar November 3, 2024 Last Updat…

    用AI生成PPT,办公效率提升新方式

    用AI生成PPT,办公效率提升新方式!在快节奏的时代,如何优雅应对高效办公的挑战? 或许你也有这样的经历:开会前临时被要求制作PPT,一阵头大,却只能硬着头皮上。科技的发展为我们带来了更智能的解…

    单片机-STM32 IIC通信(OLED屏幕)(十一)

    一、屏幕的分类 1、LED屏幕: 由无数个发光的LED灯珠按照一定的顺序排列而成,当需要显示内容的时候,点亮相关的LED灯即可,市场占有率很高,主要是用于户外,广告屏幕,成本低。 LED屏是一种用发光…

    ASP.NET Core 6.0 如何处理丢失的 Startup.cs 文件

    介绍 .NET 6.0 已经发布,ASP.NET Core 6.0 也已发布。其中有不少变化让很多人感到困惑。例如,“谁动了我的奶酪”,它在哪里Startup.cs?在这篇文章中,我将深入研究这个问题,看看它移动到了哪里以及其他变化。…

    【嵌入式开发】stm32 st-link 烧录

    使用 ST-Link 烧录 STM32 的程序可以通过多种工具实现,例如 STM32CubeProgrammer、Keil、IAR、以及 OpenOCD。以下是通用的步骤说明: 准备工作 硬件准备 确保 ST-Link 调试器与 STM32 芯片引脚正确连接: SWDIO (SWD 数据线) 接至 STM32 的 SW…

    仿 RabbitMQ 的消息队列3(实战项目)

    七. 消息存储设计 上一篇博客已经将消息统计文件的读写代码实现了,下一步我们将实现创建队列文件和目录。 实现创建队列文件和目录 初始化 0\t0 这样的初始值. //创建队列对应的文件和目录:public void createQueueFile(String queueName) throws IO…

    【STM32HAL-----GPIO】

    1. 什么是GPIO?(了解) 2. STM32 GPIO简介 2.1. GPIO特点 2.2. GPIO电气特性 2.3. GPIO引脚分布图 IO引脚分布特点:按组存在、组数视芯片而定、每组最多16个IO引脚。 3. IO端口基本结构介绍 4. GPIO八种工作模式 4.1. 输入浮空 特…

    Midjourney基础-常用修饰词+权重的用法大全

    用好修饰词很关键 Midjourney要用除了掌握好提示词的写法,按照上一篇《做Midjourney最好图文教程-提示词公式以及高级参数讲解》画面主体 场景氛围 主体行为 构图方式 艺术风格 图像质量。 要画出有质感的内容我们必须要掌握好“修饰词”,这些修饰…

    二叉树和堆

    树概念及结构(了解) 树的概念(看看就行) 树是一种 非线性 的数据结构,它是由 n ( n>0 )个有限结点组成一个具有层次关系的集合。 把它叫做树是因 为它看起来像一棵倒挂的树,也就是…

    C语言 指针_野指针 指针运算

    野指针: 概念:野指针就是指针指向的位置是不可知的(随机的、不正确的、没有明确限制的) 指针非法访问: int main() {int* p;//p没有初始化,就意味着没有明确的指向//一个局部变量不初始化,放…

    腾讯 Hunyuan3D-2: 高分辨率3D 资产生成

    腾讯 Hunyuan3D-2:高分辨率 3D 资产生成的突破 前言 在当今数字化时代,3D 资产生成技术正变得越来越重要。无论是游戏开发、影视制作还是虚拟现实领域,高质量的 3D 模型和纹理都是创造沉浸式体验的关键。然而,传统的 3D 资产制作…

    Java如何实现反转义

    Java如何实现反转义 前提 最近做的一个需求,是热搜词增加换一批的功能。功能做完自测后,交给了测试伙伴,但是测试第二天后就提了一个bug,出现了未知词 levis。第一眼看着像公司售卖的一个品牌-李维斯。然后再扒前人写的代码&…

    Java 高级工程师面试高频题:JVM+Redis+ 并发 + 算法 + 框架

    前言 在过 2 个月即将进入 3 月了,然而面对今年的大环境而言,跳槽成功的难度比往年高了很多,很明显的感受就是:对于今年的 java 开发朋友跳槽面试,无论一面还是二面,都开始考验一个 Java 程序员的技术功底…

    后端:MyBatis

    文章目录 1. MyBatis1-1. Mybatis 工具类的封装1-2. Mybatis 通过集合或实体类传递参数-实现插入数据(增)1-3. MyBatis 实现删除数据(删)1-4. MyBatis 实现修改数据(改)1-5. MyBatis 实现查询数据(查) 2. MyBatis 配置文件中的一些标签和属性2-1.environments标签2-2. dataSour…

    安卓14自由窗口圆角处理之绘制圆角轮廓线

    背景: 前面文章已经分享过: 如何一行代码搞定自由窗口的圆角处理?-wms/自由窗口/sf实战开发 但是又有学员朋友提出另一个blog的成果: 安卓aosp14上自由窗口划线边框Freeform Caption实战开发-千里马framework实战 想要把划线和…

    【Unity3D】3D物体摆放、场景优化案例Demo

    目录 PlaceManager.cs(放置管理类) Ground.cs(地板类) 和 GroundData.cs(地板数据类) 额外知识点说明 1、MeshFilter和MeshRenderer的Bounds区别 2、Gizmos 绘制一个平行于斜面的立方体 通过网盘分享的文件:PlaceGameDemo2.unitypackage 链接: https://pan.baid…