一、环境准备
- 一台装有 CentOS 7.9 的虚拟机(IP: 192.168.40.81)
- nginx-1.21.6.tar.gz 安装包一个(版本随意)
二、安装
1)解压 nginx-1.21.6.tar.gz
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)配置编译选项
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)编译安装
make && make install
最终会在 /usr/local 下安装了 nginx:
4)安装成服务
- 创建服务脚本
vim /usr/lib/systemd/system/nginx.service
[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
- 重新加载系统服务
systemctl daemon-reload
- 启动服务并设置为开机启动
systemctl enable nginx.service --now
- 重启虚拟机
reboot
- 查看 nginx 服务状态
systemctl status nginx
5)手工启动
nginx 也可以手工启动。安装成服务以后就不需要手工启动。服务启动跟手工启动二选一。
# 进入安装好的目录 /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 头,并根据配置文件决定如何处理请求(如转发到后端服务器、返回静态文件等)。