相关推荐recommended
Red Hot rhel9 关于nginx的源码编译下载以及编写systemd单元文件管理nginx服务(更适合新手小白的详细解说步骤)
作者:mmseoamin日期:2024-03-20

目录

前言

为什么使用nginx

为什么要源码编辑安装nginx

目录

前言

为什么使用nginx

为什么要源码编辑安装nginx

源码编辑nginx下载安装

步骤 1:安装依赖

步骤 2:上传nginx.tar.gz文件

这里有两种方法

一.虚拟机直接下载nginx压缩文件

二.win11系统中下载,使用远程连接软件传输到虚拟机(小编所使用的)

1.进入nginx安装官网选择你所想要的版本下载

2.解压文件

3.解压文件后进入nginx页面以及配置编译项

以上源码编译的规则如下所示

以下是与模块相关的选项:

HTTP模块:

其他模块:

邮件模块:

性能选项:

步骤 5:编译和安装

步骤 6:启动 Nginx

编写systemd单元文件管理nginx服务

引子

为什么编写systemd单元文件管理nginx服务

系统初始化与启动:

依赖管理:

日志记录:

资源限制:

重载配置:

监控和通知:

标准化管理:

编写文件管理nginx服务

1.进入/usr/lib/systemd/system或者/etc/systemd/system目录下创建一个nginx.service的文件

2.编辑nginx.service文件

[Unit] 部分

[Service] 部分

[Install] 部分

3.重载配置文件以及启用nginx和检查nginx的启用

总结



前言

为什么使用nginx

使用Nginx的原因主要有以下几点:

  1. 高性能:Nginx以其事件驱动的方式编写,具有非常好的性能。它使用少量的系统资源,能够支持更多的并发连接,从而达到更高的访问效率。
  2. 优秀的代理服务器和负载均衡服务器:Nginx不仅可以作为HTTP服务器使用,还可以作为反向代理服务器以及负载均衡服务器。这使得它能够在复杂的网络环境中,如微服务架构下,作为网关使用,配合其他工具进行限流、熔断等控制。
  3. 高度可扩展性和可靠性:Nginx的设计使其具有可扩展性和可靠性,能够轻松应对高流量的场景。与传统的服务器软件相比,Nginx的架构使得它能够在并发连接数量增加时,依然保持稳定的响应,避免因服务器软件响应不过来或崩溃导致的网站或应用程序故障。
  4. 丰富的功能和灵活的配置:Nginx支持热部署,启动速度快,还可以在不间断服务的情况下对软件版本或配置进行升级。此外,Nginx的安装配置也非常灵活,用户可以根据自己的需求进行定制。
  5. 庞大的第三方模块支持:Nginx的模块设计使其具有高度的可定制性。第三方模块丰富,且性能优秀,这使得开发者能够基于Nginx开发符合自己业务特性的定制模块,满足特定的需求。

综上所述,Nginx因其高性能、优秀的代理和负载均衡功能、高度的可扩展性和可靠性、丰富的功能和灵活的配置,以及庞大的第三方模块支持,成为许多网站和应用的首选服务器软件。无论是个人开发者还是大型企业,都可以从Nginx中获益。

为什么要源码编辑安装nginx

源码编辑安装Nginx有以下几个原因:

  1. 灵活性:源码安装Nginx可以提供更大的灵活性,允许用户根据自己的需求进行定制。源码安装允许用户自定义编译选项,可以选择性地启用或禁用特定的模块和功能,以满足特定的应用场景或性能要求。

  2. 控制版本:源码安装使得用户能够选择并控制安装的Nginx版本。这对于需要特定版本以兼容旧系统或特定应用程序的用户来说尤为重要。此外,源码安装还可以使用户及时获得最新版本的Nginx,从而利用最新的功能和修复的安全漏洞。

  3. 依赖性控制:通过源码安装,用户可以更好地控制Nginx的依赖项和依赖版本。这有助于避免潜在的系统库冲突和版本不兼容问题,确保Nginx的稳定运行。

  4. 性能优化:源码安装允许用户根据硬件和系统环境进行性能优化。用户可以根据自己的硬件架构和性能需求,调整编译选项以优化Nginx的性能,如启用或禁用某些功能、调整线程模型等。

  5. 学习和定制:源码安装Nginx对于想要深入了解Nginx内部工作原理和定制开发的用户来说是一个很好的学习机会。通过源码编译和安装,用户可以更深入地了解Nginx的架构、模块和功能,为后续的定制开发或问题解决提供基础。

需要注意的是,源码安装Nginx相对复杂一些,需要一定的技术基础和编译经验。对于初学者或没有特定需求的用户来说,使用预编译的二进制包或包管理器进行安装可能更为简便和方便。

源码编辑nginx下载安装

步骤 1:安装依赖

首先,你需要安装 Nginx 编译所需的依赖库。这些库可能因你的 Linux 发行版而异。以下是一些常见的依赖库:

当然为了迅速和安全的更新软件以及下载依赖库,我们需要配置国内源或着本地源,配置过程可以参照小编的这个博客

Linux rhel9 配置本地yum源和国内yum源(适合新手小白体质)-CSDN博客Red Hot rhel9 关于nginx的源码编译下载以及编写systemd单元文件管理nginx服务(更适合新手小白的详细解说步骤),icon-default.png?t=N7T8,第1张https://blog.csdn.net/cx2004811/article/details/136499181?spm=1001.2014.3001.5501配置完成后,更新软件和下载nginx所依赖的环境

sudo apt-get update
sudo apt-get install gcc g++ make libpcre3 libpcre3-dev zlib1g zlib1g-dev libssl-dev
  1. gcc 和 g++:

    • 这两个是 GNU 编译器集合的一部分,用于编译 C 和 C++ 程序。Nginx 的源代码是用 C 语言编写的,因此您需要一个 C 编译器来编译它。尽管一些发行版可能提供预编译的 Nginx 二进制包,但如果您从源代码编译,则需要这些编译器。
  2. make:

    • make 是一个用于自动化构建软件的工具。它读取一个名为 Makefile 的文件,该文件描述了如何从源代码构建程序。Nginx 的源代码包含这样的 Makefile,因此 make 是必需的。
  3. libpcre3 和 libpcre3-dev:

    • PCRE(Perl Compatible Regular Expressions)是一个正则表达式库,Nginx 使用它来执行 URL 重写和其他与正则表达式相关的任务。libpcre3 是 PCRE 库的运行时组件,而 libpcre3-dev 包含开发文件(如头文件和库文件),这些文件在编译时是必需的。
  4. zlib1g 和 zlib1g-dev:

    • zlib 是一个用于数据压缩的库。Nginx 使用 zlib 来支持 gzip 压缩,这有助于减少传输到客户端的数据量,从而提高网络性能。与 PCRE 类似,zlib1g 是运行时库,而 zlib1g-dev 包含开发文件。
  5. libssl-dev:

    • OpenSSL 是一个强大的安全套接字层密码库,包括主要的密码算法、常用的密钥和证书封装管理功能及 SSL 协议。Nginx 使用 OpenSSL 来支持 HTTPS(通过 SSL/TLS 加密的 HTTP)。libssl-dev 包含 OpenSSL 的开发文件,使您能够从源代码编译 Nginx 时包含 SSL 支持。

如图所示,为安装nginx的依赖

Red Hot rhel9 关于nginx的源码编译下载以及编写systemd单元文件管理nginx服务(更适合新手小白的详细解说步骤),第2张

Red Hot rhel9 关于nginx的源码编译下载以及编写systemd单元文件管理nginx服务(更适合新手小白的详细解说步骤),第3张

步骤 2:上传nginx.tar.gz文件

这里有两种方法

一.虚拟机直接下载nginx压缩文件

使用命令

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

这样子可以直接在虚拟机中下载

二.win11系统中下载,使用远程连接软件传输到虚拟机(小编所使用的)

1.进入nginx安装官网选择你所想要的版本下载

这里不推荐下载最新的版本,因为可能产生版本不适用的可能,导致失败,小编使用的是nginx-1.20.2.tar.gz版本

点击以下网址进入nginx下载官网

http://nginx.org/download

下载之后传入虚拟机,小编传入的是用户页面

Red Hot rhel9 关于nginx的源码编译下载以及编写systemd单元文件管理nginx服务(更适合新手小白的详细解说步骤),第4张

2.解压文件

传输进入后使用ls命令可以查看,小编此处已经解压完成了

解压的命令是

tar -xzvf nginx-1.20.2.tar.gz

Red Hot rhel9 关于nginx的源码编译下载以及编写systemd单元文件管理nginx服务(更适合新手小白的详细解说步骤),第5张

3.解压文件后进入nginx页面以及配置编译项

使用cd命令进入nginx目录下

Red Hot rhel9 关于nginx的源码编译下载以及编写systemd单元文件管理nginx服务(更适合新手小白的详细解说步骤),第6张

在进入后源码编译文件,使用的命令如下

./configure \  
--prefix=/usr/share/nginx \  
--sbin-path=/usr/sbin/nginx \  
--modules-path=/usr/lib/nginx/modules \  
--conf-path=/etc/nginx/nginx.conf \  
--error-log-path=/var/log/nginx/error.log \  
--http-log-path=/var/log/nginx/access.log \  
--with-pcre \  
--with-http_ssl_module \  
--with-http_realip_module \  
--with-http_addition_module \  
--with-http_sub_module \  
--with-http_dav_module \  
--with-http_flv_module \  
--with-http_mp4_module \  
--with-http_gunzip_module \  
--with-http_gzip_static_module \  
--with-http_random_index_module \  
--with-http_secure_link_module \  
--with-http_stub_status_module \  
--with-http_auth_request_module \  
--with-threads \  
--with-stream \  
--with-stream_ssl_module \  
--with-stream_realip_module \  
--with-stream_geoip_module \  
--with-http_slice_module \  
--with-mail \  
--with-mail_ssl_module \  
--with-file-aio \  
--with-http_v2_module
以上源码编译的规则如下所示

这些./configure命令选项是用于配置和编译Nginx源代码的参数。Nginx是一个高性能的HTTP和反向代理服务器,邮件代理服务器,以及通用的TCP/UDP代理服务器。下面是每个选项的详细解释:

  1. --prefix=/usr/share/nginx: 设置Nginx安装的基本目录前缀。
  2. --sbin-path=/usr/sbin/nginx: 设置nginx可执行文件的路径。
  3. --modules-path=/usr/lib/nginx/modules: 设置动态加载模块的路径。
  4. --conf-path=/etc/nginx/nginx.conf: 设置主配置文件的路径。
  5. --error-log-path=/var/log/nginx/error.log: 设置错误日志的路径。
  6. --http-log-path=/var/log/nginx/access.log: 设置访问日志的路径。
以下是与模块相关的选项:
  1. --with-pcre: 使用PCRE库来支持正则表达式的处理。
HTTP模块:
  1. --with-http_ssl_module: 启用SSL支持。
  2. --with-http_realip_module: 启用获取真实客户端IP的模块。
  3. --with-http_addition_module: 启用在响应中添加文本或变量的模块。
  4. --with-http_sub_module: 启用在响应中替换文本的模块。
  5. --with-http_dav_module: 启用WebDAV支持。
  6. --with-http_flv_module: 启用对FLV流媒体的支持。
  7. --with-http_mp4_module: 启用对MP4流媒体的支持。
  8. --with-http_gunzip_module: 启用解压响应的模块。
  9. --with-http_gzip_static_module: 启用对预压缩文件的支持。
  10. --with-http_random_index_module: 启用从目录中随机选择索引文件。
  11. --with-http_secure_link_module: 启用生成和检查安全链接的模块。
  12. --with-http_stub_status_module: 启用获取Nginx状态信息的模块。
  13. --with-http_auth_request_module: 启用基于子请求实现用户认证的模块。
其他模块:
  1. --with-threads: 启用线程池支持。
  2. --with-stream: 启用TCP/UDP代理模块。
  3. --with-stream_ssl_module: 启用在stream模块中使用SSL。
  4. --with-stream_realip_module: 在stream模块中启用获取真实客户端IP的功能。
  5. --with-stream_geoip_module: 在stream模块中启用GeoIP支持。
  6. --with-http_slice_module: 启用响应切片支持。
邮件模块:
  1. --with-mail: 启用邮件代理模块。
  2. --with-mail_ssl_module: 在邮件模块中启用SSL支持。
性能选项:
  1. --with-file-aio: 启用异步文件I/O支持。
  2. --with-http_v2_module: 启用HTTP/2支持。

这些选项允许用户定制Nginx的安装,以满足其特定的需求和环境。

Red Hot rhel9 关于nginx的源码编译下载以及编写systemd单元文件管理nginx服务(更适合新手小白的详细解说步骤),第7张

Red Hot rhel9 关于nginx的源码编译下载以及编写systemd单元文件管理nginx服务(更适合新手小白的详细解说步骤),第8张

当以上界面出现后,标志着源码编译规则布置完成

步骤 5:编译和安装

这将开始编译 Nginx,并将编译好的文件安装到指定的目录。

Red Hot rhel9 关于nginx的源码编译下载以及编写systemd单元文件管理nginx服务(更适合新手小白的详细解说步骤),第9张

Red Hot rhel9 关于nginx的源码编译下载以及编写systemd单元文件管理nginx服务(更适合新手小白的详细解说步骤),第10张

Red Hot rhel9 关于nginx的源码编译下载以及编写systemd单元文件管理nginx服务(更适合新手小白的详细解说步骤),第11张

如以上便是源码编译写入完成

步骤 6:启动 Nginx

安装完成后,你可以使用以下命令启动 Nginx,在编译完成后,你的nginx启动程序存在于

/uer/local/nginx/sbin中进入后便可以查看到你的程序

cd /usr/local/nginx/sbin/
./nginx

Red Hot rhel9 关于nginx的源码编译下载以及编写systemd单元文件管理nginx服务(更适合新手小白的详细解说步骤),第12张

在虚拟机中启动后,便可以在虚拟机中的网站上搜索到你的页面,但是在主机中还是不能打开的话,这个原因大概是出在了防火墙上,需要在虚拟机上关闭你的防火墙

sudo systemctl stop firewalld

防火墙关闭后,在你的主机电脑上输入你的虚拟机IP地址就可以直接进入此页面,应为我们配置的nginx.conf中使用的端口是默认端口80,所以不需要输入端口号就可以直接进入

Red Hot rhel9 关于nginx的源码编译下载以及编写systemd单元文件管理nginx服务(更适合新手小白的详细解说步骤),第13张

编写systemd单元文件管理nginx服务

引子

为什么编写systemd单元文件管理nginx服务
系统初始化与启动:

systemd是Linux系统(特别是较新的发行版)的初始化系统和服务管理器。它负责在系统启动时启动服务,并在系统关闭时停止服务。通过为Nginx编写systemd单元文件,可以确保Nginx在系统启动时自动启动,并在系统关闭时正确停止。

依赖管理:

systemd允许定义服务之间的依赖关系。例如,如果Nginx依赖于某个数据库服务,你可以在Nginx的systemd单元文件中定义这种依赖,确保数据库服务在Nginx之前启动。

日志记录:

systemd提供了强大的日志记录功能,可以记录服务的启动、停止和任何错误。通过systemd管理Nginx,你可以轻松访问这些日志,以便快速诊断问题。

资源限制:

systemd允许你为服务设置资源限制,如CPU、内存和文件描述符的使用量。这对于管理大型Nginx部署或限制潜在的资源滥用非常有用。

重载配置:

systemd允许在不重启服务的情况下重载配置。对于Nginx这样的服务来说,这是一个非常有用的功能,因为你可以在不中断现有连接的情况下应用新的配置更改。

监控和通知:

systemd可以与多种监控工具集成,以便在系统或服务出现问题时发送通知。这使得管理员能够迅速响应并解决潜在问题。

标准化管理:

使用systemd单元文件来管理Nginx可以确保你的服务管理策略在整个系统中保持一致。这有助于减少配置错误,并使系统更容易维护。

编写文件管理nginx服务

1.进入/usr/lib/systemd/system或者/etc/systemd/system目录下创建一个nginx.service的文件

为什么要使用.service的后缀

编写的文件使用.service作为后缀,主要是因为在Linux系统中,.service文件是专用于systemd系统与服务管理器的配置文件。systemd是Linux系统的初始化系统和服务管理器,它负责在系统启动时启动服务,并在系统运行时管理服务。

.service文件包含了服务的启动、停止、重启等操作的指令,以及服务的相关配置信息,如服务的名称、描述、依赖关系等。使用.service作为文件后缀,有助于系统和管理员识别这些文件是用于配置和管理服务的,从而方便进行管理和维护。

此外,通过修改.service文件,可以对系统服务进行定制化配置,以满足不同的需求。同时,这些文件也是系统管理员进行故障排除和性能优化的重要工具之一。因此,在编写用于配置Linux服务的文件时,使用.service作为后缀是符合规范和习惯的做法。

所使用的命令为

cd /usr/lib/systemd/system
vim nginx.service

Red Hot rhel9 关于nginx的源码编译下载以及编写systemd单元文件管理nginx服务(更适合新手小白的详细解说步骤),第14张

Red Hot rhel9 关于nginx的源码编译下载以及编写systemd单元文件管理nginx服务(更适合新手小白的详细解说步骤),第15张

2.编辑nginx.service文件

所需要编辑的指令为以下可以直接复制上去

[Unit]
Description=The nginx HTTP and reverse proxy server
After=network-online.target remote-fs.target nss-lookup.target
Wants=network-online.target
[Service]
Type=forking
PIDFile=/run/nginx.pid
# Nginx will fail to start if /run/nginx.pid already exists but has the wrong
# SELinux context. This might happen when running `nginx -t` from the cmdline.
# https://bugzilla.redhat.com/show_bug.cgi?id=1268621
ExecStartPre=/usr/bin/rm -f /run/nginx.pid
ExecStartPre=/usr/sbin/nginx -t
ExecStart=/usr/sbin/nginx
ExecReload=/usr/sbin/nginx -s reload
KillSignal=SIGQUIT
TimeoutStopSec=5
KillMode=mixed
PrivateTmp=true
[Install]
WantedBy=multi-user.target

如下是以上代码的解释

[Unit] 部分
  • Description: 服务的简短描述,这里描述的是 nginx 是一个 HTTP 和反向代理服务器。
  • After: 指定服务启动的顺序。nginx 会在 network-online.target, remote-fs.target, 和 nss-lookup.target 这些目标之后启动。
  • Wants: 表明 nginx 服务“想要”在 network-online.target 之后启动,但即使 network-online.target 失败,nginx 也会尝试启动。
    [Service] 部分
    • Type=forking: 表明 nginx 进程会 fork 一个子进程来运行,父进程退出。systemd 会等待父进程退出,然后认为服务已经启动。
    • PIDFile: 指定 nginx 的 PID 文件路径,用于存储 nginx 主进程的进程 ID。
    • ExecStartPre: 在启动 nginx 之前执行的命令。这里有两个命令:
      • 删除旧的 PID 文件,确保没有旧的、可能带有错误 SELinux 上下文的 PID 文件存在。
      • 测试 nginx 的配置是否正确。
    • ExecStart: 启动 nginx 的命令。
    • ExecReload: 重新加载 nginx 配置的命令。
    • KillSignal: 当停止服务时发送的信号。这里使用 SIGQUIT,它是一个常见的信号用于请求程序正常退出。
    • TimeoutStopSec: 停止服务时等待的最大时间。
    • KillMode: 服务的杀死模式。mixed 表示同时发送终止信号和 SIGKILL。
    • PrivateTmp: 如果设置为 true,systemd 会为服务创建私有的临时文件夹。
      [Install] 部分
      • WantedBy: 指定哪些目标(target)想要这个服务。这里表明 multi-user.target(多用户模式)想要 nginx 服务。

        Red Hot rhel9 关于nginx的源码编译下载以及编写systemd单元文件管理nginx服务(更适合新手小白的详细解说步骤),第16张

        3.重载配置文件以及启用nginx和检查nginx的启用

        通常使用的命令是

        systemctl daemon-reload

        如图所示,便是编写完成并且打开使用了nginx

        Red Hot rhel9 关于nginx的源码编译下载以及编写systemd单元文件管理nginx服务(更适合新手小白的详细解说步骤),第17张

        Red Hot rhel9 关于nginx的源码编译下载以及编写systemd单元文件管理nginx服务(更适合新手小白的详细解说步骤),第18张

        总结

        源码编辑安装 Nginx 提供了从源代码构建和定制 Nginx 服务器的机会,使得管理员和开发者能够根据需要添加或移除模块,优化性能,并适应特定的应用场景。这个过程虽然繁琐,但确保了Nginx的完整性和兼容性,并且提供了最大的灵活性。

        编写 systemd 单元文件则是实现 Nginx 服务自动化管理的关键步骤。通过定义服务的启动顺序、依赖关系、执行命令等,systemd 能够确保 Nginx 在系统启动时自动运行,并在需要时进行重启或停止。这种管理方式使得 Nginx 服务的监控和维护变得更加便捷和高效。

        综合来看,源码编辑安装 Nginx 并编写 systemd 单元文件是构建稳定、可靠且高效 Web 服务器的关键步骤。它们不仅提升了服务器的性能和安全性,还简化了服务的管理和维护工作,为网站和应用的稳定运行提供了有力保障。