ngx_http_proxy_module 代理模块 用于把请求后抛给服务器节点或upstream服务池
ngx_http_upstream_module 负载均衡模块 可以实现网站的负载均衡和健康检查 创建一个web服务器池子
nginx 负载均衡有三种模式
1 round-robin 轮训调度
2 ip_hash 一定周期内同一个ip访问同一台主机 能够解决session的问题
3 least_conn 最少连接数调度
三台虚拟机(一台Nginx调度器,两台Web)
Nginx 10.125.192.9
第一步,部署后端web1 web2
echo ‘2222222’ > /var/www/html/index.html
echo ‘1111111’ > /var/www/html/index.html
/etc/init.d/httpd restart
第二步 部署nginx反向代理 放入http{}标签中 也可以单独写在子配置文件中
upstream webserver {
#ip_hash; #每个用户根据访问的IP分配一个固定的后端服务器(根据情况是否添加)
server 10.125.192.4 weight=3; #weight权重 访问3次192.4 访问1次192.1
server 10.125.192.1 weight=1;
server 10.125.192.2 max_fails=3 fail_timeout=30;#如果有三次连接失败,30秒后再检查1次,只会检查一次,除非重新加载配置文件
server 10.125.192.3 down; #当前的服务器不参与负载 宕机服务器
server 10.125.192.5 backup; #备用服务器(所有服务器都坏了才使用到)
}
server {
listen 80;
server_name www.aaa.com;
location / {
proxy_pass http://webserver; #要与upstream 定义的名称相同
proxy_set_header Host $host; #Nginx代理会向后转发域名,不加这句话就会向后转发IP 有可能造成和访问域名结果不同
h
o
s
t
向
后
转
发
时
可
以
添
加
端
口
如
:
host 向后转发时可以添加端口如:
host向后转发时可以添加端口如:host:8080
proxy_set_header X-Forwarded-For $remote_addr; #服务器端会记录真实客户端IP,不加会记录代理本身IP
proxy_next_upstream http_502 http_504 http_404 http_403 error timeout invalid_header; #出错502 504 404 403等,尝试下一个节点
prox_http_version 1.1; #nginx反向代理默认使用http 1.0短链接
}
}
upstream模块支持的代理方式有proxy_pass fastcgi_pass memcached_pass
rr 轮训(默认)
wrr 加权轮训
ip_hash
fair 根据服务器RS的响应时间分配请求 按后端服务器的响应时间来分配请求。响应时间短的优先分配
url_hash按访问url的hash结果来分配请求,使每一个url定向到同一个后端服务器。后端服务器为缓存时比较有效
ip_hash调度方法
upstream favresin{
ip_hash;
server 10.0.0.10:8080;
server 10.0.0.11:8080;
}
fair调度方法
upstream favresin{
server 10.0.0.10:8080;
server 10.0.0.11:8080;
fair;
}
url_hash 调度方法
upstream resinserver{
server 10.0.0.10:7777;
server 10.0.0.11:8888;
hash $request_uri;
hash_method crc32;
}
注意:在upstream中加入hash语句。server语句中不能写入weight等其他的參数,hash_method是使用的hash算法
反向代理的一些优化配置
upstream backend {
server 192.168.0.1;
keepalive 32; #长连接
}
server {
.......
location / {
proxy_pass http://backend;
proxy_http_version 1.1; #nginx反向代理默认使用http 1.0短链接
proxy_set_header Connection ""; #清除Connection头字段
proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-For $remote_addr;
roxy_next_upstream erro timeout http_404 http_403;
proxy_connec_timeout 30s; #代理连接web超时时间
proxy_read_timeout 30s; #代理等待web响应超时时间
proxy_send_timeout 30s; #web回传数据到代理超时时间
proxy_buffering on; #开启代理缓冲区,web回传数据至缓冲区
proxy_buffer_size 32k; #代理接收web响应的头信息的缓冲区大小
proxy_buffer 4 128k; #缓冲代理接收单个长连接内包含的web响应的数量和大小
}
}
常用参数
1 proxy_set_header Host $http_host; 向后端服务器发送真实用户访问地址
2 proxy_set_header X-Forwarded-For $remote_addr; 向后端服务器发送真实用户IP
3 proxy_next_upstream erro timeout http_404 http_403 如果后端应用服务器访问超时或报404 403错误则自动跳过报错服务器,把请求交给负载均衡池中其他服务器处理, 注:404 403等可以自定义如希望出现413错误,http_413