nginx有哪些作用
Nginx 的核心作用及实践场景总结
Nginx 是一款高性能的 Web 服务器 和 反向代理服务器,同时支持负载均衡、缓存加速、安全防护等功能,广泛应用于现代 Web 架构中。以下是其核心作用及典型应用场景:
一、静态资源托管
- 作用:高效分发前端静态文件(HTML/CSS/JS/图片等)。
- 优势:
- 支持高并发(事件驱动模型),适合 CDN 边缘节点。
- 通过
sendfile零拷贝技术提升文件传输效率。
- 配置示例:nginx
server { listen 80; server_name example.com; root /var/www/html; location / { index index.html; # 启用缓存控制 expires 7d; add_header Cache-Control "public, max-age=604800"; } # 处理静态资源 location ~* \.(js|css|png|jpg|gif|ico)$ { expires 365d; access_log off; } }
二、反向代理(Reverse Proxy)
- 作用:隐藏后端服务(如 Node.js、Java 应用),转发客户端请求。
- 场景:
- 前端访问
/api时代理到后端服务。 - 隐藏后端服务器 IP 和端口,提升安全性。
- 前端访问
- 配置示例:nginx
server { listen 80; server_name api.example.com; location / { proxy_pass http://backend-server:3000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } }
三、负载均衡(Load Balancing)
- 作用:将流量分发到多个后端服务器,提升可用性和扩展性。
- 策略:
- 轮询(Round Robin):默认方式,均匀分配请求。
- 加权轮询(Weighted Round Robin):按服务器性能分配权重。
- IP 哈希(IP Hash):同一客户端 IP 固定访问某台服务器(适合会话保持)。
- 配置示例:nginx
upstream backend { server backend1.example.com weight=3; # 权重3 server backend2.example.com; server backend3.example.com backup; # 备用服务器 } server { location / { proxy_pass http://backend; } }
四、SSL/TLS 终止
- 作用:处理 HTTPS 加密/解密,减轻后端服务器压力。
- 场景:为网站启用 HTTPS,支持 HTTP/2。
- 配置示例:nginx
server { listen 443 ssl http2; server_name example.com; ssl_certificate /etc/nginx/ssl/example.com.crt; ssl_certificate_key /etc/nginx/ssl/example.com.key; # 安全优化(禁用旧协议,启用强加密套件) ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256; ssl_prefer_server_ciphers on; }
五、缓存加速
- 作用:缓存动态内容或代理结果,减少后端请求压力。
- 场景:缓存 API 响应、页面片段。
- 配置示例:nginx
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m inactive=60m; server { location / { proxy_cache my_cache; proxy_pass http://backend; proxy_cache_valid 200 302 10m; # 缓存200/302响应10分钟 proxy_cache_valid 404 1m; } }
六、访问控制与安全防护
- 作用:限制访问权限,防止恶意请求。
- 常用配置:
- IP 黑白名单:nginx
location /admin { allow 192.168.1.0/24; deny all; } - 速率限制(防 DDoS):nginx
limit_req_zone $binary_remote_addr zone=mylimit:10m rate=10r/s; location / { limit_req zone=mylimit burst=20 nodelay; } - 防盗链:nginx
location ~* \.(jpg|png)$ { valid_referers none blocked example.com; if ($invalid_referer) { return 403; } }
- IP 黑白名单:
七、Gzip 压缩
- 作用:压缩文本资源(HTML/CSS/JS),减少传输体积。
- 配置示例:nginx
gzip on; gzip_types text/plain text/css application/json application/javascript text/xml; gzip_min_length 1024; gzip_comp_level 6;
八、URL 重写与重定向
- 作用:优化 URL 结构,支持 SEO 或路由跳转。
- 场景:
- 强制 HTTPS 跳转。
- 前端路由(如 Vue/React 的 History 模式)。
- 配置示例:nginx
server { listen 80; server_name example.com; # 强制跳转 HTTPS return 301 https://$host$request_uri; } server { listen 443 ssl; server_name example.com; # 支持前端路由 location / { try_files $uri $uri/ /index.html; } }
九、WebSocket 代理
- 作用:代理 WebSocket 请求,支持实时通信。
- 配置示例:nginx
location /ws { proxy_pass http://websocket-server; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "Upgrade"; }
十、总结:Nginx 在现代 Web 架构中的角色
- 性能优化:通过静态资源托管、缓存、压缩提升网站速度。
- 安全加固:通过访问控制、SSL、限流抵御攻击。
- 高可用性:通过负载均衡和反向代理保障服务稳定。
- 灵活路由:支持 URL 重写、多域名管理。
- 协议支持:无缝处理 HTTP/2、WebSocket 等现代协议。
典型应用场景:
- 前端部署:托管构建后的静态文件,配置路由和缓存。
- 微服务网关:反向代理多个后端服务,统一入口。
- 全站加速:结合 CDN 和负载均衡应对高并发流量。
nginx支持的常用配置
设置 HTTP 协议版本 HTTP/2 二进制协议:HTTP/2 使用二进制格式进行数据传输,相较于 HTTP/1.1 的文本格式,它更高效,数据解析更快速。 多路复用(Multiplexing):HTTP/2 允许在同一个连接中并行传输多个请求和响应,而不需要等待一个请求完成再发送下一个。它通过“流”(stream)来实现这一点,有效地解决了 HTTP/1.x 的队头阻塞问题。 头部压缩(Header Compression):HTTP/2 引入了 HPACK(HTTP Header Compression)算法,压缩 HTTP 请求和响应的头部,减少了每个请求所需传输的头部数据量,优化了性能。 2. 多路复用 HTTP/1.1:每个请求需要建立一个独立的 TCP 连接,或者使用持久连接,但即使使用持久连接,也不能在一个连接中并行处理多个请求(会遇到队头阻塞问题)。因此,如果有多个请求,浏览器通常会通过多个 TCP 连接来并行请求不同的资源(如图片、JS、CSS 文件等)。 HTTP/2:支持 多路复用,即多个请求和响应可以共享一个 TCP 连接进行并行处理,这大大减少了建立多个 TCP 连接的开销。浏览器可以通过一个连接同时处理多个请求,解决了 HTTP/1.1 中的队头阻塞问题。
为什么要设置http2呢 总结: HTTP/1.1 中,每个浏览器与每个域名的最大并发请求数通常是 6 个,但这个数字可以根据浏览器不同有所差异。 使用 多个 TCP 连接 可以在一定程度上增加并发请求数,但会带来额外的连接开销和潜在的网络性能问题。 对于更高效的并发请求管理,推荐使用 HTTP/2 协议,它通过 多路复用 使得在单个连接中可以同时处理多个请求,解决了 HTTP/1.1 中的并发问题和队头阻塞。
如何设置http2呢?它是默认开启多路复用的