Skip to content

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;
        }
      }

七、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 架构中的角色

  1. 性能优化:通过静态资源托管、缓存、压缩提升网站速度。
  2. 安全加固:通过访问控制、SSL、限流抵御攻击。
  3. 高可用性:通过负载均衡和反向代理保障服务稳定。
  4. 灵活路由:支持 URL 重写、多域名管理。
  5. 协议支持:无缝处理 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呢?它是默认开启多路复用的