代理简介
- Nginx采用C进行编写,因它的稳定性、丰富的功能集、简单的配置文件和低系统资源的消耗而闻名,其特点是占有内存少,并发能力强。
- Nginx 代理有正向和反向代理,可以基于OSI七层模型中的第四层(传输层)和第七层(应用层)进行代理
- Nginx 一般支持的是7层代理,支持4层代理一般使用 lvs 或者haprox
- Nginx 从1.9.0 版本开始支持四层代理,但做四层代理时 源码编译需要添加 --with-stream模块, 这里的 --with-stream 是添加四层代理模块,可以用来创建其他业务集群
七层模型
四层模型
正向代理
- 代理客户端, 正向代理的过程隐藏了真实的请求客户端,服务器不知道真实的客户端是谁,客户端的服务都被代理服务器代替请求, 例如VPN就是典型的正向代理
- 客户端 <-------> 代理 -----------> 服务端
反向代理
- 代理服务端, 反向代理的过程隐藏了真实的服务器,客户端不知道真正提供服务的是谁,客户端请求的服务都被代理服务器接收
- 客户端 -------> 代理 <-----------> 服务端
七层代理
- OSI第7层代理是写在http模块中的,
- OSI第7层(应用层)协议, 主要支持的协议有http,htps,smtp,ftp,dns,pop3,dhcp等协议
- OSI第7层(应用层)代理, 通常是http代理, 基于url和ip以及cookie和请求头针对web服务进行分流, 通过虚拟的 URL 或主机名接收请求,然后再分配到真实的服务器, 是基于URL等应用层信息的负载均衡
- OSI第7层(应用层)代理, 可以是正向代理,也可以是反向代理
四层代理
- OSI第4层(传输层)代理, 是写在stream模块中,与http模块并列,且做代理时源码编译需要添加 --with-stream 模块进行编译
- OSI第4层(传输层)协议, 是基于TCP/UDP协议
- OSI第4层(传输层)代理, 是基于ip和端口的转发, –with-stream 是添加四层代理模块,可以用来创建其他业务集群,比如ssh,mysql, 所谓四层负载均衡,也就是主要通过报文中的目标地址和端口,再加上负载均衡 设备设置的服务器选择方式,决定最终选择的内部服务器,它一般走的是tcp,udp协议
- OSI第4层(传输层)代理, 一般都是反向代理
正向代理示例
server {
resolver 8.8.8.8;
location / {
proxy_pass http://$host$request_uri;}}
反向代理示例
server {
location / {
proxy_pass http://localhost:8000;}}
服务器集群配置信息:
服务器IP 安装服务
192.168.1.100 nginx, sshd
192.168.1.101 nginx, sshd
4层反向代理示例
- 登录192.168.1.100服务器 vim /etc/nginx/conf.d/tcp_4_proxy.conf
stream {
upstream backend {
server 192.168.1.100:22;
server 192.168.1.101:22;}
server {
listen 12345;# 监听端口
proxy_pass backend;# 调用集群}}
7层反向代理示例
- 登录192.168.1.100服务器 vim /etc/nginx/conf.d/http_7_proxy.conf
upstream web {
server 192.168.1.100:80;
server 192.168.1.101:80;}
server {
listen 80;
location / {
proxy_pass http://web;# 要代理的后端服务器地址(可以使服务器集群)
root html;
index index.html index.htm;}}
7层正向代理示例
- 登录192.168.1.100服务器 vim /etc/nginx/conf.d/http_7_proxy.conf
http {
server {
listen 3128;# 正向代理服务的端口
location / {
proxy_pass http://192.168.1.101:22;# 要代理的后端服务器地址(单台服务器)
proxy_set_header Host $http_host;# 将原始请求的Host头发送到后端服务
proxy_set_header X-Real-IP $remote_addr;# 将客户端的真实IP传递给后端服务
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;# 将代理链中的所有IP记录下来}}}
upstream模块参数
参数 说明
server 负载后面的RS配置,可以是ip或者域名
weight 请求服务器的权重。默认值为1,越大表示接受的请求比例越大
max_fails nginx 尝试连接后端主机失败的次数,需要配合proxy_net_upstream,fastcgi_next_upstream和memcached_next_upstream这三个参数来使用
fail_timeout 在max_fails定义的失败次数后,距离下次检查的时间间隔,默认10s
backup 热备配置,标志这台服务器作为备份服务器,若主服务器全部宕机了,就会向它转发请求
down 表示这个服务器永不可用,可配合ip_hash使用
集群常用软硬件
- 常用开源集群软件有:lvs,keepalived,haproxy,nginx,apache,heartbeat
- 常用商业集群硬件有:F5, Netscaler,Radware,A10等
负载均衡算法
rr轮询(默认)
- 默认调度算法,每个请求按时间顺序逐一分配到不同的后端服务器,宕机的服务器会自动从节点服务器池中剔除。
upstream server_pool {
server 192.168.1.100;
server 192.168.1.101;}
wrr加权轮询(weight)
- 在rr轮询算法的基础上加上权重,权重和用户访问成正比,权重值越大,被转发的请求也就越多, 加权轮询应用于服务器性能不等的集群中,使资源分配更加合理化
upstream server_pool {
server 192.168.1.100 weight=5;
server 192.168.1.101 weight=10;}
ip_hash(会话保持)
- 每个请求按访问IP的hash结果分配,同一个IP客户端固定访问一个后端服务器。可以保证来自同一ip的请求被打到固定的机器上,可以解决session问题
upstream server_pool {
ip_hash;
server 192.168.1.100;
server 192.168.1.101;}
fair(动态调度算法)
- 此种算法根据后端服务器的响应时间来分配请求,响应时间短的优先分配。 Nginx 本身是 不支持 fair 的,如果需要使用这种调度算法,必须下载Nginx的 upstream_fair 模块
upstream server_pool {
server 192.168.1.100;
server 192.168.1.101;
fair;}
url_hash算法(web缓存节点)
- 根据访问URL的hash结果来分配请求,让每个URL定向到同一个后端服务器, 同样,Nginx本身是不支持url_hash,如果需要使用这种调度算法,必须安装Nginx的hash模块软件包。
upstream server_pool {
server 192.168.1.100;# 指定后端服务器的地址和端口
server 192.168.1.101;hash$request_uri;# 使用哈希方法来分配请求并使用请求的URI作为哈希的键
hash_method crc32;# 使用CRC32算法来计算哈希值}
本文转载自: https://blog.csdn.net/Mr_Sunqq/article/details/141712367
版权归原作者 庆 、 所有, 如有侵权,请联系我们删除。
版权归原作者 庆 、 所有, 如有侵权,请联系我们删除。