如何在 Ubuntu 24.04/22.04/20.04 上从源代码构建 NGINX

在 Ubuntu 上从源代码构建 NGINX 提供了一种定制方法来配置您的 Web 服务器,确保最佳性能和与您的特定环境的兼容性。与二进制安装不同,从源代码编译 NGINX 可以灵活地启用或禁用特定模块、集成第三方模块和应用自定义补丁。此过程允许更深入地了解服务器的内部工作原理,并有助于根据您的独特需求进行更安全、更高效的配置。

构建 Nginx 的主要亮点:

  • 自定义配置: 通过仅启用所需的模块来定制 NGINX 以满足您的需求。
  • 增强的性能: 针对您的硬件和工作负载优化 NGINX,从而可能提高响应时间和资源利用率。
  • 高级功能: 访问预编译包中可能没有的尖端功能和模块。
  • 安全: 应用特定补丁并使用安全强化选项进行编译,以实现更安全的部署。
  • 学习机会: 深入了解 NGINX 的架构和配置选项。
  • 控制: 完全控制服务器的设置,包括目录路径和配置文件。
  • 最新: 构建最新版本的 NGINX,在软件包发布之前访问新功能和错误修复。
  • 社区支持: 利用开源社区的丰富知识和资源进行故障排除和增强功能。

考虑到这些优势,对于那些寻求从 Web 服务器获得最大控制和效率的人来说,从源代码构建 NGINX 是一种强大的方法。

让我们深入了解在 Ubuntu 上从源代码构建 NGINX 的详细步骤。

在 Ubuntu 上安装 NGINX 源的初始软件包

在构建 NGINX 之前更新 Ubuntu

要在 Ubuntu 上启动 NGINX 源安装,请先更新和升级您的系统。此步骤可确保您系统的所有软件包都是最新的,从而最大限度地减少潜在的兼容性问题。

在终端中执行以下命令来更新和升级您的系统:

sudo apt update && sudo apt upgrade

安装 NGINX 编译依赖项

系统更新后,下一步是安装 NGINX 编译所需的依赖项。这些软件包(例如编译器和库)对于从源代码构建 NGINX 至关重要。

要安装所需的依赖项,请运行以下命令:

sudo apt install build-essential libpcre3-dev libssl-dev zlib1g-dev libgd-dev

该命令安装了几个关键的包,每个包在 NGINX 编译过程中都发挥着特定的作用:

  • build-essential:包括GCC编译器和相关工具,这些工具对于从源代码编译软件是必不可少的。
  • libpcre3-dev:提供与 Perl 5 兼容的正则表达式支持库,这对于 URL 重写和其他 NGINX 功能至关重要。
  • libssl-dev:提供 SSL/TLS 支持库,确保安全的数据传输,这是现代 Web 服务的一个关键方面。
  • zlib1g-dev:该包对于压缩功能至关重要,有助于提高 NGINX 的性能和速度。
  • libgd-dev:支持图像处理功能,使NGINX能够直接进行图像操作。

在 Ubuntu 上下载 NGINX 源代码

选择 NGINX 版本

安装所需的依赖项后,继续下载 NGINX 源代码。访问 NGINX 网站以选择适合您需求的版本。您可以从主线、稳定或任何特定版本中进行选择。主线版本会定期更新最新功能和改进,而稳定版本则侧重于经过充分测试的生产环境稳定性。

下载源代码

下载所选版本的 NGINX, 使用 wget 命令。此命令可让您直接从互联网下载文件到您的服务器。例如,要下载主线版本 1.23.3 作为示例,请使用以下命令:

wget http://nginx.org/download/nginx-x.x.x.tar.gz

笔记: 将版本号替换为您想要安装的最新版本或首选版本。请务必检查 NGINX 网站以获取最新版本,以利用最新功能和安全更新。请记住,主线版本可能每隔几个月更新一次,因此及时了解最新版本对于维护安全高效的服务器环境至关重要。

提取 NGINX 源代码

解压NGINX Tarball

下载 NGINX 源代码后,下一步是从 tarball 中提取文件。此过程涉及解压 tar.gz 文件以访问 NGINX 源代码。使用 tar 命令并使用适当的标志来提取内容。

以我们的示例版本 NGINX 1.23.3 为例,操作方法如下:

tar -xzvf nginx-1.23.3.tar.gz

该命令分解如下:

  • x:提取文件。
  • z:使用 gzip 解压缩档案。
  • v:详细模式显示提取过程。
  • f:指定档案的文件名。

更改 NGINX 目录

解压文件后,需要切换到 NGINX 源解压后的目录。此步骤对于开始编译过程至关重要。

使用 cd 命令进入解压的 NGINX 目录:

cd nginx-1.23.3

在 Ubuntu 上配置 NGINX 的构建选项

设置配置选项

在准备从源代码构建 NGINX 时,配置构建选项可根据您的特定需求定制安装。利用 ./configure 命令设置路径并启用各种模块。下面是包含常见配置选项和路径的命令:

./configure --prefix=/var/www/html --sbin-path=/usr/sbin/nginx --conf-path=/etc/nginx/nginx.conf --http-log-path=/var/log/nginx/access.log --error-log-path=/var/log/nginx/error.log --with-pcre  --lock-path=/var/lock/nginx.lock --pid-path=/var/run/nginx.pid --with-http_ssl_module --with-http_image_filter_module=dynamic --modules-path=/etc/nginx/modules --with-http_v2_module --with-stream=dynamic --with-http_addition_module --with-http_mp4_module

该命令为 NGINX 文件设置各种路径,并包含增强 NGINX 功能的模块,如 SSL 支持和 HTTP/2 处理。

自定义你的 NGINX 构建

自定义 NGINX 构建时, ./configure 脚本是一个功能强大的工具,允许进行广泛的自定义。下面介绍如何定制 NGINX 安装以满足特定要求:

示例配置

要启用 HTTP/2 支持并集成 PCRE 库(这对于处理 NGINX 中的正则表达式至关重要),请使用以下配置:

./configure --with-http_v2_module --with-pcre

如果需要定义 NGINX 的安装目录,可以使用 --prefix 选项。例如,要在 /usr/local/nginx 目录,命令如下:

./configure --prefix=/usr/local/nginx

为了合并诸如 ngx_cache_purge 之类的附加模块, --add-module 选项开始发挥作用。要包含此模块,配置将如下所示:

./configure --add-module=/path/to/ngx_cache_purge

使用以下方法可以轻松添加 libxslt 或 libssl 等额外库: --with-XXX-module 选项。要包含这些库,相应的命令将是:

./configure --with-libxslt-module
./configure --with-openssl=/path/to/openssl

要激活 SSL 和真实 IP 模块等模块,配置命令如下:

./configure --with-http_ssl_module
./configure --with-http_realip_module

这些配置仅演示了您可以使用的几种方法 ./configure 脚本来定制你的 NGINX 构建。

要获得所有可用选项的完整列表,您可以运行 ./configure --help。此命令提供有关可用于优化 NGINX 安装的所有标志和选项的详细信息。

开始编译 NGINX 的最后过程

编译 NGINX

设置好 NGINX 的配置选项后,使用以下命令启动编译过程 make 命令。此命令根据 ./configure 脚本。编译过程将创建 NGINX 二进制可执行文件,通常位于 objs 目录。

make

安装 NGINX

编译 NGINX 后,使用以下命令继续安装 sudo make install。此命令将 NGINX 二进制文件、配置文件和其他必要文件安装到指定的前缀路径。如果您在配置期间未定义其他位置,则 NGINX 将安装到 /usr/local/nginx/ 默认情况下。

sudo make install

安装完成后,你会发现 NGINX 在 sbin 指定前缀路径内的目录,准备进一步配置和使用。

创建 NGINX SystemD 服务

从源代码成功构建和安装 NGINX 后,下一步是使用 systemd 将 NGINX 作为服务进行管理。这样您就可以像任何其他 Ubuntu 服务一样启动、停止和重新启动 NGINX。

为 NGINX 创建 SystemD 服务文件

要为 NGINX 设置 systemd 服务,首先创建一个新的服务文件:

sudo nano /etc/systemd/system/nginx.service

在此文件中,输入以下详细信息,确保替换 /path/to/nginx 如果它不在以下位置,则替换为 NGINX 二进制文件的实际路径 /usr/sbin/nginx:

[Unit]
Description=The NGINX HTTP and reverse proxy server
After=syslog.target network-online.target remote-fs.target nss-lookup.target
Wants=network-online.target
        
[Service]
Type=forking
PIDFile=/var/run/nginx.pid
ExecStartPre=/usr/sbin/nginx -t
ExecStart=/usr/sbin/nginx
ExecReload=/usr/sbin/nginx -s reload
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true
        
[Install]
WantedBy=multi-user.target

此配置将 NGINX 设置为服务,定义它如何启动、停止和重新加载,并确保它在网络上线后启动。

重新加载 SystemD 以识别新服务

定义服务后,更新 systemd 以识别新的 NGINX 服务:

sudo systemctl daemon-reload

启动并启用 NGINX 服务

在 systemd 服务到位后,启动 NGINX 服务:

sudo systemctl start nginx

为了确保 NGINX 在启动时自动启动,请启用该服务:

sudo systemctl enable nginx

验证 NGINX 安装

测试NGINX功能

安装 NGINX 后,验证其运行情况至关重要。您可以通过 Web 浏览器访问 NGINX 欢迎页面。使用服务器的本地主机地址或 IP 地址导航到 NGINX 测试页面。

打开您的 Web 浏览器并输入以下 URL,以使用 localhost 访问 NGINX 欢迎页面:

http://localhost

使用 IP 地址进行验证

如果访问 localhost 没有显示 NGINX 欢迎页面,你可以使用服务器的 IP 地址代替。 192.128.1.1 替换为您的实际服务器 IP 地址:

http://192.128.1.1

当您访问这些 URL 时,您应该会看到默认的 NGINX 欢迎页面,这表明 NGINX 已在您的 Ubuntu 服务器上安装并正确运行。如果没有出现该页面,请确保 NGINX 正在运行,并且没有防火墙规则阻止对该服务的访问。

构建 NGINX 的其他技巧

使用附加模块编译 NGINX

通过在编译过程中添加额外模块来增强 NGINX 的功能。例如,如果您想添加 NGINX HTTP 推送模块,请使用 --add-module 在配置步骤中启用标志。按照以下命令使用 HTTP 推送模块编译 NGINX:

./configure --add-module=/path/to/nginx-http-push-module
make
sudo make install

代替 /path/to/nginx-http-push-module 使用您想要包含的模块的实际路径。

使用 Systemctl 命令管理 NGINX

在 Ubuntu 上,使用 systemctl 命令管理 NGINX 服务非常简单。以下是使用终端控制 NGINX 服务的方法:

启动NGINX:

sudo systemctl start nginx

停止NGINX:

sudo systemctl stop nginx

重新启动NGINX:

sudo systemctl restart nginx

重新加载NGINX:

sudo systemctl reload nginx

NGINX 状态检查

sudo systemctl status nginx

在系统启动时启用 NGINX

sudo systemctl enable nginx

在系统启动时禁用 NGINX:

sudo systemctl disable nginx

结论

在本指南中,我们介绍了如何在 Ubuntu 24.04、22.04 和 20.04 上从源代码构建 NGINX,从安装软件包到管理服务。此过程允许您使用额外模块自定义 NGINX 并使用 systemctl 控制它。保持 NGINX 更新并正确配置以获得最佳性能和安全性。尝试设置并在 Ubuntu 上享受您的 NGINX 服务器。

Joshua James
跟我来
Joshua James 的最新帖子 (查看全部)

发表评论


zh_CN简体中文