Nginx 反向代理与负载均衡配置 反向代理与负载均衡配置参数

Nginx配置反向代理

nginx反向代理和负载均衡是常用的功能,首先,nginx反向代理配置通常在server块中定义,而负载均衡则在http块中定义upstream。

bash 复制代码
反向代理配置示例:
server {
    listen 80;
    server_name example.com;

    location / {
        proxy_pass http://backend_server;
        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;
    }
    
        # 超时设置
        proxy_connect_timeout 30s; # 连接后端超时时间
        proxy_send_timeout 60s;    # 发送请求超时时间
        proxy_read_timeout 60s;    # 读取响应超时时间
        
        # 错误处理
        proxy_intercept_errors on;
        error_page 500 502 503 504 /50x.html;
}

反向代理常用参数:

bash 复制代码
proxy_pass:指定后端服务器的地址,可以是IP、域名或upstream块名称。
proxy_set_header:设置传递给后端服务器的请求头。常用的有:
Host:设置主机头为客户端请求的主机。
X-Real-IP:将客户端的真实IP传递给后端服务器。
X-Forwarded-For:记录客户端IP和代理IP的列表。
X-Forwarded-Proto:客户端请求的协议(http或https)。

负载均衡upstream定义

1.基本定义格式
复制代码
http {
    # upstream 块定义
    upstream 后端组名称 {
        # 负载均衡算法
        [负载均衡算法指令];
        
        # 后端服务器列表
        server 地址 [参数];
        server 地址 [参数];
        
        # 连接控制参数
        [连接控制参数];
    }
    
    server {
        location / {
            proxy_pass http://后端组名称;
        }
    }
}
2.负载均衡算法详解

轮询算法 (Round Robin) - 默认

复制代码
upstream backend {
    # 默认就是轮询算法,无需显式指定
    server 192.168.1.101:8080;
    server 192.168.1.102:8080;
    server 192.168.1.103:8080;
}

加权轮询算法 (Weighted Round Robin)

复制代码
upstream backend {
    # 根据权重分配请求
    server 192.168.1.101:8080 weight=5;  # 50% 的请求
    server 192.168.1.102:8080 weight=3;  # 30% 的请求
    server 192.168.1.103:8080 weight=2;  # 20% 的请求
    
    # 适用于服务器性能不同的场景
}

IP 哈希算法 (IP Hash)

复制代码
upstream backend {
    ip_hash;  # 基于客户端IP的哈希算法
    
    server 192.168.1.101:8080;
    server 192.168.1.102:8080;
    server 192.168.1.103:8080;
    
    # 特点:
    # 1. 同一客户端IP总是访问同一台后端服务器
    # 2. 解决session保持问题
    # 3. 适用于有状态的应用
    # 4. 后端服务器宕机会自动重新哈希
}

最少连接算法 (Least Connections)

复制代码
upstream backend {
    least_conn;  # 最少连接数优先
    
    server 192.168.1.101:8080 weight=5;
    server 192.168.1.102:8080 weight=3;
    server 192.168.1.103:8080 weight=2;
    
    # 特点:
    # 1. 将请求发送到当前连接数最少的服务器
    # 2. 考虑权重设置
    # 3. 适用于长连接场景
}
3.基本服务器参数

健康检查参数

复制代码
upstream backend {
    # max_fails: 最大失败次数
    # fail_timeout: 失败超时时间
    server 192.168.1.101:8080 max_fails=3 fail_timeout=30s;
    
    # 说明:
    # 1. 在fail_timeout时间内,失败max_fails次,标记为不可用
    # 2. 标记为不可用后,fail_timeout时间内不分配请求
    # 3. fail_timeout后自动恢复
    
    # 示例:
    # 30秒内失败3次,标记为不可用,30秒后恢复
}

服务器状态参数

复制代码
upstream backend {
    # backup: 备份服务器
    server 192.168.1.101:8080;
    server 192.168.1.102:8080 backup;  # 备份服务器
    
    # down: 永久不可用
    server 192.168.1.103:8080 down;  # 永久下线
    
    # 说明:
    # 1. backup服务器只在其他服务器都不可用时才使用
    # 2. down标记的服务器不参与负载均衡
    # 3. 常用于维护或故障服务器
}

连接限制参数

复制代码
upstream backend {
    # max_conns: 最大连接数限制
    server 192.168.1.101:8080 max_conns=100;
    
    # 说明:
    # 1. 限制到该服务器的最大并发连接数
    # 2. 超过限制的连接会排队等待
    # 3. 0表示无限制
    # 4. 在Nginx 1.11.5+版本中可用
    
    # 注意:默认连接限制不包含排队连接
}

解析参数

复制代码
upstream backend {
    # resolve: 动态DNS解析
    server backend.example.com:8080 resolve;
    
    # 说明:
    # 1. 定期解析域名,支持DNS记录变化
    # 2. 需要resolver指令配合
    # 3. 在Nginx 1.5.12+版本中可用
    
    # 配合resolver使用
    resolver 8.8.8.8 8.8.4.4 valid=30s;
}
4.连接控制参数
复制代码
upstream backend {
    server 192.168.1.101:8080;
    server 192.168.1.102:8080;
    
    # keepalive: 空闲连接池大小
    keepalive 32;  # 每个worker保持32个空闲连接
    
    # keepalive_requests: 每个连接最大请求数
    keepalive_requests 1000;  # 每个连接处理1000个请求后关闭
    
    # keepalive_timeout: 连接空闲超时时间
    keepalive_timeout 60s;  # 空闲60秒后关闭
    
    # 说明:
    # 1. 提高性能,减少TCP握手开销
    # 2. 适用于HTTP/1.1
    # 3. 需要proxy_http_version 1.1和proxy_set_header Connection "";
}
完整的配置案例
bash 复制代码
# 全局配置
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;

events {
    worker_connections 1024;
    use epoll;
    multi_accept on;
}

http {
    # 基础配置
    include /etc/nginx/mime.types;
    default_type application/octet-stream;
    
    # 日志格式
    log_format main '$remote_addr - $remote_user [$time_local] "$request" '
                    '$status $body_bytes_sent "$http_referer" '
                    '"$http_user_agent" "$http_x_forwarded_for"';
    
    access_log /var/log/nginx/access.log main;
    
    # 性能优化
    sendfile on;
    tcp_nopush on;
    tcp_nodelay on;
    keepalive_timeout 65;
    keepalive_requests 100;
    client_max_body_size 100m;
    
    # 负载均衡配置
    upstream backend_cluster {
        # 负载均衡算法
        least_conn;
        
        # 服务器定义
        server 192.168.1.101:8080 weight=3 max_fails=3 fail_timeout=30s;
        server 192.168.1.102:8080 weight=2 max_fails=3 fail_timeout=30s;
        server 192.168.1.103:8080 weight=1 max_fails=3 fail_timeout=30s;
        server 192.168.1.104:8080 backup;  # 备份服务器
        
        # 连接保持
        keepalive 32;
        keepalive_requests 1000;
        keepalive_timeout 60s;
    }
    
    # 服务器配置
    server {
        listen 80;
        server_name www.example.com;
        
        # SSL配置(如果需要)
        # listen 443 ssl http2;
        # ssl_certificate /path/to/cert.pem;
        # ssl_certificate_key /path/to/key.pem;
        
        # 根路径代理
        location / {
            # 代理设置
            proxy_pass http://backend_cluster;
            
            # 请求头设置
            proxy_http_version 1.1;
            proxy_set_header Connection "";
            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;
            
            # 超时设置
            proxy_connect_timeout 30s;
            proxy_send_timeout 60s;
            proxy_read_timeout 60s;
            
            # 缓冲区设置
            proxy_buffer_size 4k;
            proxy_buffers 8 4k;
            proxy_busy_buffers_size 8k;
            proxy_temp_file_write_size 8k;
            
            # 错误处理
            proxy_intercept_errors on;
            error_page 500 502 503 504 /50x.html;
        }
        
        # 静态文件处理
        location /static/ {
            alias /var/www/static/;
            expires 30d;
            add_header Cache-Control "public, immutable";
        }
}
相关推荐
七夜zippoe14 小时前
CANN Runtime任务描述序列化与持久化源码深度解码
大数据·运维·服务器·cann
Fcy64816 小时前
Linux下 进程(一)(冯诺依曼体系、操作系统、进程基本概念与基本操作)
linux·运维·服务器·进程
袁袁袁袁满16 小时前
Linux怎么查看最新下载的文件
linux·运维·服务器
代码游侠16 小时前
学习笔记——设备树基础
linux·运维·开发语言·单片机·算法
主机哥哥16 小时前
阿里云OpenClaw部署全攻略,五种方案助你快速部署!
服务器·阿里云·负载均衡
Harvey90316 小时前
通过 Helm 部署 Nginx 应用的完整标准化步骤
linux·运维·nginx·k8s
珠海西格电力科技17 小时前
微电网能量平衡理论的实现条件在不同场景下有哪些差异?
运维·服务器·网络·人工智能·云计算·智慧城市
释怀不想释怀18 小时前
Linux环境变量
linux·运维·服务器
zzzsde18 小时前
【Linux】进程(4):进程优先级&&调度队列
linux·运维·服务器
聆风吟º19 小时前
CANN开源项目实战指南:使用oam-tools构建自动化故障诊断与运维可观测性体系
运维·开源·自动化·cann