nginx反向代理
1ocation / { proxy_pass http://172.16.1.7:8080; }
Syntax:proxy_set_header field value; Default: proxy_set_header Host $proxy_host, proxy_set_header Connection close; Context: http,server,location # 用户请求的时候HOST的值是www,o1dboy.com,那么代理服务会像后端传递请求的还是www.oldboy.com proxy_set_header Host $http_host; # 将$remote_addr的值放进变量X-Real-IP中,$remote_addr的值为客户端的ip proxy_set_header X-Real-IP $remote_addr; #客户端通过代理服务访问后端服务,后端服务通过该变量会记录真实客户端地址 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
#代理与后端节点 建立连接的超时 时间不建议超过75s
syntax: proxy_connect_timeout time;
Default: proxy_connect_timeout 60s;
Context: http, server,location
#代理服务器读取后端响应的超时时间
Syntax: proxy_read_timeout time;
Default: proxy_read_timeout 60s;
Context: http, server, location
#代理服务器发送请求给后端节点超时时间,
Syntax: proxy_send_timeout time;
Default: proxy_send_timeout 60s;
Context: http,server,1ocation
#buffer 系列 ####proxy_buffering 是否开启代理服务器 缓存后端节点的响应报文信息(响应头和响应主体) syntax: proxy_buffering on | off; Default: proxy_buffering on; Context: http,server,location ####启用缓冲后,nginx会尽快从代理服务器接收响应,并将其保存到proxy_buffer_size和proxy_buffers指令设置的 缓冲区中。 如果整个响应无法放入内存,则可以将部分响应保存到磁盘上的临时文件中。 写入临时文件由proxy_max_temp_file_size和proxy_temp_file_write_size指令控制。
####proxy_buffer_size Syntax: proxy_buffer_size size; Default:proxy_buffer_size 4k|8k; Context:http,server,location ##设置用于读取从代理服务器接收的响应的第一部分的缓冲区大小。 这部分通常包含一个小的响应头。 默认情况下,缓冲区大小等于一个内存页。这是4K或8K,取决于平台。 不过,它可以做得更小。
[root@1b0l /etc/nginx/conf.d]# cat /etc/nginx/proxy_params proxy_set_header Host $http_host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_connect_timeout 30; proxy_read_timeout 60; proxy_send_timeout 60; proxy_buffering on; proxy_buffer_size 16k; proxy_buffers 8 128k:
[root@1b01 /etc/nginx/conf.d]# cat blog.oldboy.com.conf server { listen 80; server_name b1og.oldboy.com; location / { proxy_pass http://10.0.0.7:80; include proxy_params; } } [roota1b01 /etc/nginx/conf.d]# nginx -t nginx: the configuration file /etc/nginx/nginx.conf syntax is oknginx: configuration file /etc/nginx/nginx.conf test is successfu [root@1b01 /etc/nginx/conf.d]# systemctl reload nginx
负载均衡
OSI 7层模型
7层负载均衡:应用场景,用于处理用户uri, 处理用户客户端,rewrite(修改url/uri/伪静态.)..
- http://oldboyedu.com/oldboy/lidao.html
- $http user agent. ...
- http://oldboyedu.com/index.php?name=lidao&p=1 === http://oldboyedu.com/lidao/1.html
4层负载均衡: 处理端口,最多识别到第4层
--7层负载均衡--
lb配置
upstream proxy { server 10.0.0.7:80; server 10.0.0.8:80; } server { listen 80; server_name proxy.oldboy.com; 1ocation / { proxy_pass http://proxy; include proxy_params; } }
调度算法:
#调度算法:负载均衡如何处理/分发用户的请求,如何给后端的服务器
#静态算法
## rr轮询算法:1一次1个
## wrr加权轮询:(后端节点 服务器配置不同)
#webo1 1c1g
#web02 1c19
#web03 4c8g
upstream blog {
server 10.0.0.7:80 weight=1;
server 10.0.0.8:80 weight=1;
server 10.0.0.9:80 weight=4;
}
动态算法
#1east_conn 最小连接数,负载均衡会定期检查后端服务器的连接数
指定upstream使用的负载均衡算法,将请求传递到活动连接数最少的服务器,并考虑服务器的权重。
如果有多个这样的服务器,则结合wrr和least_conn一起调度。
upstream blog {
1east_conn;
server 10.0.0.7:80 weight=1;
server 10.0.0.8:80 weight=1;
server 10.0.0.9:80 weight=4;
}
#ip_hash 对用户客户端ip进行hash,每次用户都会访问同一台服务器
好处:解决用户登录状态问题(会话共享/登录会话)
缺点:导致后端节点负载不均
upstream blog {
ip_hash;
server 10.0.0.7:80 weight=1;
server 10.0.0.8:80 weight=1;
server 10.0.0.9:80 weight=4;
}
#ur1_hash 对应用户请求中的ur1进行hash,每次用户访问相同的ur1,访问相同的后端节点
应用场景:配置缓存服务器,让用户指定的ur1/uri,访问缓存服务器.
upstream blog {
hash $request_uri; #指定的变量进行hash
server 10.0.0.7:80 weight=1;
server 10.0.0.8:80 weight=1;
server 10.0.0.9:80 weight=4;
}
upstrem模块设置
[root@1b01 /etc/nginx/conf.d]# cat proxy.oldboy.com.conf upstream proxy { server 10.0.0.7:80 weight=l max_fails=3 fail_timeout=20; server 10.0.0.8:80 weight=1 max_faiis=3 fail timeout=20; } server { listen 80; server_name proxy.oldboy.com; 1ocation /{ proxy_pass http://proxy; include proxy_params; } }
负载均衡和会话保存
- cookie 用户浏览器中,存放用户信息,session位置(钥匙)
- session 服务器,会话,用户登录信息,购物车信息....
配置php链接redis
URI转发
根据user_agent转发
X-Forwarded-For
经过的代理转发服务器配置
server{ listen 80; server_name 3level.oldboy.com; } location / { proxy_pass http://10.0.0.8; include proxy_params; } vim proxy_params >> proxy_set_header Host $http_host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Real-IP $remote_addr;
proxy_connect_timeout30; proxy_read_timeout 60; proxy_send_timeout 60; proxy_buffering on; proxy_buffer_size 16k; proxy_buffers 8 128k;
X-Real-IP
检测模块是否安装
--tiwh-http_realip_module
总结:
XFF头 X-Forwarded-For 记录多级ip 客户端ip+代理/负载均衡ip·
X-Real-IP 头 只能记录上级的客户端ip地址,
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
4层负载均衡
--检查安装的模块 --with-stream
7层负载均衡处理,http/https请求,做一个代理,高并发情况下,每次负载请求后端节点,占用一个端口(随机)
4层负载均衡,Ivs(对数据进行转发),效率更高. nginx 4层负载均衡,本质上还是代理模式.
案例一:基于ssh的负载均衡
基于msyql负载均衡
本文来自博客园,作者:孙龙-程序员,转载请注明原文链接:https://www.cnblogs.com/sunlong88/p/18425447