Nginx 技术详细讲解

Nginx 技术详解

目录


1. Nginx 简介

1.1 什么是 Nginx

Nginx(发音为"engine x")是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP代理服务器。Nginx由俄罗斯的程序设计师Igor Sysoev所开发,最初是为俄罗斯访问量第二的Rambler.ru站点开发的。

1.2 核心特性

1.2.1 高性能
  • 事件驱动架构:基于epoll/kqueue的异步非阻塞IO
  • 内存效率:低内存占用,高并发处理能力
  • 多进程模型:Master-Worker进程模型
1.2.2 反向代理
  • 负载均衡:支持多种负载均衡算法
  • 健康检查:自动检测后端服务状态
  • 故障转移:后端服务故障时自动切换
1.2.3 静态文件服务
  • 高效缓存:智能的静态文件缓存机制
  • 压缩传输:gzip压缩减少传输量
  • 断点续传:支持HTTP Range请求
1.2.4 扩展性
  • 模块化设计:支持动态模块加载
  • Lua脚本:支持Lua脚本扩展
  • 第三方模块:丰富的第三方模块生态

1.3 架构设计

Nginx架构
Master进程
Worker进程池
事件驱动引擎
模块系统
客户端请求
Nginx Master进程
Worker进程1
Worker进程2
Worker进程3
Worker进程N
事件循环
事件循环
事件循环
事件循环
后端服务

1.4 版本演进

1.4.1 Nginx 1.x
  • 基础HTTP服务器功能
  • 反向代理和负载均衡
  • 静态文件服务
1.4.2 Nginx Plus
  • 商业版本
  • 增强的负载均衡功能
  • 实时监控和诊断工具
1.4.3 最新版本特性
  • HTTP/2支持
  • 动态模块加载
  • 增强的安全特性

2. 核心流程

2.1 请求处理流程

2.1.1 请求处理流程图
客户端 Master进程 Worker进程 后端服务 1. 建立连接 2. 分配Worker进程 3. 接收请求 4. 解析HTTP请求 5. 匹配Location规则 6. 转发请求 7. 返回响应 8. 处理响应 9. 返回响应 10. 关闭连接 客户端 Master进程 Worker进程 后端服务
2.1.2 实现原理

Master进程职责:

  • 读取和验证配置文件
  • 管理Worker进程
  • 监听端口和信号处理

Worker进程职责:

  • 处理客户端连接
  • 执行请求处理逻辑
  • 与后端服务通信

2.2 负载均衡流程

2.2.1 负载均衡流程图
客户端 Nginx 负载均衡器 服务1 服务2 服务3 1. 发送请求 2. 负载均衡选择 3. 选择后端服务 4. 转发到服务1 5. 返回响应 6. 返回响应 7. 返回响应 下次请求可能选择S2或S3 客户端 Nginx 负载均衡器 服务1 服务2 服务3
2.2.2 负载均衡算法

轮询(Round Robin):

upstream backend {
    server 192.168.1.10:8080;
    server 192.168.1.11:8080;
    server 192.168.1.12:8080;
}

加权轮询(Weighted Round Robin):

upstream backend {
    server 192.168.1.10:8080 weight=3;
    server 192.168.1.11:8080 weight=2;
    server 192.168.1.12:8080 weight=1;
}

IP哈希(IP Hash):

upstream backend {
    ip_hash;
    server 192.168.1.10:8080;
    server 192.168.1.11:8080;
    server 192.168.1.12:8080;
}

最少连接(Least Connections):

upstream backend {
    least_conn;
    server 192.168.1.10:8080;
    server 192.168.1.11:8080;
    server 192.168.1.12:8080;
}

2.3 反向代理流程

2.3.1 反向代理流程图
客户端 Nginx 代理模块 后端服务 1. 发送请求 2. 代理处理 3. 修改请求头 4. 转发请求 5. 返回响应 6. 处理响应头 7. 返回响应 8. 返回响应 客户端 Nginx 代理模块 后端服务
2.3.2 反向代理配置
server {
    listen 80;
    server_name example.com;
  
    location /api/ {
        proxy_pass http://backend;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

2.4 静态文件服务流程

2.4.1 静态文件服务流程图
客户端 Nginx 文件系统 缓存 1. 请求静态文件 2. 检查缓存 3. 缓存未命中 4. 读取文件 5. 返回文件内容 6. 压缩文件 7. 更新缓存 8. 返回文件 客户端 Nginx 文件系统 缓存
2.4.2 静态文件配置
server {
    listen 80;
    server_name static.example.com;
    root /var/www/static;
  
    location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
        expires 1y;
        add_header Cache-Control "public, immutable";
        gzip on;
        gzip_types text/css application/javascript;
    }
}

3. 重难点分析

3.1 性能优化

3.1.1 问题分析

Nginx作为高并发服务器,性能优化是核心关注点。

3.1.2 优化策略
性能优化
Worker进程优化
连接优化
缓存优化
压缩优化
Worker进程数
Worker连接数
CPU亲和性
Keep-Alive
连接池
超时设置
静态文件缓存
代理缓存
内存缓存
Gzip压缩
Brotli压缩
压缩级别

实现配置:

# 主配置文件优化
worker_processes auto;
worker_cpu_affinity auto;
worker_rlimit_nofile 65535;

events {
    worker_connections 1024;
    use epoll;
    multi_accept on;
}

http {
    # 连接优化
    keepalive_timeout 65;
    keepalive_requests 100;
  
    # 缓存优化
    open_file_cache max=1000 inactive=20s;
    open_file_cache_valid 30s;
    open_file_cache_min_uses 2;
    open_file_cache_errors on;
  
    # 压缩优化
    gzip on;
    gzip_vary on;
    gzip_min_length 1024;
    gzip_comp_level 6;
    gzip_types text/plain text/css application/json application/javascript text/xml application/xml;
}

3.2 高可用设计

3.2.1 问题分析

单点故障会导致整个服务不可用,需要设计高可用架构。

3.2.2 解决方案
高可用设计
多实例部署
健康检查
故障转移
数据同步
负载均衡器
Nginx实例1
Nginx实例2
Nginx实例3
后端服务集群

实现配置:

# 健康检查配置
upstream backend {
    server 192.168.1.10:8080 max_fails=3 fail_timeout=30s;
    server 192.168.1.11:8080 max_fails=3 fail_timeout=30s;
    server 192.168.1.12:8080 max_fails=3 fail_timeout=30s backup;
}

# 状态监控
server {
    listen 8080;
    server_name localhost;
  
    location /nginx_status {
        stub_status on;
        access_log off;
        allow 127.0.0.1;
        deny all;
    }
}

3.3 安全防护

3.3.1 问题分析

Nginx作为入口服务器,面临各种安全威胁。

3.3.2 防护策略
安全防护
访问控制
请求限制
攻击防护
数据加密
IP白名单
用户认证
地理位置限制
请求频率限制
连接数限制
请求大小限制
SQL注入防护
XSS防护
CSRF防护
HTTPS
证书管理
加密算法

实现配置:

# 访问控制
server {
    listen 80;
    server_name example.com;
  
    # IP白名单
    allow 192.168.1.0/24;
    allow 10.0.0.0/8;
    deny all;
  
    # 请求限制
    limit_req_zone $binary_remote_addr zone=api:10m rate=10r/s;
    limit_conn_zone $binary_remote_addr zone=conn:10m;
  
    location /api/ {
        limit_req zone=api burst=20 nodelay;
        limit_conn conn 10;
      
        # 安全头
        add_header X-Frame-Options DENY;
        add_header X-Content-Type-Options nosniff;
        add_header X-XSS-Protection "1; mode=block";
      
        proxy_pass http://backend;
    }
}

# HTTPS配置
server {
    listen 443 ssl http2;
    server_name example.com;
  
    ssl_certificate /path/to/cert.pem;
    ssl_certificate_key /path/to/key.pem;
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384;
    ssl_prefer_server_ciphers off;
}

3.4 配置管理

3.4.1 问题分析

Nginx配置复杂,需要有效的配置管理策略。

3.4.2 管理策略
配置管理
模块化配置
环境分离
版本控制
自动化部署
主配置文件
虚拟主机配置
模块配置
开发环境
测试环境
生产环境
Git版本控制
配置模板
配置验证
CI/CD集成
配置热重载
回滚机制

实现方案:

# 配置目录结构
/etc/nginx/
├── nginx.conf              # 主配置文件
├── conf.d/                 # 虚拟主机配置
│   ├── default.conf
│   ├── api.conf
│   └── static.conf
├── modules/                # 模块配置
│   ├── security.conf
│   └── monitoring.conf
└── templates/              # 配置模板
    ├── server.template
    └── upstream.template

# 配置验证脚本
#!/bin/bash
nginx -t && echo "Configuration is valid" || echo "Configuration error"

# 配置热重载
nginx -s reload

4. 高频面试点

4.1 基础概念类

4.1.1 Nginx是什么?有什么特点?

答案要点:

  • 高性能HTTP服务器
  • 反向代理和负载均衡
  • 事件驱动架构
  • 低内存占用

详细回答:
Nginx是一个高性能的HTTP和反向代理服务器,主要特点包括:

  1. 高性能:基于事件驱动的异步非阻塞IO模型
  2. 低内存占用:相比Apache等服务器,内存占用更少
  3. 高并发:能够处理大量并发连接
  4. 反向代理:支持负载均衡和故障转移
  5. 静态文件服务:高效处理静态文件请求
  6. 模块化:支持动态模块加载和扩展
4.1.2 Nginx与Apache的区别?

答案要点:

  • 架构模型不同
  • 性能表现不同
  • 资源占用不同
  • 配置方式不同

详细回答:
Nginx与Apache的主要区别:

  1. 架构模型:Nginx采用事件驱动模型,Apache采用进程/线程模型
  2. 性能:Nginx在高并发场景下性能更好
  3. 内存占用:Nginx内存占用更少
  4. 配置:Nginx配置更简洁,Apache配置更灵活
  5. 模块:Apache模块更丰富,Nginx模块更轻量

4.2 技术实现类

4.2.1 Nginx的Master-Worker进程模型是什么?

答案要点:

  • Master进程职责
  • Worker进程职责
  • 进程间通信
  • 优势分析

详细回答:
Nginx的Master-Worker进程模型:

  1. Master进程

    • 读取和验证配置文件
    • 管理Worker进程
    • 监听端口和信号处理
    • 平滑重启和升级
  2. Worker进程

    • 处理客户端连接
    • 执行请求处理逻辑
    • 与后端服务通信
    • 独立运行,互不影响
  3. 优势

    • 进程隔离,提高稳定性
    • 充分利用多核CPU
    • 支持平滑重启
4.2.2 Nginx的事件驱动模型是如何工作的?

答案要点:

  • 异步非阻塞IO
  • 事件循环机制
  • epoll/kqueue
  • 高并发处理

详细回答:
Nginx的事件驱动模型:

  1. 异步非阻塞IO:不等待IO操作完成,继续处理其他请求
  2. 事件循环:持续监听文件描述符上的事件
  3. epoll/kqueue:高效的事件通知机制
  4. 高并发:单进程可处理大量并发连接

4.3 性能优化类

4.3.1 如何优化Nginx的性能?

答案要点:

  • Worker进程优化
  • 连接优化
  • 缓存优化
  • 压缩优化

详细回答:
Nginx性能优化方法:

  1. Worker进程优化

    • 设置合适的worker_processes数量
    • 配置worker_connections
    • 使用CPU亲和性
  2. 连接优化

    • 启用keepalive
    • 调整超时时间
    • 优化连接池
  3. 缓存优化

    • 启用文件缓存
    • 配置代理缓存
    • 使用内存缓存
  4. 压缩优化

    • 启用gzip压缩
    • 选择合适的压缩级别
    • 配置压缩类型
4.3.2 Nginx的负载均衡算法有哪些?

答案要点:

  • 轮询算法
  • 加权轮询
  • IP哈希
  • 最少连接

详细回答:
Nginx的负载均衡算法:

  1. 轮询(Round Robin):按顺序分配请求
  2. 加权轮询(Weighted Round Robin):根据权重分配请求
  3. IP哈希(IP Hash):根据客户端IP分配请求
  4. 最少连接(Least Connections):分配给连接数最少的服务器
  5. URL哈希(URL Hash):根据URL分配请求

4.4 架构设计类

4.4.1 如何设计Nginx的高可用架构?

答案要点:

  • 多实例部署
  • 负载均衡
  • 健康检查
  • 故障转移

详细回答:
Nginx高可用架构设计:

  1. 多实例部署:部署多个Nginx实例
  2. 负载均衡:使用负载均衡器分发请求
  3. 健康检查:定期检查Nginx状态
  4. 故障转移:自动切换故障实例
  5. 数据同步:配置文件同步
4.4.2 Nginx如何与微服务架构集成?

答案要点:

  • 服务发现
  • 负载均衡
  • 路由配置
  • 监控集成

详细回答:
Nginx与微服务架构集成:

  1. 服务发现:与Consul、Eureka等注册中心集成
  2. 负载均衡:为微服务提供负载均衡
  3. 路由配置:根据服务名进行路由
  4. 监控集成:集成监控系统
  5. 配置管理:动态更新配置

5. 实际使用案例

5.1 项目架构

5.1.1 整体架构
微服务集群
Nginx集群
用户服务
订单服务
支付服务
通知服务
Nginx实例1
Nginx实例2
Nginx实例3
客户端
CDN
Nginx集群
API网关
微服务集群
5.1.2 技术栈
  • Web服务器:Nginx
  • API网关:Spring Cloud Gateway
  • 微服务:Spring Boot
  • 注册中心:Eureka
  • 数据库:MySQL、Redis
  • 监控:Prometheus + Grafana

5.2 配置实现

5.2.1 主配置文件
# nginx.conf
user nginx;
worker_processes auto;
worker_cpu_affinity auto;
worker_rlimit_nofile 65535;

error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;

events {
    worker_connections 1024;
    use epoll;
    multi_accept on;
}

http {
    include /etc/nginx/mime.types;
    default_type application/octet-stream;
  
    # 日志格式
    log_format main '$remote_addr - $remote_user [$time_local] "$request" '
                    '$status $body_bytes_sent "$http_referer" '
                    '"$http_user_agent" "$http_x_forwarded_for"';
  
    access_log /var/log/nginx/access.log main;
  
    # 基础配置
    sendfile on;
    tcp_nopush on;
    tcp_nodelay on;
    keepalive_timeout 65;
    types_hash_max_size 2048;
  
    # 压缩配置
    gzip on;
    gzip_vary on;
    gzip_min_length 1024;
    gzip_comp_level 6;
    gzip_types text/plain text/css application/json application/javascript text/xml application/xml;
  
    # 包含其他配置文件
    include /etc/nginx/conf.d/*.conf;
}
5.2.2 虚拟主机配置
# conf.d/api.conf
upstream api_backend {
    least_conn;
    server 192.168.1.10:8080 max_fails=3 fail_timeout=30s;
    server 192.168.1.11:8080 max_fails=3 fail_timeout=30s;
    server 192.168.1.12:8080 max_fails=3 fail_timeout=30s backup;
}

server {
    listen 80;
    server_name api.example.com;
  
    # 安全头
    add_header X-Frame-Options DENY;
    add_header X-Content-Type-Options nosniff;
    add_header X-XSS-Protection "1; mode=block";
  
    # 请求限制
    limit_req_zone $binary_remote_addr zone=api:10m rate=10r/s;
    limit_conn_zone $binary_remote_addr zone=conn:10m;
  
    location /api/ {
        limit_req zone=api burst=20 nodelay;
        limit_conn conn 10;
      
        proxy_pass http://api_backend;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
      
        # 超时设置
        proxy_connect_timeout 5s;
        proxy_send_timeout 10s;
        proxy_read_timeout 10s;
    }
  
    # 健康检查
    location /health {
        access_log off;
        return 200 "healthy\n";
        add_header Content-Type text/plain;
    }
}
5.2.3 静态文件配置
# conf.d/static.conf
server {
    listen 80;
    server_name static.example.com;
    root /var/www/static;
  
    # 静态文件缓存
    location ~* \.(jpg|jpeg|png|gif|ico|css|js|woff|woff2|ttf|eot|svg)$ {
        expires 1y;
        add_header Cache-Control "public, immutable";
        add_header Vary Accept-Encoding;
      
        # 压缩
        gzip_static on;
    }
  
    # HTML文件缓存
    location ~* \.html$ {
        expires 1h;
        add_header Cache-Control "public";
    }
  
    # 禁止访问隐藏文件
    location ~ /\. {
        deny all;
    }
}

5.3 性能优化

5.3.1 缓存优化
# 代理缓存配置
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=api_cache:10m max_size=1g inactive=60m;

server {
    location /api/ {
        proxy_cache api_cache;
        proxy_cache_valid 200 302 10m;
        proxy_cache_valid 404 1m;
        proxy_cache_use_stale error timeout updating http_500 http_502 http_503 http_504;
        proxy_cache_lock on;
      
        proxy_pass http://api_backend;
    }
}
5.3.2 连接优化
# 连接池配置
upstream api_backend {
    server 192.168.1.10:8080;
    server 192.168.1.11:8080;
  
    # 连接池
    keepalive 32;
    keepalive_requests 100;
    keepalive_timeout 60s;
}

server {
    location /api/ {
        proxy_pass http://api_backend;
        proxy_http_version 1.1;
        proxy_set_header Connection "";
    }
}

6. 部署运维

6.1 环境准备

6.1.1 系统要求

硬件要求:

  • CPU:2核以上
  • 内存:2GB以上
  • 磁盘:SSD硬盘,至少20GB可用空间
  • 网络:千兆网卡,低延迟网络

软件要求:

  • 操作系统:Linux(推荐CentOS 7+、Ubuntu 18+)
  • 依赖库:PCRE、zlib、OpenSSL
  • 编译工具:GCC、Make
6.1.2 环境配置
# 安装依赖
yum install -y gcc gcc-c++ make zlib-devel pcre-devel openssl-devel

# 创建用户
useradd -r -s /sbin/nologin nginx

# 创建目录
mkdir -p /var/log/nginx
mkdir -p /var/cache/nginx
mkdir -p /etc/nginx/conf.d

6.2 服务部署

6.2.1 源码编译安装
# 下载源码
wget http://nginx.org/download/nginx-1.20.2.tar.gz
tar -xzf nginx-1.20.2.tar.gz
cd nginx-1.20.2

# 编译配置
./configure \
    --prefix=/etc/nginx \
    --sbin-path=/usr/sbin/nginx \
    --conf-path=/etc/nginx/nginx.conf \
    --error-log-path=/var/log/nginx/error.log \
    --http-log-path=/var/log/nginx/access.log \
    --pid-path=/var/run/nginx.pid \
    --lock-path=/var/run/nginx.lock \
    --http-client-body-temp-path=/var/cache/nginx/client_temp \
    --http-proxy-temp-path=/var/cache/nginx/proxy_temp \
    --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp \
    --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp \
    --http-scgi-temp-path=/var/cache/nginx/scgi_temp \
    --user=nginx \
    --group=nginx \
    --with-http_ssl_module \
    --with-http_realip_module \
    --with-http_addition_module \
    --with-http_sub_module \
    --with-http_dav_module \
    --with-http_flv_module \
    --with-http_mp4_module \
    --with-http_gunzip_module \
    --with-http_gzip_static_module \
    --with-http_random_index_module \
    --with-http_secure_link_module \
    --with-http_stub_status_module \
    --with-http_auth_request_module \
    --with-threads \
    --with-stream \
    --with-stream_ssl_module \
    --with-http_slice_module

# 编译安装
make && make install
6.2.2 包管理器安装
# CentOS/RHEL
yum install -y nginx

# Ubuntu/Debian
apt-get update
apt-get install -y nginx

# 启动服务
systemctl start nginx
systemctl enable nginx
6.2.3 Docker部署
# Dockerfile
FROM nginx:alpine

# 复制配置文件
COPY nginx.conf /etc/nginx/nginx.conf
COPY conf.d/ /etc/nginx/conf.d/

# 创建必要目录
RUN mkdir -p /var/cache/nginx

# 暴露端口
EXPOSE 80 443

# 启动命令
CMD ["nginx", "-g", "daemon off;"]
# docker-compose.yml
version: '3.8'

services:
  nginx:
    build: .
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./conf.d:/etc/nginx/conf.d
      - ./logs:/var/log/nginx
      - ./cache:/var/cache/nginx
    networks:
      - frontend

networks:
  frontend:
    driver: bridge

6.3 监控运维

6.3.1 监控配置
# 状态监控
server {
    listen 8080;
    server_name localhost;
  
    location /nginx_status {
        stub_status on;
        access_log off;
        allow 127.0.0.1;
        allow 192.168.1.0/24;
        deny all;
    }
  
    location /metrics {
        access_log off;
        allow 127.0.0.1;
        allow 192.168.1.0/24;
        deny all;
    }
}
6.3.2 监控脚本
#!/bin/bash
# nginx-monitor.sh

# 检查Nginx状态
check_nginx_status() {
    if systemctl is-active --quiet nginx; then
        echo "Nginx is running"
        return 0
    else
        echo "Nginx is not running"
        return 1
    fi
}

# 检查配置
check_nginx_config() {
    if nginx -t; then
        echo "Nginx configuration is valid"
        return 0
    else
        echo "Nginx configuration error"
        return 1
    fi
}

# 检查连接数
check_connections() {
    local connections=$(curl -s http://localhost:8080/nginx_status | grep "Active connections" | awk '{print $3}')
    echo "Active connections: $connections"
  
    if [ "$connections" -gt 1000 ]; then
        echo "WARNING: High connection count"
    fi
}

# 检查错误日志
check_error_log() {
    local error_count=$(tail -n 100 /var/log/nginx/error.log | grep -c "error")
    echo "Recent errors: $error_count"
  
    if [ "$error_count" -gt 10 ]; then
        echo "WARNING: High error count"
    fi
}

# 主函数
main() {
    check_nginx_status
    check_nginx_config
    check_connections
    check_error_log
}

main "$@"
6.3.3 日志分析
#!/bin/bash
# nginx-log-analysis.sh

# 分析访问日志
analyze_access_log() {
    local log_file="/var/log/nginx/access.log"
  
    echo "=== Top 10 IPs ==="
    awk '{print $1}' $log_file | sort | uniq -c | sort -nr | head -10
  
    echo "=== Top 10 URLs ==="
    awk '{print $7}' $log_file | sort | uniq -c | sort -nr | head -10
  
    echo "=== Status Codes ==="
    awk '{print $9}' $log_file | sort | uniq -c | sort -nr
  
    echo "=== Response Time Analysis ==="
    awk '{print $NF}' $log_file | sort -n | tail -10
}

# 分析错误日志
analyze_error_log() {
    local log_file="/var/log/nginx/error.log"
  
    echo "=== Recent Errors ==="
    tail -n 50 $log_file | grep -i error
  
    echo "=== Error Count by Type ==="
    grep -i error $log_file | awk '{print $5}' | sort | uniq -c | sort -nr
}

# 主函数
main() {
    analyze_access_log
    analyze_error_log
}

main "$@"

总结

Nginx作为高性能的Web服务器和反向代理服务器,在互联网应用中发挥着重要作用。通过深入理解其核心概念、技术实现和应用场景,可以更好地设计和实现高可用、高性能的Web服务。

关键要点:

  1. 高性能:基于事件驱动的异步非阻塞IO模型
  2. 反向代理:支持负载均衡和故障转移
  3. 静态文件服务:高效处理静态文件请求
  4. 模块化设计:支持动态模块加载和扩展
  5. 配置灵活:支持复杂的配置和定制

学习建议:

  1. 深入理解Nginx的架构和核心流程
  2. 实践各种配置和优化策略
  3. 关注性能优化和高可用设计
  4. 结合具体项目进行实战练习
  5. 掌握监控运维和故障处理
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值