前言
反向代理服务器位于用户与目标服务器之间,但是对于用户而言,反向代理服务器就相当于目标服务器,即用户直接访问反向代理服务器就可以获得目标服务器的资源。同时,用户不需要知道目标服务器的地址,也无须在用户端作任何设定。反向代理服务器通常可用来作为Web加速,即使用反向代理作为Web服务器的前置机来降低网络和服务器的负载,提高访问效率。——摘自百度百科
简单的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; } } }