• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
孙龙 程序员
少时总觉为人易,华年方知立业难
博客园    首页    新随笔    联系   管理    订阅  订阅
nginx反向代理,负载均衡

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

posted on 2024-09-22 16:14  孙龙-程序员  阅读(33)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3