nginx-http反向代理与负载均衡

简单的HTTP反向代理

nginx默认集成了代理模块,因此可以直接在server域配置proxy_pass实现反向代理。

假设nginx服务器的IP为192.168.0.10,后端服务器

复制代码
server {
    listen 80;
    location / {
        proxy_pass http://192.168.0.11:8000;
    }
}

负载均衡

负载均衡需要在upstream域配置,示例:

复制代码
http {
    # ...
    upstream backend {
        server 192.168.0.11:80 weight=80;
        server 192.168.0.12:80;
        server 192.168.0.13:80 backup;
    }
    server {
        location / {
            proxy_pass http://backend;
        }
    }
}

后端服务器指令参数

  • weight: 权重,默认为1。示例: weight=80
  • max_fails: 最大失败数,默认为1。示例: max_fails=3。被代理服务器在fail_timeout规定时间内的最大请求失败数,超过设定次数后,被代理服务器便被认为不可用。
  • fail_timeout: 失败超时,默认为10s。示例:fail_timeout=15s。被代理服务器被置为不可用的最长时间。
  • backup: 备份服务器。将被代理服务器标记为备份服务器,当其他非备份服务器不可用时,会把请求转发给备份服务器。
  • down: 无效服务器。将被代理服务器标记为无效服务器。
  • max_conn: 最大连接数,默认为0,表示没限制。示例:max_conn=100。与被代理服务器建立活动连接的最大数量。

负载均衡策略

默认负载均衡策略为轮询,通过权重配置可实现加权轮询。

  • hash:哈希策略。(暂时还没试过咋用)
  • ip_hash:确保同一个客户端的请求总会被同一个被代理服务器处理。
  • least_conn:最少连接策略。在考虑被代理服务器组权重的前提下,将客户端请求分配给拥有最少活跃连接数的被代理服务器。
  • random:随机负载策略。将客户端请求随机分配给被代理服务器。

负载均衡长连接

默认配置下,HTTP协议的负载均衡与被代理服务器之间的连接都是HTTP/1.0的短连接。如果使用长连接,可以在一个TCP连接中传输多个HTTP请求和响应,减少了建立和关闭TCP连接的消耗和延迟,提高了传输效率。

配置示例:

复制代码
upstream backend {
    server 192.168.0.11:80;
    server 192.168.0.12:80;
    # 长连接缓存池大小为32
    keepalive 32;
    # 每条长连接最大复用请求数为2000
    keepalive_requests 2000;
}
server {
    location/ {
        proxy_pass http://backend;
        # 启用http/1.1版本与被代理服务器建立连接
        proxy_http_version 1.1;
        # 清空请求头属性字段Connection的内容
        proxy_set_header Connection "";
    }
}

反向代理简单优化

复制代码
http {
    proxy_cache_path /usr/local/nginx/cache levels=1:2 keys_zone=STATIC:10m inactive=24h max_size=1g;
    tcp_nodelay off;
    server {
        listen 8081;
        location / {
            proxy_pass http://192.168.67.232:80/;
            # 启用响应数据缓冲区
            proxy_buffering on;
            # 设置每个HTTP请求读取上游服务器响应数据缓冲区的大小为64KB
            proxy_buffers 8 8k;
            # 设置每个HTTP请求读取响应数据第一部分缓冲区的大小为8KB
            proxy_buffer_size 8k;
            # 接收上游服务器返回响应数据时,同时用于向客户端发送响应的缓冲区的大小为16KB
            proxy_busy_buffers_size 16k;
            # 不限制每个HTTP请求每秒读取上游服务器响应数据的流量
            proxy_limit_rate 0;
            # 启用客户端HTTP请求读取缓冲区功能
            proxy_request_buffering on;
            # 设置发送给上游服务器的头属性字段Host为客户端请求头字段Host的值
            proxy_set_header Host $host:$server_port;
            # 设置发送给上游服务器的头属性字段X-Real-IP为客户端IP
            proxy_set_header X-Real-IP $remote_addr;
            # 设置用于缓存的共享内存
            proxy_cache STATIC;
            # 设置200响应码的缓存时间为1天
            proxy_cache_valid 200 1d;
            # 出现指定条件时,使用已经过期的缓存响应
            proxy_cache_use_stale error timeout invalid_header updating http_500 http_502 http_503 http_504;
        }
    }
}
相关推荐
止水编程 water_proof20 小时前
Java-HTTP响应以及HTTPS(下)
网络·网络协议·http
0和1的舞者1 天前
网络通信的奥秘:HTTP详解 (七)
服务器·网络·网络协议·http·okhttp·软件工程·1024程序员节
努力进修1 天前
跨地域传文件太麻烦?Nginx+cpolar 让本地服务直接公网访问
运维·nginx·cpolar
huangdengji1 天前
基于openresty反向代理、dns劫持、实现对http请求、响应内容抓包
网络协议·http·openresty
神仙别闹1 天前
基于C语言 HTTP 服务器客户端的实验
服务器·c语言·http
rit84324991 天前
在Ubuntu上配置Nginx实现开机自启功能
数据库·nginx·ubuntu
一勺菠萝丶1 天前
芋道后端部署后总自己挂?从 Nginx 报错到 OOM Kill 的完整排查与修复(2核2G 服务器实战)
服务器·chrome·nginx
打不了嗝 ᥬ᭄1 天前
【Linux】网络层协议
linux·网络·c++·网络协议·http
一叶飘零_sweeeet1 天前
Java 项目 HTTP+WebSocket 统一权限控制实战
java·websocket·http·权限控制
进击的圆儿1 天前
HTTP协议深度解析:从基础到性能优化
网络协议·http·性能优化