乐闻世界logo
搜索文章和话题

Nginx 常见的部署架构有哪些?如何选择合适的架构?

2月21日 16:50

Nginx 常见的部署架构有哪些?如何选择合适的架构?

Nginx 可以根据不同的业务需求和规模采用多种部署架构,从单机部署到分布式集群都有相应的解决方案。

单机部署架构:

shell
客户端 → Nginx → 应用服务器 → 数据库

适用场景

  • 小型网站或应用
  • 开发测试环境
  • 低流量业务

配置示例

nginx
server { listen 80; server_name example.com; root /var/www/html; index index.php index.html; location ~ \.php$ { fastcgi_pass unix:/var/run/php/php8.0-fpm.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } location / { try_files $uri $uri/ =404; } }

反向代理架构:

shell
客户端 → Nginx (反向代理) → 后端服务器集群

适用场景

  • 多个应用服务器需要统一入口
  • 需要负载均衡
  • 需要隐藏后端服务器

配置示例

nginx
upstream backend { server 192.168.1.100:8080 weight=3; server 192.168.1.101:8080 weight=2; server 192.168.1.102:8080 weight=1; keepalive 32; } server { listen 80; server_name example.com; location / { 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; } }

负载均衡架构:

shell
客户端 → Nginx (负载均衡器) → 后端服务器池

适用场景

  • 高并发访问
  • 需要水平扩展
  • 需要高可用性

负载均衡策略

nginx
# 轮询(默认) upstream backend { server 192.168.1.100:8080; server 192.168.1.101:8080; } # 最少连接 upstream backend { least_conn; server 192.168.1.100:8080; server 192.168.1.101:8080; } # IP 哈希 upstream backend { ip_hash; server 192.168.1.100:8080; server 192.168.1.101:8080; } # 加权轮询 upstream backend { server 192.168.1.100:8080 weight=3; server 192.168.1.101:8080 weight=2; server 192.168.1.102:8080 weight=1; }

多层代理架构:

shell
客户端 → 边缘 Nginx → 中间 Nginx → 应用服务器

适用场景

  • 大规模分布式系统
  • 需要多层缓存
  • 需要安全隔离

配置示例

nginx
# 边缘 Nginx upstream middle_layer { server 192.168.1.200:80; server 192.168.1.201:80; } server { listen 80; server_name example.com; location / { proxy_pass http://middle_layer; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } } # 中间层 Nginx upstream backend { server 192.168.1.100:8080; server 192.168.1.101:8080; } server { listen 80; server_name middle.example.com; location / { proxy_pass http://backend; proxy_set_header Host $host; } }

CDN 集成架构:

shell
客户端 → CDN → 源站 Nginx → 后端服务器

适用场景

  • 全球用户访问
  • 需要加速静态资源
  • 需要减轻源站压力

配置示例

nginx
server { listen 80; server_name example.com; # 静态资源重定向到 CDN location ~* \.(css|js|jpg|jpeg|png|gif|ico|svg|woff|woff2)$ { return 301 https://cdn.example.com$request_uri; } # 动态内容 location / { proxy_pass http://backend; proxy_set_header Host $host; } }

高可用架构(Keepalived + Nginx):

shell
客户端 → VIP (虚拟IP) Nginx 主节点 ← Keepalived Nginx 备节点 ← Keepalived 后端服务器

适用场景

  • 需要高可用性
  • 不能接受单点故障
  • 关键业务系统

配置示例

nginx
# 主节点 Nginx 配置 upstream backend { server 192.168.1.100:8080; server 192.168.1.101:8080; } server { listen 80; server_name example.com; location / { proxy_pass http://backend; proxy_set_header Host $host; } } # Keepalived 配置 vrrp_instance VI_1 { state MASTER interface eth0 virtual_router_id 51 priority 100 advert_int 1 authentication { auth_type PASS auth_pass 1234 } virtual_ipaddress { 192.168.1.50 } }

微服务架构:

shell
客户端 → Nginx (API 网关) → 微服务集群

适用场景

  • 微服务架构
  • 需要统一 API 入口
  • 需要服务发现

配置示例

nginx
# 用户服务 upstream user_service { server 192.168.1.100:8080; server 192.168.1.101:8080; } # 订单服务 upstream order_service { server 192.168.1.200:8080; server 192.168.1.201:8080; } # 支付服务 upstream payment_service { server 192.168.1.300:8080; server 192.168.1.301:8080; } server { listen 80; server_name api.example.com; # 路由到用户服务 location /api/users/ { proxy_pass http://user_service; proxy_set_header Host $host; } # 路由到订单服务 location /api/orders/ { proxy_pass http://order_service; proxy_set_header Host $host; } # 路由到支付服务 location /api/payments/ { proxy_pass http://payment_service; proxy_set_header Host $host; } }

缓存架构:

shell
客户端 → Nginx (缓存层) → 后端服务器

适用场景

  • 读多写少的应用
  • 需要减轻后端压力
  • 需要提升响应速度

配置示例

nginx
# 定义缓存路径 proxy_cache_path /var/cache/nginx/proxy levels=1:2 keys_zone=proxy_cache:10m max_size=1g inactive=60m; upstream backend { server 192.168.1.100:8080; server 192.168.1.101:8080; } server { listen 80; server_name example.com; location / { # 启用缓存 proxy_cache proxy_cache; proxy_cache_valid 200 10m; proxy_cache_valid 404 1m; proxy_cache_key "$scheme$request_method$host$request_uri"; # 缓存跳过条件 proxy_cache_bypass $http_cache_control; proxy_no_cache $http_cache_control; proxy_pass http://backend; proxy_set_header Host $host; # 添加缓存状态头 add_header X-Cache-Status $upstream_cache_status; } }

混合架构:

shell
客户端 → Nginx (静态资源) → CDN Nginx (动态内容) → 应用服务器

适用场景

  • 复杂业务系统
  • 需要分离静态和动态内容
  • 需要多种优化策略

配置示例

nginx
# 静态资源服务器 server { listen 80; server_name static.example.com; root /var/www/static; location ~* \.(css|js|jpg|jpeg|png|gif|ico|svg|woff|woff2)$ { expires 1y; add_header Cache-Control "public, immutable"; access_log off; } } # 动态内容服务器 upstream backend { server 192.168.1.100:8080; server 192.168.1.101:8080; } server { listen 80; server_name example.com; location / { proxy_pass http://backend; proxy_set_header Host $host; } }

架构选择指南:

业务需求推荐架构说明
小型网站单机部署简单易维护
中型应用反向代理统一入口,负载均衡
高并发负载均衡架构水平扩展,高可用
全球业务CDN 集成架构加速访问,减轻源站压力
关键业务高可用架构避免单点故障
微服务微服务架构统一 API 网关
读多写少缓存架构提升性能,减轻后端压力

部署架构最佳实践:

  1. 渐进式扩展:从简单架构开始,根据需求逐步扩展
  2. 监控告警:实时监控架构状态,及时发现问题
  3. 容灾备份:配置备份和容灾方案
  4. 安全防护:在架构各层添加安全措施
  5. 性能优化:根据业务特点选择合适的优化策略
  6. 文档记录:详细记录架构设计和配置
  7. 定期演练:定期进行故障演练,验证架构可靠性
  8. 成本控制:在满足需求的前提下控制成本
标签:Nginx