13.2.2.Nginx
13.2.2.1.定义
Nginx 是一个轻量级且高性能的 Web 服务器,适用于处理高并发、低资源消耗的应用场景。它广泛用于 Web 服务器、反向代理、负载均衡、SSL/TLS 终止代理等场景,能够满足现代 Web 服务的多种需求。由于其模块化和高度可配置性,Nginx 被许多大流量网站(如 Netflix、WordPress、GitHub 等)广泛使用。
13.2.2.2.Nginx的架构设计
1)事件驱动架构
Nginx 默认使用 epoll、kqueue 或 select 等 I/O 模型来处理事件。通过配置 worker_processes 和 worker_connections 来管理系统资源。
worker_processes auto; # 根据CPU核心数自动设置 worker_connections 1024; # 每个worker进程最大并发连接数  | 
2)多进程模型
Nginx 采用多进程架构,主进程负责管理工作进程。工作进程处理客户端请求。
pid /var/run/nginx.pid; # 指定pid文件 worker_processes auto; # 设置工作进程数  | 
13.2.2.3.Nginx 的主要功能与技术体系
1)Web 服务器(静态资源服务)
Nginx 默认可以提供静态资源服务,只需要在配置文件中指定静态资源的路径。
server { listen 80; server_name www.example.com; location / { root /usr/share/nginx/html; # 指定静态文件的路径 index index.html index.htm; # 默认页面 } }  | 
2)反向代理
Nginx 可以充当反向代理服务器,将客户端请求转发到后端服务器。
server { listen 80; server_name www.example.com; location / { proxy_pass http://127.0.0.1:8080; # 将请求转发到本地的 8080 端口 proxy_set_header Host $host; # 保持原始的请求头 proxy_set_header X-Real-IP $remote_addr; # 将客户端的真实 IP 传递给后端 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } }  | 
3)负载均衡
Nginx 可以根据不同的策略进行负载均衡,常见的策略有轮询(默认)、最少连接、IP 哈希等。
http { upstream backend { server backend1.example.com; server backend2.example.com; # 负载均衡方式:轮询(默认)、最少连接、IP 哈希 # 例如使用加权轮询 server backend3.example.com weight=3; } server { location / { proxy_pass http://backend; } } }  | 
4)缓存(反向代理缓存)
Nginx 可以缓存从后端获取的数据,减少后端压力,提升响应速度。
http { proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=one:10m inactive=60m max_size=1g; server { location / { proxy_cache one; # 启用缓存 proxy_cache_valid 200 1h; # 200 状态码的响应缓存 1 小时 proxy_cache_use_stale error timeout updating; # 使用过期的缓存响应 proxy_pass http://backend; } } }  | 
5)SSL 加密(HTTPS 支持)
Nginx 可以配置 SSL/TLS,支持 HTTPS 加密通信。
server { listen 443 ssl; server_name www.example.com; ssl_certificate /etc/nginx/ssl/example.com.crt; ssl_certificate_key /etc/nginx/ssl/example.com.key; location / { root /usr/share/nginx/html; index index.html; } }  | 
6)身份验证
Nginx 支持基本的 HTTP 身份验证,可以通过配置 auth_basic 和 auth_basic_user_file 来启用。
server { listen 80; server_name www.example.com; location /private/ { auth_basic "Restricted Area"; auth_basic_user_file /etc/nginx/.htpasswd; # 存储用户名和密码的文件 } }  | 
13.2.2.4.安全性
1)防止 DDoS 攻击(限制连接)
Nginx 支持对请求进行限制,防止 DDoS 攻击。常见的做法是限制每秒的请求次数。
http { limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s; # 每个 IP 限制 1 请求每秒 server { location / { limit_req zone=one burst=5 nodelay; # 设置突发请求数和不延迟处理 proxy_pass http://backend; } } }  | 
2)访问控制
通过 deny 和 allow 指令来限制 IP 的访问。
server { listen 80; server_name www.example.com; location / { allow 192.168.1.0/24; # 允许来自指定子网的访问 deny all; # 其他所有请求都拒绝 } }  | 
13.2.2.5.日志管理
1)访问日志
Nginx 支持记录详细的访问日志,可以记录请求的来源、状态码、请求路径等信息。
server { listen 80; server_name www.example.com; access_log /var/log/nginx/access.log combined; }  | 
2)错误日志
Nginx 支持记录错误日志,可以配置日志的级别(如 info、error 等)。
error_log /var/log/nginx/error.log warn;  | 
13.2.2.6.高可用性与容错
1)健康检查
Nginx 通过第三方模块(如 ngx_http_upstream_check_module)进行后端健康检查。也可以使用外部工具(如 Keepalived)实现高可用性和故障转移。
upstream backend { server backend1.example.com; server backend2.example.com; check interval=3000 rise=2 fall=5 timeout=1000; # 后端健康检查 }  | 
2)自动故障转移
当一个服务器不可用时,Nginx 会自动将请求转发到其他健康的服务器。
13.2.2.7.动态配置与热更新
Nginx 允许在不重启服务器的情况下修改配置并应用新设置。通过重新加载配置文件,Nginx 会在不中断服务的情况下应用新的配置。
nginx -s reload # 重新加载 Nginx 配置  | 
13.2.2.8.性能优化
1)GZIP 压缩
Nginx 支持 GZIP 压缩,减少传输的数据量,提高网页加载速度。
http { gzip on; # 启用 GZIP 压缩 gzip_types text/plain text/css application/javascript; gzip_min_length 1000; }  | 
2)缓存优化
通过配置适当的缓存时间和缓存路径,提高静态内容的缓存效果,减少文件读取时间。
location / { expires 30d; # 缓存 30 天 add_header Cache-Control public;  | 
