Nginx 源码安装成服务

一、环境准备

  • 一台装有 CentOS 7.9 的虚拟机(IP: 192.168.40.81)
  • nginx-1.21.6.tar.gz 安装包一个(版本随意)

二、安装

1)解压 nginx-1.21.6.tar.gz

bash 复制代码
tar -xzvf nginx-1.21.6.tar.gz
  • -tar:这是一个在 Linux 系统中常用的归档工具,能够对多个文件或目录进行打包操作。
  • -xzvf:此为命令的选项参数,是由多个选项组合而成的。
  • -x:代表 extract,也就是解包的意思,表明要对归档文件进行解压操作。
  • -z:意味着使用 gzip 算法对归档文件进行压缩或解压。
  • -v:即 verbose,它的作用是在操作过程中显示详细的进度信息。
  • -f:表示 file,此选项后面需要紧跟要操作的归档文件名称。

这条命令的主要功能是对名为 nginx-1.21.6.tar.gz 的压缩包进行解压操作。具体来讲,它会先运用 gzip 算法对压缩包进行解压缩,得到一个 tar 包,接着再对这个 tar 包进行解包处理,最终将其中包含的 Nginx 1.21.6 版本的源代码文件释放出来。解压操作会在当前目录下生成一个名为 nginx-1.21.6 的目录,解压出来的所有文件都存放在这个目录中。

2)配置编译选项

bash 复制代码
cd nginx-1.21.6
./configure --prefix=/usr/local/nginx
  • ./configure:
  • 这是源码编译软件时的标准第一步,其作用是检查系统环境是否满足编译要求,像依赖库、编译器等是否齐全。 该命令会依据系统环境生成 Makefile 文件,而这个文件正是后续 make 和 make install 命令执行的依据。
  • --prefix=/usr/local/nginx:
  • 此为 configure 命令的一个参数,用于指定软件的安装路径。在这个例子中,Nginx 会被安装到 /usr/local/nginx 目录下。
  • 安装完成后,Nginx 的二进制文件会存放在 /usr/local/nginx/sbin/ 目录,配置文件则位于 /usr/local/nginx/conf/ 目录。

出现下面的提示就是配置成功。

  • 中途如果有报错,根据报错提示,yum install -y 安装依赖的软件即可。

3)编译安装

bash 复制代码
make && make install

最终会在 /usr/local 下安装了 nginx:

4)安装成服务

  • 创建服务脚本
bash 复制代码
vim /usr/lib/systemd/system/nginx.service
javascript 复制代码
[Unit]
Description=nginx - web server
After=network.target remote-fs.target nss-lookup.target
[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStartPre=/usr/local/nginx/sbin/nginx -t -c /usr/local/nginx/conf/nginx.conf
ExecStart=/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/usr/local/nginx/sbin/nginx -s stop
ExecQuit=/usr/local/nginx/sbin/nginx -s quit
PrivateTmp=true

[Install]
WantedBy=multi-user.target
  • 重新加载系统服务
bash 复制代码
systemctl daemon-reload
  • 启动服务并设置为开机启动
bash 复制代码
systemctl enable nginx.service --now
  • 重启虚拟机
bash 复制代码
reboot
  • 查看 nginx 服务状态
bash 复制代码
systemctl status nginx

5)手工启动

nginx 也可以手工启动。安装成服务以后就不需要手工启动。服务启动跟手工启动二选一。

bash 复制代码
# 进入安装好的目录 /usr/local/nginx/sbin
./nginx 启动
./nginx -s stop 快速停止
./nginx -s quit 优雅关闭,在退出前完成已经接受的连接请求
./nginx -s reload 重新加载配置

在 Nginx 命令中, -s 是一个选项(option),用于向正在运行的 Nginx 主进程发送信号(signal),从而控制 Nginx 的行为(如停止、重启、重新加载配置等)。 -s 后面需要跟具体的信号指令,常见的有:

信号指令 作用
stop 快速停止 Nginx(强制终止,不等待现有连接处理完毕)
quit 优雅停止 Nginx(等待所有请求处理完毕后再停止)
reload 重新加载配置文件(无需重启服务,平滑应用新配置)
reopen 重新打开日志文件(常用于日志切割,避免日志文件过大)

6)访问 Nginx

  • 在浏览器输入虚拟机IP
  • 如果虚拟机防火墙关闭的话,应该能看到如下:

三、工作原理

Nginx 采用主进程 + 工作进程的多进程模型:

/sbin/nginx 启动主进程。

  • 主进程启动时读取并解析配置文件(如 /etc/nginx/nginx.conf)。
  • 配置信息被解析为内存中的数据结构(如结构体、哈希表等)。
  • 主进程会创建监听套接字(如监听 80/443 端口)。

主进程通过 fork() 系统调用创建多个工作进程。

  • fork() 会复制主进程的内存空间,包括已解析的配置数据结构。因此,每个工作进程都获得了主进程配置信息的副本。
  • 每个工作进程都会继承主进程监听套接字。
  • 所有工作进程并行监听相同的端口,客户端连接到达时,由操作系统内核决定哪个工作进程接收连接(通常采用负载均衡算法)。

客户端请求 inde.html。

  • 工作进程通过事件循环(Event Loop)监听多个连接的读写事件。
  • 当某个连接有数据可读时,工作进程读取请求、解析 HTTP 头,并根据配置文件决定如何处理请求(如转发到后端服务器、返回静态文件等)。
相关推荐
trayvontang1 小时前
Nginx之location配置
运维·nginx
代码or搬砖3 小时前
Nginx详讲
运维·nginx·dubbo
ascarl20104 小时前
Kubernetes 环境 NFS 卡死问题排查与解决纪要
云原生·容器·kubernetes
阿里云云原生5 小时前
快速构建企业 AI 开放平台,HiMarket 重磅升级
云原生
Evan芙8 小时前
Nginx 平滑升级
数据库·nginx·ubuntu
阿里云云原生9 小时前
AgentScope x RocketMQ:打造企业级高可靠 A2A 智能体通信基座
云原生·apache·rocketmq
新手小白*9 小时前
K8s 中的 CoreDNS 组件
云原生·容器·kubernetes
Selegant10 小时前
告别传统部署:用 GraalVM Native Image 构建秒级启动的 Java 微服务
java·开发语言·微服务·云原生·架构
晚霞的不甘11 小时前
现代软件架构演进:从单体到云原生 + 代码实战详解
云原生
2501_9240641112 小时前
2025年优测平台:微服务全链路性能瓶颈分析与最佳实践
微服务·云原生·架构·性能瓶颈·全链路性能