Nginx高性能Web服务器实战:从协议原理到运维优化
目录
前言
一、Web基础概念
1.1 什么是Web?
1.2 B/S架构模型
1.3 Web请求与响应流程
1.4 静态资源 vs 动态资源
二、HTTP/HTTPS协议详解
2.1 HTTP与HTTPS区别
2.2 HTTPS握手流程
2.3 HTTP状态码大全
三、Nginx核心知识
3.1 Nginx简介
3.2 Nginx vs Apache
3.3 Nginx进程结构
四、Nginx安装与配置
4.1 下载Nginx
4.2 关闭防火墙,并且安装
4.3 创建用户并解压
4.4 编译安装Nginx
4.5 检查、启动、重启、停止 nginx服务
4.6 启动
4.7 查看当前的版本
4.8添加Nginx服务系统
4.9 运行
五、awk的使用方法
5.1 统计以/bin/bash结尾的行数
5.2 统计/etc/passwd中第三列大于等于200的每一行
5.3 第三列大于等于1000的
5.4 打印行号和每一行
5.5 打印行数和每一行的第一列
5.6 先打印行号,再打印每一行
5.7 空间内存使用率
5.8 统计在线用户数
5.9 getline 隔一行打印一下
5.10 getline 隔一行打印一下
5.11 获取当前主机名
总结
前言
在当今互联网技术体系中,Web服务的高效运作离不开底层协议的支撑与服务器技术的优化。本书从HTTP/HTTPS协议的本质出发,深入解析Nginx高性能服务器的架构原理与实战配置,并结合Shell与Awk等工具,探索自动化运维与数据处理的进阶技巧。无论您是开发者、运维工程师还是技术爱好者,都将通过本书获得构建稳定、安全、高性能Web服务的系统化知识体系。
一、Web基础概念
1.1 什么是Web?
Web(World Wide Web,万维网)是运行在互联网之上的超文本信息系统,它依赖于HTTP/HTTPS协议实现浏览器与服务器之间的交互。
核心特点:
- •分布式:资源分布在世界各地的服务器上
- •跨平台:只要有浏览器就能访问资源
- •无状态:每次HTTP请求都是独立的(除非使用Cookie/Session)
1.2 B/S架构模型
Web采用B/S架构(Browser/Server):
- •Browser(浏览器):用户入口,发送请求、渲染页面
- •Server(服务器):接收请求,返回所需资源或动态内容
用户浏览器 → Web服务器(Nginx/Apache) ↓ 应用服务器(PHP/Python/Java) ↓ 数据库(MySQL/Redis)
1.3 Web请求与响应流程
- 1.用户输入URL
- 2.DNS解析域名
- 3.建立TCP连接(3次握手)
- 4.发送HTTP请求(GET/POST)
- 5.服务器处理请求:
- •静态资源直接返回
- •动态请求转发到应用服务器
- 6.返回HTTP响应
- 7.浏览器渲染页面
1.4 静态资源 vs 动态资源
类型 | 特点 | 示例 |
---|---|---|
静态资源 | 直接返回,速度快 | HTML、CSS、图片、JS文件 |
动态资源 | 服务器端生成,支持交互 | PHP脚本、Python/Java应用 |
二、HTTP/HTTPS协议详解
2.1 HTTP与HTTPS区别
- •HTTP:明文传输,不安全
- •HTTPS:HTTP + SSL/TLS加密,防止中间人攻击
2.2 HTTPS握手流程
- 1.客户端Hello(支持的加密算法)
- 2.服务端Hello + 证书
- 3.客户端验证证书
- 4.协商临时密钥
- 5.开始加密通信
2.3 HTTP状态码大全
状态码 | 类别 | 说明 |
---|---|---|
1xx | 信息性 | 请求已接收,继续处理 |
2xx | 成功 | 请求成功处理 |
3xx | 重定向 | 需要进一步操作 |
4xx | 客户端错误 | 请求语法错误或无法实现 |
5xx | 服务器错误 | 服务器处理请求失败 |
常用状态码:
- •200 OK:请求成功
- •301/302:重定向
- •404:页面不存在
- •403:禁止访问
- •500:服务器内部错误
- •502/504:网关错误
三、Nginx核心知识
3.1 Nginx简介
Nginx是一个高性能的HTTP和反向代理服务器,特点:
- •轻量级,内存占用小
- •支持高并发(单机5万+并发)
- •热部署能力
- •优秀的反向代理和负载均衡
3.2 Nginx vs Apache
特性 | Nginx | Apache |
---|---|---|
架构 | 事件驱动 | 进程/线程驱动 |
并发能力 | 极强 | 一般 |
资源消耗 | 低 | 较高 |
热部署 | 支持 | 不支持 |
静态文件处理 | 高效 | 一般 |
3.3 Nginx进程结构
- •Master进程:管理Worker进程
- •Worker进程:实际处理请求(数量通常=CPU核心数)
四、Nginx安装与配置
4.1 下载Nginx
[root@zard3 shelldemo]# wget https://nginx.org/download/nginx-1.20.2.tar.gz
--2025-09-04 16:42:11-- https://nginx.org/download/nginx-1.20.2.tar.gz
正在解析主机 nginx.org (nginx.org)... 52.58.199.22, 3.125.197.172, 2a05:d014:5c0:2600::6, ...
正在连接 nginx.org (nginx.org)|52.58.199.22|:443... 已连接。
已发出 HTTP 请求,正在等待回应... 200 OK
长度:1062124 (1.0M) [application/octet-stream]
正在保存至: “nginx-1.20.2.tar.gz”100%[===========================================================================================>] 1,062,124 563KB/s 用时 1.8s 2025-09-04 16:42:14 (563 KB/s) - 已保存 “nginx-1.20.2.tar.gz” [1062124/1062124])
4.2 关闭防火墙,并且安装
[root@zard3 ~]# yum install -y gcc gcc-c++ make pcre pcre-devel zlib zlib-devel openssl openssl-devel
已加载插件:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
epel/x86_64/metalink | 4.4 kB 00:00:00 * epel: d2lzkl7pfhq30w.cloudfront.net
base | 3.6 kB 00:00:00
extras | 2.9 kB 00:00:00
file:///mnt/repodata/repomd.xml: [Errno 14] curl#37 - "Couldn't open file /mnt/repodata/repomd.xml"
正在尝试其它镜像。
mysql-connectors-community | 3.0 kB 00:00:00
mysql-tools-community | 3.0 kB 00:00:00
mysql80-community | 3.0 kB 00:00:00
updates | 2.9 kB 00:00:00
软件包 gcc-4.8.5-44.el7.x86_64 已安装并且是最新版本
软件包 gcc-c++-4.8.5-44.el7.x86_64 已安装并且是最新版本
软件包 1:make-3.82-24.el7.x86_64 已安装并且是最新版本
软件包 pcre-8.32-17.el7.x86_64 已安装并且是最新版本
软件包 pcre-devel-8.32-17.el7.x86_64 已安装并且是最新版本
正在解决依赖关系
--> 正在检查事务
---> 软件包 openssl.x86_64.1.1.0.2k-19.el7 将被 升级
---> 软件包 openssl.x86_64.1.1.0.2k-26.el7_9 将被 更新
--> 正在处理依赖关系 openssl-libs(x86-64) = 1:1.0.2k-26.el7_9,它被软件包 1:openssl-1.0.2k-26.el7_9.x86_64 需要
---> 软件包 openssl-devel.x86_64.1.1.0.2k-26.el7_9 将被 安装
--> 正在处理依赖关系 krb5-devel(x86-64),它被软件包 1:openssl-devel-1.0.2k-26.el7_9.x86_64 需要
---> 软件包 zlib.x86_64.0.1.2.7-18.el7 将被 升级
---> 软件包 zlib.x86_64.0.1.2.7-21.el7_9 将被 更新
---> 软件包 zlib-devel.x86_64.0.1.2.7-18.el7 将被 升级
---> 软件包 zlib-devel.x86_64.0.1.2.7-21.el7_9 将被 更新
--> 正在检查事务
---> 软件包 krb5-devel.x86_64.0.1.15.1-55.el7_9 将被 安装
--> 正在处理依赖关系 libkadm5(x86-64) = 1.15.1-55.el7_9,它被软件包 krb5-devel-1.15.1-55.el7_9.x86_64 需要
--> 正在处理依赖关系 krb5-libs(x86-64) = 1.15.1-55.el7_9,它被软件包 krb5-devel-1.15.1-55.el7_9.x86_64 需要
--> 正在处理依赖关系 libverto-devel,它被软件包 krb5-devel-1.15.1-55.el7_9.x86_64 需要
--> 正在处理依赖关系 libselinux-devel,它被软件包 krb5-devel-1.15.1-55.el7_9.x86_64 需要
--> 正在处理依赖关系 libcom_err-devel,它被软件包 krb5-devel-1.15.1-55.el7_9.x86_64 需要
--> 正在处理依赖关系 keyutils-libs-devel,它被软件包 krb5-devel-1.15.1-55.el7_9.x86_64 需要
---> 软件包 openssl-libs.x86_64.1.1.0.2k-19.el7 将被 升级
---> 软件包 openssl-libs.x86_64.1.1.0.2k-26.el7_9 将被 更新
--> 正在检查事务
---> 软件包 keyutils-libs-devel.x86_64.0.1.5.8-3.el7 将被 安装
---> 软件包 krb5-libs.x86_64.0.1.15.1-50.el7 将被 升级
--> 正在处理依赖关系 krb5-libs(x86-64) = 1.15.1-50.el7,它被软件包 krb5-workstation-1.15.1-50.el7.x86_64 需要
---> 软件包 krb5-libs.x86_64.0.1.15.1-55.el7_9 将被 更新
---> 软件包 libcom_err-devel.x86_64.0.1.42.9-19.el7 将被 安装
---> 软件包 libkadm5.x86_64.0.1.15.1-50.el7 将被 升级
---> 软件包 libkadm5.x86_64.0.1.15.1-55.el7_9 将被 更新
---> 软件包 libselinux-devel.x86_64.0.2.5-15.el7 将被 安装
--> 正在处理依赖关系 libsepol-devel(x86-64) >= 2.5-10,它被软件包 libselinux-devel-2.5-15.el7.x86_64 需要
--> 正在处理依赖关系 pkgconfig(libsepol),它被软件包 libselinux-devel-2.5-15.el7.x86_64 需要
---> 软件包 libverto-devel.x86_64.0.0.2.5-4.el7 将被 安装
--> 正在检查事务
---> 软件包 krb5-workstation.x86_64.0.1.15.1-50.el7 将被 升级
---> 软件包 krb5-workstation.x86_64.0.1.15.1-55.el7_9 将被 更新
---> 软件包 libsepol-devel.x86_64.0.2.5-10.el7 将被 安装
--> 解决依赖关系完成依赖关系解决=====================================================================================================================================Package 架构 版本 源 大小
=====================================================================================================================================
正在安装:openssl-devel x86_64 1:1.0.2k-26.el7_9 updates 1.5 M
正在更新:openssl x86_64 1:1.0.2k-26.el7_9 updates 494 kzlib x86_64 1.2.7-21.el7_9 updates 90 kzlib-devel x86_64 1.2.7-21.el7_9 updates 50 k
为依赖而安装:keyutils-libs-devel x86_64 1.5.8-3.el7 base 37 kkrb5-devel x86_64 1.15.1-55.el7_9 updates 273 klibcom_err-devel x86_64 1.42.9-19.el7 base 32 klibselinux-devel x86_64 2.5-15.el7 base 187 klibsepol-devel x86_64 2.5-10.el7 base 77 klibverto-devel x86_64 0.2.5-4.el7 base 12 k
为依赖而更新:krb5-libs x86_64 1.15.1-55.el7_9 updates 810 kkrb5-workstation x86_64 1.15.1-55.el7_9 updates 821 klibkadm5 x86_64 1.15.1-55.el7_9 updates 180 kopenssl-libs x86_64 1:1.0.2k-26.el7_9 updates 1.2 M事务概要
=====================================================================================================================================
安装 1 软件包 (+6 依赖软件包)
升级 3 软件包 (+4 依赖软件包)总计:5.7 M
总下载量:2.1 M
Downloading packages:
(1/7): keyutils-libs-devel-1.5.8-3.el7.x86_64.rpm | 37 kB 00:00:00
(2/7): libselinux-devel-2.5-15.el7.x86_64.rpm | 187 kB 00:00:00
(3/7): libsepol-devel-2.5-10.el7.x86_64.rpm | 77 kB 00:00:00
(4/7): libcom_err-devel-1.42.9-19.el7.x86_64.rpm | 32 kB 00:00:00
(5/7): krb5-devel-1.15.1-55.el7_9.x86_64.rpm | 273 kB 00:00:01
(6/7): libverto-devel-0.2.5-4.el7.x86_64.rpm | 12 kB 00:00:00
(7/7): openssl-devel-1.0.2k-26.el7_9.x86_64.rpm | 1.5 MB 00:00:00
-------------------------------------------------------------------------------------------------------------------------------------
总计 1.0 MB/s | 2.1 MB 00:00:02
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction正在更新 : zlib-1.2.7-21.el7_9.x86_64 1/21 正在更新 : krb5-libs-1.15.1-55.el7_9.x86_64 2/21 正在更新 : 1:openssl-libs-1.0.2k-26.el7_9.x86_64 3/21 正在更新 : libkadm5-1.15.1-55.el7_9.x86_64 4/21 正在更新 : zlib-devel-1.2.7-21.el7_9.x86_64 5/21 正在安装 : libcom_err-devel-1.42.9-19.el7.x86_64 6/21 正在安装 : libsepol-devel-2.5-10.el7.x86_64 7/21 正在安装 : libselinux-devel-2.5-15.el7.x86_64 8/21 正在安装 : libverto-devel-0.2.5-4.el7.x86_64 9/21 正在安装 : keyutils-libs-devel-1.5.8-3.el7.x86_64 10/21 正在安装 : krb5-devel-1.15.1-55.el7_9.x86_64 11/21 正在安装 : 1:openssl-devel-1.0.2k-26.el7_9.x86_64 12/21 正在更新 : krb5-workstation-1.15.1-55.el7_9.x86_64 13/21 正在更新 : 1:openssl-1.0.2k-26.el7_9.x86_64 14/21 清理 : 1:openssl-1.0.2k-19.el7.x86_64 15/21 清理 : krb5-workstation-1.15.1-50.el7.x86_64 16/21 清理 : zlib-devel-1.2.7-18.el7.x86_64 17/21 清理 : libkadm5-1.15.1-50.el7.x86_64 18/21 清理 : 1:openssl-libs-1.0.2k-19.el7.x86_64 19/21 清理 : krb5-libs-1.15.1-50.el7.x86_64 20/21 清理 : zlib-1.2.7-18.el7.x86_64 21/21 验证中 : 1:openssl-devel-1.0.2k-26.el7_9.x86_64 1/21 验证中 : keyutils-libs-devel-1.5.8-3.el7.x86_64 2/21 验证中 : libverto-devel-0.2.5-4.el7.x86_64 3/21 验证中 : libkadm5-1.15.1-55.el7_9.x86_64 4/21 验证中 : 1:openssl-libs-1.0.2k-26.el7_9.x86_64 5/21 验证中 : libsepol-devel-2.5-10.el7.x86_64 6/21 验证中 : libselinux-devel-2.5-15.el7.x86_64 7/21 验证中 : krb5-devel-1.15.1-55.el7_9.x86_64 8/21 验证中 : libcom_err-devel-1.42.9-19.el7.x86_64 9/21 验证中 : krb5-libs-1.15.1-55.el7_9.x86_64 10/21 验证中 : krb5-workstation-1.15.1-55.el7_9.x86_64 11/21 验证中 : zlib-devel-1.2.7-21.el7_9.x86_64 12/21 验证中 : zlib-1.2.7-21.el7_9.x86_64 13/21 验证中 : 1:openssl-1.0.2k-26.el7_9.x86_64 14/21 验证中 : 1:openssl-libs-1.0.2k-19.el7.x86_64 15/21 验证中 : zlib-devel-1.2.7-18.el7.x86_64 16/21 验证中 : krb5-workstation-1.15.1-50.el7.x86_64 17/21 验证中 : 1:openssl-1.0.2k-19.el7.x86_64 18/21 验证中 : zlib-1.2.7-18.el7.x86_64 19/21 验证中 : krb5-libs-1.15.1-50.el7.x86_64 20/21 验证中 : libkadm5-1.15.1-50.el7.x86_64 21/21 已安装:openssl-devel.x86_64 1:1.0.2k-26.el7_9 作为依赖被安装:keyutils-libs-devel.x86_64 0:1.5.8-3.el7 krb5-devel.x86_64 0:1.15.1-55.el7_9 libcom_err-devel.x86_64 0:1.42.9-19.el7 libselinux-devel.x86_64 0:2.5-15.el7 libsepol-devel.x86_64 0:2.5-10.el7 libverto-devel.x86_64 0:0.2.5-4.el7 更新完毕:openssl.x86_64 1:1.0.2k-26.el7_9 zlib.x86_64 0:1.2.7-21.el7_9 zlib-devel.x86_64 0:1.2.7-21.el7_9 作为依赖被升级:krb5-libs.x86_64 0:1.15.1-55.el7_9 krb5-workstation.x86_64 0:1.15.1-55.el7_9 libkadm5.x86_64 0:1.15.1-55.el7_9 openssl-libs.x86_64 1:1.0.2k-26.el7_9 完毕!
4.3 创建用户并解压
[root@zard3 ~]# useradd -M -s /sbin/nologin nginx # 创建用户
[root@zard3 ~]# tar zxvf nginx-1.20.2.tar.gz -C /opt/ # 解压
4.4 编译安装Nginx
cd nginx-1.20.2/
./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-http_stub_status_module \
--with-http_ssl_module
4.5 检查、启动、重启、停止 nginx服务
[root@zard3 nginx-1.20.2]# nginx -t
nginx: the configuration file /usr/local/nginx/conf/ngnx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
4.6 启动
[root@zard3 nginx-1.20.2]# nginx
4.7 查看当前的版本
[root@zard3 nginx-1.20.2]# nginx -V
nginx version: nginx/1.20.2
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC)
built with OpenSSL 1.0.2k-fips 26 Jan 2017
TLS SNI support enabled
configure arguments: --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module --with-http_ssl_module
4.8添加Nginx服务系统
vim /etc/init.d/nginx
#!/bin/bash
#chkconfig: 35 99 20 // 这是固定格式,2345表示运行级别,之后为开机执行顺序和关机执行顺序
#description:Nginx Service Control Script //这也是必须的
COM="/usr/local/nginx/sbin/nginx"
PID="/usr/local/nginx/logs/nginx.pid"
case "$1" in
start)$COM
;;stop)kill -s QUIT $(cat $PID)
;;restart)$0 stop$0 start
;;reload)kill -s HUP $(cat $PID)
;;*)
echo "Usage: $0 {start|stop|restart|reload}"
exit 1esac
exit 0
4.9 运行
chmod +x /etc/init.d/nginx
chkconfig --add nginx #添加为系统服务
systemctl stop nginx
systemctl start nginxservice nginx start|stop|restart|reload
系统服务 服务名称 启动模式
五、awk的使用方法
5.1 统计以/bin/bash结尾的行数
[root@zard3 shelldemo]# awk 'BEGIN{x=0};/\/bin\/bash$/{x++;print x,$0};END{print x}' /etc/
1 root:x:0:0:root:/root:/bin/bash
2 zard3:x:1000:1000:ZARD3:/home/zard3:/bin/bash
3 test1:x:1001:1001::/home/test1:/bin/bash
4 tom:x:1002:1002::/home/tom:/bin/bash
5 zard111:x:1003:1003::/home/zard111:/bin/bash
6 test3:x:1004:1004::/home/test3:/bin/bash
7 test4:x:1005:1005::/home/test4:/bin/bash
7
[root@zard3 shelldemo]# cat /etc/passwd|grep -c "/bin/bash"
7
5.2 统计/etc/passwd中第三列大于等于200的每一行
[root@zard3 shelldemo]# awk -F ":" '! ($3<200){print} ' /etc/passwd
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
libstoragemgmt:x:998:995:daemon account for libstoragemgmt:/var/run/lsm:/sbin/nologin
colord:x:997:994:User for colord:/var/lib/colord:/sbin/nologin
saned:x:996:993:SANE scanner daemon user:/usr/share/sane:/sbin/nologin
gluster:x:995:992:GlusterFS daemons:/run/gluster:/sbin/nologin
saslauth:x:994:76:Saslauthd user:/run/saslauthd:/sbin/nologin
setroubleshoot:x:993:990::/var/lib/setroubleshoot:/sbin/nologin
chrony:x:992:987::/var/lib/chrony:/sbin/nologin
unbound:x:991:986:Unbound DNS resolver:/etc/unbound:/sbin/nologin
sssd:x:990:984:User for sssd:/:/sbin/nologin
geoclue:x:989:983:User for geoclue:/var/lib/geoclue:/sbin/nologin
nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin
gnome-initial-setup:x:988:982::/run/gnome-initial-setup/:/sbin/nologin
zard3:x:1000:1000:ZARD3:/home/zard3:/bin/bash
test1:x:1001:1001::/home/test1:/bin/bash
tom:x:1002:1002::/home/tom:/bin/bash
zard111:x:1003:1003::/home/zard111:/bin/bash
test3:x:1004:1004::/home/test3:/bin/bash
test4:x:1005:1005::/home/test4:/bin/bash
5.3 第三列大于等于1000的
{FS=":"}也是以冒号作为分隔符
[root@zard3 shelldemo]# awk 'BEGIN {FS=":"} ;{if($3>=1000){print}}' /etc/passwd
nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin
zard3:x:1000:1000:ZARD3:/home/zard3:/bin/bash
test1:x:1001:1001::/home/test1:/bin/bash
tom:x:1002:1002::/home/tom:/bin/bash
zard111:x:1003:1003::/home/zard111:/bin/bash
test3:x:1004:1004::/home/test3:/bin/bash
test4:x:1005:1005::/home/test4:/bin/bash
5.4 打印行号和每一行
[root@zard3 shelldemo]# awk -F ":" '{print NR,$0}' /etc/passwd
1 root:x:0:0:root:/root:/bin/bash
2 bin:x:1:1:bin:/bin:/sbin/nologin
3 daemon:x:2:2:daemon:/sbin:/sbin/nologin
4 adm:x:3:4:adm:/var/adm:/sbin/nologin
5 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
6 sync:x:5:0:sync:/sbin:/bin/sync
7 shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
8 halt:x:7:0:halt:/sbin:/sbin/halt
9 mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
10 operator:x:11:0:operator:/root:/sbin/nologin
11 games:x:12:100:games:/usr/games:/sbin/nologin
12 ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
13 nobody:x:99:99:Nobody:/:/sbin/nologin
14 systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
15 dbus:x:81:81:System message bus:/:/sbin/nologin
16 polkitd:x:999:998:User for polkitd:/:/sbin/nologin
17 libstoragemgmt:x:998:995:daemon account for libstoragemgmt:/var/run/lsm:/sbin/nologin
18 colord:x:997:994:User for colord:/var/lib/colord:/sbin/nologin
19 rpc:x:32:32:Rpcbind Daemon:/var/lib/rpcbind:/sbin/nologin
20 saned:x:996:993:SANE scanner daemon user:/usr/share/sane:/sbin/nologin
21 gluster:x:995:992:GlusterFS daemons:/run/gluster:/sbin/nologin
22 saslauth:x:994:76:Saslauthd user:/run/saslauthd:/sbin/nologin
23 abrt:x:173:173::/etc/abrt:/sbin/nologin
24 setroubleshoot:x:993:990::/var/lib/setroubleshoot:/sbin/nologin
25 rtkit:x:172:172:RealtimeKit:/proc:/sbin/nologin
26 pulse:x:171:171:PulseAudio System Daemon:/var/run/pulse:/sbin/nologin
27 radvd:x:75:75:radvd user:/:/sbin/nologin
28 chrony:x:992:987::/var/lib/chrony:/sbin/nologin
29 unbound:x:991:986:Unbound DNS resolver:/etc/unbound:/sbin/nologin
30 qemu:x:107:107:qemu user:/:/sbin/nologin
31 tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
32 sssd:x:990:984:User for sssd:/:/sbin/nologin
33 usbmuxd:x:113:113:usbmuxd user:/:/sbin/nologin
34 geoclue:x:989:983:User for geoclue:/var/lib/geoclue:/sbin/nologin
35 ntp:x:38:38::/etc/ntp:/sbin/nologin
36 gdm:x:42:42::/var/lib/gdm:/sbin/nologin
37 rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin
38 nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin
39 gnome-initial-setup:x:988:982::/run/gnome-initial-setup/:/sbin/nologin
40 sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
41 avahi:x:70:70:Avahi mDNS/DNS-SD Stack:/var/run/avahi-daemon:/sbin/nologin
42 postfix:x:89:89::/var/spool/postfix:/sbin/nologin
43 tcpdump:x:72:72::/:/sbin/nologin
44 zard3:x:1000:1000:ZARD3:/home/zard3:/bin/bash
45 test1:x:1001:1001::/home/test1:/bin/bash
46 tom:x:1002:1002::/home/tom:/bin/bash
47 mysql:x:27:27:MySQL Server:/var/lib/mysql:/bin/false
48 named:x:25:25:Named:/var/named:/sbin/nologin
49 apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin
50 zard111:x:1003:1003::/home/zard111:/bin/bash
51 test3:x:1004:1004::/home/test3:/bin/bash
52 test4:x:1005:1005::/home/test4:/bin/bash
5.5 打印行数和每一行的第一列
[root@zard3 shelldemo]# awk -F ":" '{print NR,$1}' /etc/passwd
1 root
2 bin
3 daemon
4 adm
5 lp
6 sync
7 shutdown
8 halt
9 mail
10 operator
11 games
12 ftp
13 nobody
14 systemd-network
15 dbus
16 polkitd
17 libstoragemgmt
18 colord
19 rpc
20 saned
21 gluster
22 saslauth
23 abrt
24 setroubleshoot
25 rtkit
26 pulse
27 radvd
28 chrony
29 unbound
30 qemu
31 tss
32 sssd
33 usbmuxd
34 geoclue
35 ntp
36 gdm
37 rpcuser
38 nfsnobody
39 gnome-initial-setup
40 sshd
41 avahi
42 postfix
43 tcpdump
44 zard3
45 test1
46 tom
47 mysql
48 named
49 apache
50 zard111
51 test3
52 test4
5.6 先打印行号,再打印每一行
[root@zard3 shelldemo]# sed -n '=;p' /etc/passwd
1
root:x:0:0:root:/root:/bin/bash
2
bin:x:1:1:bin:/bin:/sbin/nologin
3
daemon:x:2:2:daemon:/sbin:/sbin/nologin
4
adm:x:3:4:adm:/var/adm:/sbin/nologin
5
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
6
sync:x:5:0:sync:/sbin:/bin/sync
7
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
8
halt:x:7:0:halt:/sbin:/sbin/halt
9
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
10
operator:x:11:0:operator:/root:/sbin/nologin
11
games:x:12:100:games:/usr/games:/sbin/nologin
12
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
13
nobody:x:99:99:Nobody:/:/sbin/nologin
14
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
15
dbus:x:81:81:System message bus:/:/sbin/nologin
16
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
17
libstoragemgmt:x:998:995:daemon account for libstoragemgmt:/var/run/lsm:/sbin/nologin
18
colord:x:997:994:User for colord:/var/lib/colord:/sbin/nologin
19
rpc:x:32:32:Rpcbind Daemon:/var/lib/rpcbind:/sbin/nologin
20
saned:x:996:993:SANE scanner daemon user:/usr/share/sane:/sbin/nologin
21
gluster:x:995:992:GlusterFS daemons:/run/gluster:/sbin/nologin
22
saslauth:x:994:76:Saslauthd user:/run/saslauthd:/sbin/nologin
23
abrt:x:173:173::/etc/abrt:/sbin/nologin
24
setroubleshoot:x:993:990::/var/lib/setroubleshoot:/sbin/nologin
25
rtkit:x:172:172:RealtimeKit:/proc:/sbin/nologin
26
pulse:x:171:171:PulseAudio System Daemon:/var/run/pulse:/sbin/nologin
27
radvd:x:75:75:radvd user:/:/sbin/nologin
28
chrony:x:992:987::/var/lib/chrony:/sbin/nologin
29
unbound:x:991:986:Unbound DNS resolver:/etc/unbound:/sbin/nologin
30
qemu:x:107:107:qemu user:/:/sbin/nologin
31
tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
32
sssd:x:990:984:User for sssd:/:/sbin/nologin
33
usbmuxd:x:113:113:usbmuxd user:/:/sbin/nologin
34
geoclue:x:989:983:User for geoclue:/var/lib/geoclue:/sbin/nologin
35
ntp:x:38:38::/etc/ntp:/sbin/nologin
36
gdm:x:42:42::/var/lib/gdm:/sbin/nologin
37
rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin
38
nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin
39
gnome-initial-setup:x:988:982::/run/gnome-initial-setup/:/sbin/nologin
40
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
41
avahi:x:70:70:Avahi mDNS/DNS-SD Stack:/var/run/avahi-daemon:/sbin/nologin
42
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
43
tcpdump:x:72:72::/:/sbin/nologin
44
zard3:x:1000:1000:ZARD3:/home/zard3:/bin/bash
45
test1:x:1001:1001::/home/test1:/bin/bash
46
tom:x:1002:1002::/home/tom:/bin/bash
47
mysql:x:27:27:MySQL Server:/var/lib/mysql:/bin/false
48
named:x:25:25:Named:/var/named:/sbin/nologin
49
apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin
50
zard111:x:1003:1003::/home/zard111:/bin/bash
51
test3:x:1004:1004::/home/test3:/bin/bash
52
test4:x:1005:1005::/home/test4:/bin/bash
5.7 空间内存使用率
[root@zard3 shelldemo]# free -m |awk '/Mem:/{print int($3/($3+$4)*100)"%"}'
29%
5.8 统计在线用户数
[root@zard3 shelldemo]# awk 'BEGIN{n=0; while ("w"|getline)n++;{print n-2}}'
1
5.9 getline 隔一行打印一下
[root@zard3 shelldemo]# seq 10|awk '{getline; print $0}'
2
4
6
8
10
5.10 getline 隔一行打印一下
[root@zard3 shelldemo]# seq 10|awk '{print $0;getline}'
1
3
5
7
9
5.11 获取当前主机名
[root@zard3 shelldemo]# awk 'BEGIN {"hostname"|getline;{print $0}}'
zard3
总结
系统性地剖析了Web服务的核心架构与Nginx高性能实践,从HTTP/HTTPS协议的安全机制、请求响应流程,到Nginx的进程模型、编译优化与系统集成,最终延伸至Shell和Awk的自动化运维应用。通过理论结合实战,不仅掌握了构建稳定、高效服务的核心技术,更培养了解决实际问题的能力。未来,无论是应对高并发场景还是优化系统性能,这些知识都将成为您技术体系中不可或缺的基石。