nginx正向代理、反向代理、负载均衡

目录

一、nginx的代理:

1、nginx中有两种代理方式:

2、四层代理和七层代理之间的区别

3、场景选择:

4、配置模块:

5、正向代理:

6、反向代理:

7、负载均衡的算法:

1、加权轮询(weight):

2、最少连接数算法:

3、ip_hash:

4、url_hash:

8、基于域名的反向代理:

9、四层的反向代理配置:

二、总结:


一、nginx的代理:

1、nginx中有两种代理方式:

七层代理:http协议。代理的是http的请求和响应。客户端请求代理服务器,由代理服务器转发客户端的http服务请求,转发到内部的服务器(服务器可以是单台也可以是一组)。后端的webserver,再把响应送达代理服务器,最后再到客户端

反向代理:客户端访问的是代理服务器,代理服务器转发http请求,但是客户端不知道访问的是那一台服务器

正向代理:客户端也是访问代理服务器,代理服务器转发请求,客户端只知道代理服务器的地址,后端的webserver的IP地址客户端也不知道。

四层代理:tcp/udp的流量转发。基于tcp/ip协议层的转发代理方式,基于ip和端口号实现负载均衡或者正向代理。四层代理无法获取http请求中的URL信息,只能对tcp/udp的数据包进行转发。

2、四层代理和七层代理之间的区别
  1. 七层代理走的用户态,需要对http的请求进行处理和解析,解析过程中可以根据请求头和请求体的内容进行流量控制、内容过滤等操作。转发速度比较慢,但是提供的功能更加高级,用户的体验更好

四层代理是基于IP地址和端口号,只负责将ip和端口转发到后端服务器,不对请求做任何处理。只是负责转发而已。而且四层走的是内核,四层转发速度较快。四层代理无法提供更高级的功能,只是转发。

3、场景选择:

七层代理:需要对http请求进行控制和处理,只能选择七层代理(常见的代理方式)

四层代理:只需要转发tcp或者udp的数据包,可以选择四层,也可以选择七层。

七层可以对ip和端口进行转发,也可以对域名进行代理

四层只能是ip和端口

负载均衡算法:有些是无法再四层代理使用的

4、配置模块:

七层代理upstream只能写在http的全局配置当中。

upstream:用于处理http请求,支持反向代理,负载均衡,缓存功能,在upstream中可以配置多个服务器

四层代理stream只能写在全局模块中单独配置

stream:无谓协议,只管流量

5、正向代理:

类似于科学上网VPN,加速器。

配置代理直接在location中写。

proxy_pass配置代理

正向不常用

6、反向代理:

企业架构都是反向代理:

客户端通过代理服务器访问,但是后端有多台

七层反向只能写在http的全局配置中

七层反向代理:

七层代理:

在http全局配置

upstream test(自定义名)  {

server 20.0.0.30;

server 20.0.0.40;

}

location {

proxy_pass http://test;

}

7、负载均衡的算法:
  1. rr(round robin)负载均衡最简单的算法,轮询。请求轮流分配到后端服务器。他是默认算法,可以不加。

默认算法轮询的特点:每发起一次都是新的请求(返回码200),在服务器上没有缓存。

适用于服务器处理能力相近,而且对访问量比较小的网站使用

1、加权轮询(weight):

建立在默认轮询算法的基础之上。为后端服务器分配不同的权重,处理能力强的服务器可以分配权重值要高一点

轮询次数基本上按照权重分配。服务器上也没有缓存。

适用于中大型网站可以使用加权轮询。

有可能导致权重高的服务器会被频繁的请求响应,权重低的可能闲置。回合另外一种算法配合使用(下面的最少连接数算法)

weight=20;

2、最少连接数算法:

会把请求发送到连接数量较少的后端服务器。

可以单独使用,但是一般都是和加权算法一起使用,避免所有的请求都发送到处理能力强的服务器。提高整个集群的稳定性。

中型网站,大型网站,日常访问可以满足

least_conn;

3、ip_hash:

iphash会根据客户端的IP地址解析hash值,然后将请求发送到对应的后端服务器,下一次用户再访问时,同一客户端的请求将会被分配到同一台服务器

ip_hash

ip_hash第一次访问之后,后续访问是有缓存的。

如果后端服务器的数量发生变化,可能会进行重新分配

ip_hash适用于高并发,请求不会跳转,请求的是缓存。减轻服务器的压力。

4、url_hash:

根据请求的URL地址计算hash值,后面都和ip_hash一样。将请求发送到相应的后端服务器。相同的URL地址,请求会被发送到同一个服务器

hash $request_uri consistent;

url_hash和ip_hash 是可以结合在一块使用的,可以适用于并发较高的场景,主要是ip_hash和url_hash 访问之后第二次都是访问缓存,可以降低服务器的压力

8、基于域名的反向代理:

配置两台客户端nginx.conf的域名 test、koeda

配置本地hosts映射:代理服务器和后端服务器都需要配置映射

总结:基于域名的方向代理:

格式:

upstream test {

server www.test.com;

server www.koeda.com;

}

location {

proxy_pass http://test;

proxy_set header HOST $host;

proxy_set header X-Real-IP $remote_addr;

}

9、四层的反向代理配置:


四层只能配置在全局块中

ip+端口号

这里监听端口设置80,和下面冲突,必须要改一个,不然两个都占用起不来报错

LISTEN

在四层代理中,可以使用加权轮询和最小连接数算法也可以实现负载均衡

但是ip_hash和uri_hash不可以在stream中使用

四层不能对请求处理,只是转发数据包。不能分析客户端地址和URL

http七层代理可以请求地址和请求的URL

二、总结:

四层代理和七层代理:

四层:基于tcp/udp协议的ip+端口号,只做数据包转发,不涉及对请求的任何操作和处理

七层:基于http协议,对请求的内容进行处理,处理完之后转发到后端服务器

转发速度:

四层的数据块,内核转发,不做任何处理,转发速度必然快。

七层走的是用户态,需要对内容进行处理,转发速度相对比较慢

正向代理和反向代理:

正向代理:都是通过代理服务器访问,明确指向后端服务器。一般都是一对一。

反向代理:都是通过代理服务器访问,一个代理服务器会有多台后端服务器供代理服务器进行转发请求。一对多

只有一对多,才涉及负载均衡的算法问题。

负载均衡算法:

  1. 轮询,默认算法,可以不加
  2. 加权轮询:给后端服务器设置一个不同的权重,通过权重分发客户端的请求。权重高的轮询的次数多,权重少的轮询的次数少,但是不绝对。权重高的服务器会被频繁请求。

weight=3

  1. 最小连接数算法,会把请求转发到当前连接数较小的服务器,可以避免请求集中到高性能或者高权重的服务器。可以和加权轮询配合使用。使用大部分场景
  2. ip_hash,根据客户端请求的IP地址生成一个hash值,然后转发到后端服务器,下一次再访问还是之前的服务器,而且还有缓存。

需要把请求的客户端地址,转发到固定的服务器,可以使用这个方法。大并发可以,小并发也可以。但是后端服务器发生变化,请求的后端服务器也会发生变化(后端服务器数量变少了,后端服务器的数量增加了,请求的地址未必会变。)

缩容的情况:业务量比较少,不需要那么多后端服务器,才会缩容。一般只会扩。

  1. url_hash:根据请求的url地址生成一份hash值,然后转发到后端服务器,但是下一次访问如果请求的url不变,还是访问上一次的后端服务器。而且也有缓存。

请求的url地址发生变化或者后端服务器的数量发生变化,可能会变更后端服务器的地址。

配置方式:

http七层正向和反向:

正向:

location {

proxy_pass http://20.0.0.30;

}

http的全局配置中定义upstream模块

负载均衡的算法配置在upstream模块中

upstream test {

least_conn;

ip_hash;

hash $request_uri consistent;

server 20.0.0.30 weight=2;

server 20.0.0.40 weight=3;

#什么都不加,默认轮询

}

server块的location当中:制定代理服务器的方法

location {

proxy_pass http://test

}

四层:

只能写在全局配置中:

stream {

upstream test{

server 20.0.0.30:80;

server 20.0.0.40:80;

#只能默认,加权,最小连接数轮询

}

}

server {

listen 80;

#不能和域名监听的端口重合

proxy_pass http://test

}

实验:

正向代理、反向代理默认轮询、加权轮询、最小连接数、ip_hash、hash $request_uri consistent

基于域名

四层反向代理配合算法

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
同一ip(都是80端口)可以绑定无数个域名 配置简单 里面包含一个配置文档:配置文档.doc 看一遍 大部分人都会设置了。 内容如下: NGNIX配置文档 1.解压文件到相应文件夹下(我解压到D:/下) (这里是图片) 目录结构如上 2.在D:\nginx\目录下用记事本新建一个文本文档改名为 proxy.conf。 proxy.conf里面的内容格式如下: server { listen 80; server_name www.*****.com; location / { proxy_pass http://192.168.45.1:8045; proxy_redirect off; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } } (完整拷贝上面的内容server_name www.*****.com; 这里面的域名即是来访域名 proxy_pass http://192.168.45.1:8045; 这里面的域名(http://192.168.45.1:8045)即是内部跳转的地址,将该内容拷贝多份实现不同来访域名的跳转) 如下: 3.找到D:\nginx\conf下nginx.conf文件用记事本打开 在文段末尾大括号前加上 include proxy.conf;(就是加载刚刚新建的那个文件(注意路径)) 4.进入cmd 进入D盘: d: 进到nginx文件夹下:cd nginx 启动nginx.exe:start nginx Cmd窗口会闪一下 进程里面会多了个 浏览器里面输入:http://127.0.0.1 将出现: Nginx的欢迎界面。 注: nginx -s stop // 停止nginx nginx -s reload // 重新加载配置文件 nginx -s quit // 退出nginx nginx-1.3.9.zip(这个版本) (1分钟搞定只是夸张说法啦,给你增加信心的啦,真的操作起来,因人而异,没搞定的耐心再试试,自己xp系统亲测成功,不喜欢的无拍砖哦,实在搞不定的加我qq852208555 一起研究下 谢谢!)

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值