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 头,并根据配置文件决定如何处理请求(如转发到后端服务器、返回静态文件等)。
相关推荐
Ramseyuu2 分钟前
Mybatis-plus
微服务·云原生·架构
luck_me539 分钟前
K8s 图形界面管理kubesphere
云原生·容器·kubernetes
猴子请来的逗比4893 小时前
tomcat与nginx之间实现多级代理
java·nginx·tomcat
张青贤11 小时前
K8s中的containerPort与port、targetPort、nodePort的关系:
云原生·容器·kubernetes
π大星星️15 小时前
HAProxy + Keepalived + Nginx 高可用负载均衡系统
运维·nginx·负载均衡
zhojiew17 小时前
istio in action之服务网格和istio组件
云原生·istio
Johny_Zhao17 小时前
K8S+nginx+MYSQL+TOMCAT高可用架构企业自建网站
linux·网络·mysql·nginx·网络安全·信息安全·tomcat·云计算·shell·yum源·系统运维·itsm
专注代码七年18 小时前
在Windows 境下,将Redis和Nginx注册为服务。
windows·redis·nginx
xixingzhe219 小时前
Nginx 配置多个监听端口
服务器·前端·nginx