Nginx 反向代理与负载均衡

前言

Nginx 是现代互联网应用的核心基础设施。作为高性能的反向代理和负载均衡器,它在构建分布式系统中发挥了至关重要的作用。本文介绍 Nginx 的核心概念和实际应用。

一、Nginx 基础

1.1 安装与启动

# 安装 Nginx
sudo apt-get install nginx

# 启动 Nginx
sudo systemctl start nginx

# 检查状态
sudo systemctl status nginx

# 验证配置
sudo nginx -t

1.2 配置文件结构

worker_processes auto;           # 工作进程数

events {
  worker_connections 2048;    # 单进程连接数
}

http {
  upstream backend { }         # 上游服务器
  server { }                    # 虚拟主机
}

二、反向代理

2.1 基本反向代理

server {
  listen 80;
  server_name example.com;

  location / {
    proxy_pass http://127.0.0.1:8080;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  }
}

2.2 代理缓存

proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=cache:10m;

location / {
  proxy_cache cache;
  proxy_cache_valid 200 1h;
  proxy_cache_key "$scheme$request_method$host$request_uri";
  proxy_pass http://backend;
}

三、负载均衡

3.1 轮询(Round Robin)

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

server {
  listen 80;
  location / {
    proxy_pass http://backend;
  }
}

3.2 加权轮询

upstream backend {
  server 192.168.1.10:8080 weight=5;  # 权重为5
  server 192.168.1.11:8080 weight=3;  # 权重为3
  server 192.168.1.12:8080 weight=1;  # 权重为1
}

3.3 IP Hash

同一客户端的请求始终转发到同一后端服务器,适合有会话需求的应用。

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

3.4 Least Connections

转发到当前连接数最少的服务器。

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

四、健康检查

4.1 被动健康检查

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

proxy_connect_timeout 5s;
proxy_read_timeout 30s;

4.2 主动健康检查

Nginx Plus 支持主动健康检查(社区版不支持)。

五、SSL/TLS 配置

server {
  listen 443 ssl http2;
  server_name example.com;

  ssl_certificate /etc/nginx/certs/cert.pem;
  ssl_certificate_key /etc/nginx/certs/key.pem;
  ssl_protocols TLSv1.2 TLSv1.3;
  ssl_ciphers HIGH:!aNULL:!MD5;

  location / {
    proxy_pass http://backend;
  }
}

# HTTP 重定向到 HTTPS
server {
  listen 80;
  server_name example.com;
  return 301 https://$server_name$request_uri;
}

六、性能优化

七、常用命令

nginx -t              # 测试配置
nginx -s reload       # 重新加载配置
nginx -s stop         # 停止 Nginx
systemctl status nginx # 检查状态

八、最佳实践

总结

Nginx 以其高效、轻量和强大的功能,成为构建高可用系统的首选。掌握反向代理、负载均衡和性能优化,能够构建稳定高效的网络基础设施。

标签: Nginx 反向代理 负载均衡 服务器 运维