在互联网架构中,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 步:

  1. 客户端 DNS 查询获取服务器 IP
  2. 建立 TCP 连接(三次握手)
  3. 发送 HTTP 请求报文
  4. 服务器解析并处理请求
  5. 服务器访问静态 / 动态资源
  6. 构建并返回 HTTP 响应报文
  7. 关闭连接(短连接)/ 保持连接(长连接)

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 工作模式:

  1. Prefork:多进程,稳定但内存占用高,并发弱
  2. Worker:多进程 + 多线程,内存占用低,并发提升
  3. Event:事件驱动,解决长连接线程浪费,高并发最优

2.2 Nginx:高性能轻量级王者

  • 诞生:2004 年俄罗斯开发者 Igor Sysoev 发布,2019 年被 F5 收购
  • 核心优势:事件驱动、异步非阻塞、多进程模型,单机可支撑数万并发
  • 核心能力:静态资源服务、反向代理、负载均衡、邮件代理、TCP/UDP 代理

2.3 核心对比

维度 Apache Nginx
并发能力 极高
内存占用
静态资源处理 一般 极快
配置复杂度 较高 简洁
适用场景 中小流量、动态请求 高并发、静态资源、反向代理


三、Nginx 核心架构:高性能的秘密

3.1 进程模型:Master+Worker

Nginx 采用多进程架构,分为:

  1. Master 主进程:加载配置、管理 Worker 进程、接收信号、平滑升级
  2. Worker 工作进程:实际处理网络请求,数量建议设为 CPU 核心数,避免进程竞争
  3. 工作机制:Worker 进程竞争接收连接,单线程处理多请求,异步非阻塞 I/O

3.2 核心架构优势

  • 事件驱动(epoll/kqueue):无阻塞处理海量连接
  • 资源占用低:无需为每个连接创建进程 / 线程
  • 平滑升级:不中断服务更新配置 / 版本
  • 模块化设计:核心模块 + 标准 HTTP 模块 + 第三方模块,扩展性强


四、Nginx 三种安装方式:从入门到定制

以 CentOS/RHEL 9 为例,介绍本地仓库、官方源、源码编译三种安装方式。

4.1 本地仓库安装(最简)

# 安装
dnf install nginx -y
# 卸载
dnf remove nginx -y

4.2 官方源安装(最新稳定版)

  1. 配置 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
  1. 安装稳定版

dnf install nginx -y
dnf install httpd -y

dnf install yum-utils -y

4.3 源码编译安装(定制功能)

  1. 安装依赖

dnf install gcc pcre-devel zlib-devel make -y
  1. 拉取源码并配置

git clone https://github.com/nginx/nginx.git
cd nginx
./configure
  1. 编译安装

make && make install
  1. 启动 / 停止

# 启动
/usr/local/nginx/sbin/nginx
# 停止
/usr/local/nginx/sbin/nginx -s stop
# 重载配置
/usr/local/nginx/sbin/nginx -s reload


五、Nginx 配置文件详解:读懂核心配置

5.1 配置文件结构

Nginx 配置采用层级指令块,核心分为 4 部分:

  1. main(全局块):全局配置,如用户、进程数、日志路径
  2. events 块:连接处理配置,如最大连接数
  3. http 块:HTTP 协议配置,如 MIME 类型、日志格式
  4. server 块:虚拟主机配置,一个 http 可包含多个 server
  5. 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 基于域名的虚拟主机

  1. 配置 hosts 映射

echo "192.168.197.130 www.example.com www.example.net" >> /etc/hosts
  1. 创建站点配置

# /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;
}
  1. 创建站点目录并重启

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 的虚拟主机

  1. 绑定多 IP

nmcli connection modify ens160 +ipv4.addresses 192.168.197.131/24
nmcli connection up ens160
  1. 配置虚拟主机

server {
    server_name 192.168.197.131;
    root /var/www/131/;
}

6.4 目录账号密码验证

  1. 安装工具并创建用户

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
  1. 配置认证

server {
    server_name www.account.com;
    location /admin {
        auth_basic "login password";
        auth_basic_user_file /etc/nginx/conf.d/password;
    }
}

6.5 HTTPS 加密配置

  1. 生成自签名证书

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/
  1. 配置 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;
}
  1. 测试访问

curl https://www.https.com -k


七、总结

本文从Web 基础→HTTP 协议→Web 服务器对比→Nginx 架构→安装→配置→实战,完整覆盖了 Nginx 入门到实战的核心知识点。

Nginx 的核心价值在于高并发、低消耗、易扩展,无论是静态资源托管、反向代理、负载均衡,还是安全认证、HTTPS 部署,都能轻松胜任。掌握 Nginx,是后端开发、运维工程师的必备技能。

后续可深入学习 Nginx负载均衡策略、缓存配置、限流熔断、Lua 扩展等高级特性,适配更复杂的生产场景。

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐