web服务器——nginx
本文从Web 基础→HTTP 协议→Web 服务器对比→Nginx 架构→安装→配置→实战,完整覆盖了 Nginx 入门到实战的核心知识点。Nginx 的核心价值在于高并发、低消耗、易扩展,无论是静态资源托管、反向代理、负载均衡,还是安全认证、HTTPS 部署,都能轻松胜任。掌握 Nginx,是后端开发、运维工程师的必备技能。后续可深入学习 Nginx负载均衡策略、缓存配置、限流熔断、Lua 扩展
在互联网架构中,Web 服务是承接用户请求、分发资源的核心入口,而Nginx凭借高性能、高并发、低资源消耗的特性,成为当下最主流的 Web 服务器 / 反向代理工具。本文将从 Web 基础原理讲起,深入 HTTP 协议、主流 Web 服务器对比,再到 Nginx 架构、安装、配置与实战,带你一站式掌握 Web 服务核心技能。
一、Web 服务与 HTTP 协议:互联网通信的基石
1.1 互联网发展简史
- 因特网前身:1969 年美国军方ARPAnet,初衷是保障网络部分损毁后仍可通信。
- 商业化转型:NSF 网接入后,Internet 从科研走向商业,最终普及全球。
- 中国接入节点:1994 年 4 月 20 日,中国通过 64K 专线全功能接入国际互联网,正式开启互联网时代。
1.2 核心概念厘清
| 概念 | 定义 | 核心特点 |
|---|---|---|
| 互联网 | 网络的集合,所有网络的母集 | 范围最广 |
| 因特网 | 全球最大的互联网 | 日常使用的网络主体 |
| 万维网 (WWW) | 基于超链接的分布式信息系统 | B/S 架构,依赖 HTTP 协议 |
| URL | 统一资源定位符 | 唯一标识网络资源位置 |
| HTTP | 应用层超文本传输协议 | 基于 TCP,默认 80 端口 |
| HTTPS | HTTP+SSL/TLS | 加密传输,默认 443 端口 |
1.3 HTTP 协议全解析
1.3.1 HTTP 通信流程
一次完整 HTTP 请求分为 7 步:
- 客户端 DNS 查询获取服务器 IP
- 建立 TCP 连接(三次握手)
- 发送 HTTP 请求报文
- 服务器解析并处理请求
- 服务器访问静态 / 动态资源
- 构建并返回 HTTP 响应报文
- 关闭连接(短连接)/ 保持连接(长连接)
1.3.2 HTTP 版本演进
| 版本 | 发布时间 | 核心特性 | 缺陷 |
|---|---|---|---|
| HTTP/0.9 | 1991 | 仅支持 GET,返回纯 HTML | 功能极简 |
| HTTP/1.0 | 1996 | 支持 POST/HEAD、MIME、缓存 | 单连接单请求,开销大 |
| HTTP/1.1 | 1997 | 持久连接、管道机制、新增请求方法 | 队头阻塞 |
| HTTP/2.0 | 2015 | 二进制分帧、多路复用、头部压缩、服务端推送 | 兼容 1.1,彻底解决队头阻塞 |
1.3.3 HTTP 报文结构
- 请求报文:请求行(方法 + URL + 版本)+ 请求头 + 空行 + 请求体
GET / HTTP/1.1
Host: www.baidu.com
User-Agent: curl/7.68.0
Accept: */*
- 响应报文:状态行(版本 + 状态码 + 描述)+ 响应头 + 空行 + 响应体
HTTP/1.1 200 OK
Content-Type: text/html; charset=UTF-8
Server: Tengine
1.3.4 常见 HTTP 状态码
- 1xx:请求接收中(100 Continue)
- 2xx:请求成功(200 OK)
- 3xx:重定向(301 永久重定向、302 临时重定向、304 未修改)
- 4xx:客户端错误(400 错误请求、403 禁止访问、404 资源不存在)
- 5xx:服务端错误(500 服务器内部错误、502 网关错误、503 服务不可用)
二、主流 Web 服务器对比:Apache vs Nginx
2.1 Apache:经典稳定的老牌 Web 服务器
Apache 有三种 MPM 工作模式:
- Prefork:多进程,稳定但内存占用高,并发弱
- Worker:多进程 + 多线程,内存占用低,并发提升
- Event:事件驱动,解决长连接线程浪费,高并发最优
2.2 Nginx:高性能轻量级王者
- 诞生:2004 年俄罗斯开发者 Igor Sysoev 发布,2019 年被 F5 收购
- 核心优势:事件驱动、异步非阻塞、多进程模型,单机可支撑数万并发
- 核心能力:静态资源服务、反向代理、负载均衡、邮件代理、TCP/UDP 代理
2.3 核心对比
| 维度 | Apache | Nginx |
|---|---|---|
| 并发能力 | 低 | 极高 |
| 内存占用 | 高 | 低 |
| 静态资源处理 | 一般 | 极快 |
| 配置复杂度 | 较高 | 简洁 |
| 适用场景 | 中小流量、动态请求 | 高并发、静态资源、反向代理 |
三、Nginx 核心架构:高性能的秘密
3.1 进程模型:Master+Worker
Nginx 采用多进程架构,分为:
- Master 主进程:加载配置、管理 Worker 进程、接收信号、平滑升级
- Worker 工作进程:实际处理网络请求,数量建议设为 CPU 核心数,避免进程竞争
- 工作机制:Worker 进程竞争接收连接,单线程处理多请求,异步非阻塞 I/O
3.2 核心架构优势
- 事件驱动(epoll/kqueue):无阻塞处理海量连接
- 资源占用低:无需为每个连接创建进程 / 线程
- 平滑升级:不中断服务更新配置 / 版本
- 模块化设计:核心模块 + 标准 HTTP 模块 + 第三方模块,扩展性强
四、Nginx 三种安装方式:从入门到定制
以 CentOS/RHEL 9 为例,介绍本地仓库、官方源、源码编译三种安装方式。
4.1 本地仓库安装(最简)
# 安装
dnf install nginx -y
# 卸载
dnf remove nginx -y
4.2 官方源安装(最新稳定版)
-
配置 Nginx 官方仓库nginx 文档
vim /etc/yum.repos.d/nginx.repo
写入配置:
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
[nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
http写的是:
vim /etc/yum.repos.d/rpm.repo
[baseos]
name=baseos
baseurl=/mnt/BaseOS
gpgcheck=0
[appstream]
name=appstrhahahaha
baseurl=/mnt/AppStream
gpgcheck=0
-
安装稳定版
dnf install nginx -y
dnf install httpd -y
dnf install yum-utils -y
4.3 源码编译安装(定制功能)
-
安装依赖
dnf install gcc pcre-devel zlib-devel make -y
-
拉取源码并配置
git clone https://github.com/nginx/nginx.git
cd nginx
./configure
-
编译安装
make && make install
-
启动 / 停止
# 启动
/usr/local/nginx/sbin/nginx
# 停止
/usr/local/nginx/sbin/nginx -s stop
# 重载配置
/usr/local/nginx/sbin/nginx -s reload
五、Nginx 配置文件详解:读懂核心配置
5.1 配置文件结构
Nginx 配置采用层级指令块,核心分为 4 部分:
- main(全局块):全局配置,如用户、进程数、日志路径
- events 块:连接处理配置,如最大连接数
- http 块:HTTP 协议配置,如 MIME 类型、日志格式
- server 块:虚拟主机配置,一个 http 可包含多个 server
- location 块:请求路由匹配,处理特定 URL 请求
5.2 核心配置示例
# 全局配置
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;
# 事件配置
events {
worker_connections 1024;
}
# HTTP配置
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
# 虚拟主机
server {
listen 80;
server_name localhost;
root /usr/share/nginx/html;
index index.html;
# 错误页面
error_page 404 /404.html;
error_page 500 502 503 504 /50x.html;
}
}
六、Nginx 实战配置:6 大生产场景
6.1 基于域名的虚拟主机
-
配置 hosts 映射
echo "192.168.197.130 www.example.com www.example.net" >> /etc/hosts
-
创建站点配置
# /etc/nginx/conf.d/com.conf
server {
server_name www.example.com;
root /var/www/example.com/;
access_log /var/log/nginx/example.com/access.log;
error_log /var/log/nginx/example.com/error.log;
}
-
创建站点目录并重启
mkdir -p /var/www/example.com
echo "example.com" > /var/www/example.com/index.html
systemctl restart nginx
6.2 基于端口的虚拟主机
# /etc/nginx/conf.d/9091.conf
server {
listen 9091;
server_name _;
root /var/www/9091/;
}
访问:http://192.168.197.130:9091
6.3 基于 IP 的虚拟主机
-
绑定多 IP
nmcli connection modify ens160 +ipv4.addresses 192.168.197.131/24
nmcli connection up ens160
-
配置虚拟主机
server {
server_name 192.168.197.131;
root /var/www/131/;
}
6.4 目录账号密码验证
-
安装工具并创建用户
dnf install httpd-tools -y
htpasswd -cb /etc/nginx/conf.d/password zhangsan redhat
chmod 600 /etc/nginx/conf.d/password
chown nginx /etc/nginx/conf.d/password
-
配置认证
server {
server_name www.account.com;
location /admin {
auth_basic "login password";
auth_basic_user_file /etc/nginx/conf.d/password;
}
}
6.5 HTTPS 加密配置
-
生成自签名证书
cd /etc/pki/tls/certs
openssl genrsa > https.com.key
openssl req -new -key https.com.key -x509 -days 100 -out https.com.crt
mv https.com.key ../private/
-
配置 HTTPS
server {
listen 443 ssl;
server_name www.https.com;
root /var/www/https/;
ssl_certificate /etc/pki/tls/certs/https.com.crt;
ssl_certificate_key /etc/pki/tls/private/https.com.key;
}
-
测试访问
curl https://www.https.com -k
七、总结
本文从Web 基础→HTTP 协议→Web 服务器对比→Nginx 架构→安装→配置→实战,完整覆盖了 Nginx 入门到实战的核心知识点。
Nginx 的核心价值在于高并发、低消耗、易扩展,无论是静态资源托管、反向代理、负载均衡,还是安全认证、HTTPS 部署,都能轻松胜任。掌握 Nginx,是后端开发、运维工程师的必备技能。
后续可深入学习 Nginx负载均衡策略、缓存配置、限流熔断、Lua 扩展等高级特性,适配更复杂的生产场景。
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐
所有评论(0)