Nginx的正向代理和反向代理

一、Nginx的正向代理

代理:客户端不再是直接访问服务器,通过代理服务器访问服务端。

正向代理以及缓存配置

正向代理:面向客户端,我们通过代理服务器的IP地址,访问目标服务端。

服务端只知道代理服务器的地址,真正的客户端IP可以隐藏(实际也未必能隐藏)。

科学上网就是典型的正向代理。

可以在location模块中配置代理地址

proxy_pass http://20.0.0.20:8080;

配置正向代理的示例:

server {
	listen			8888;
	server_name  localhost;
	resolver 218.2.135.1 valid=300 ipv6=off;
	#设置dns解析地址,解析器缓存时间300秒,每300秒重新解析一次,关闭ipv6
	resolver_timeout 3s;
	#解析超时的时间3秒
	proxy_read_timeout 30s;
	#读取代理服务器的超时时间,30s,默认是60s
	proxy_send_timeout 30s;
	#向服务端发送数据的超时时间是30s,默认是60s
	proxy_connect_timeout 30s;
	#和服务器建立连接的超时时间30s,默认60s
	charset utf-8;
	
	#access_log  logs/host.access.log  main;
	
	location / {
		root html;
		index index.html index.htm;
		proxy_pass $scheme://$http_host$request_uri;
		proxy_set_header Host $http_host;
		proxy_set_header X-Real-IP $remote_addr;
		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
		proxy_set_header X-Forwarded-Proto $scheme;
		proxy_set_header X-Forwarded-Host $host;
		proxy_set_header X-Forwarded-Port $server_port;
		#需要把客户端的真实IP,客户端的主机名,客户端的请求方式,
		#服务端的端口,真实的IP地址,添加在请求头当中
		#请求转发到目标地址,通过代理服务器地址可以直接访问
		proxy_buffers 256 4k;
		#设置缓冲区256个,大小4k
		proxy_max_temp_file_size 0#Nginx服务器作为代理的时候暂时存放的响应数据的最大临时文件大小,此处为0,不使用临时文件
		proxy_cache_valid 200 302 1m;
		#当状态码是200和302时,缓存的有效期是1分钟
		proxy_cache_valid 301 1h;
		#状态码是301时,缓存的有效期是1小时
		proxy_cache_valid any 1m;
		#除了上述的三个状态码,其他的缓存保存时间1分钟
	
	}
}

通过 curl -x 代理服务器地址 访问地址 这样传参的方式使用代理服务

二、Nginx的反向代理

正向代理我们知道代理服务器的地址,也知道我们访问的web服务器。

反向代理,客户端还是访问的代理地址,但是具体的访问web服务器是哪一台我们并不知道。反向代理又称负载均衡

作用:请求分配到多个后台服务器上,分担服务器的负载,提高系统的可用性和稳定性,可以实现缓存加速和安全保护。

2.1 四层代理和七层代理

四层代理和七层代理的区别

正向代理,http模块的server和location模块。http模块配置的都是七层(应用层),使用的是http协议,可以对请求进行解析和处理。七层代理走的是用户态,应用协议和程序功能。

七层的处理速度相对比较慢,但是可以提供更高级的功能和更好的用户体验。

七层既可以是域名,也可以是IP加端口。

四层是传输层,只能IP+端口,请求转发到后端,无法对请求进行深入的解析和处理,只是对请求的流量的转发。

四层转发是内核态,内核处理,内核转发,所以速度较快。

应用场景

七层代理,一般都是对外提供访问,需要对请求进行处理,包括安全、过滤、流量控制。一般基于cookie。

四层代理,一般都是内部使用,不需要对流量、请求做特殊处理。基于源IP地址。

2.2 负载均衡的算法

  1. 轮询 round robin (rr):轮询算法是最简单,也是最基础的算法,也是默认算法,请求轮流分配到后台服务器。

    轮询算法适用于后端服务器处理能力相同,访问量不大的情况。默认算法,可以不加。

例:给七层代理命名,在模块当中定义后台的服务器,server开头即可,后面是服务器的IP地址

upstream yang {
	server	20.0.0.20;
	server	20.0.0.30;
}

在location模块中定义代理转发的方法

location / {
	proxy_pass http://yang
}
  1. 加权轮询 :在轮询的基础之上,给每个后台服务器不同的权重。流量的分配不一定严格按照权重比来的

    后端服务器的性能有差异,性能高的,权重可以高一点;性能低的,权重可以小一点

upstream yang {
	server	20.0.0.20 weight=3;
	server	20.0.0.30 weight=2;
}
  1. 最小连接数算法,语法least_conn,会把请求发送到当前连接数较少的后端服务器上。

    用于后端服务器处理任务时耗时不同的情况,可以避免请求集中在处理能力更强的服务器上。

upstream yang {
	least_conn;
	server	20.0.0.20;
	server	20.0.0.30;
}
  1. ip hash :(实现会话保持)根据算法,计算客户端的IP地址的hash值,然后将请求转发到相应的服务器。

    在第一次访问网站之时,就会计算出这个hash值,会把请求分到一个服务器,当下一次客户端使用相同的IP地址再次访问,就不再分配到其他的服务器,依然分配到上一次的服务器。除非后台服务器清理缓存或者后台服务器的数量发生了变化,这时才会更改访问的服务器。

    适用场景:高并发。如果客户端进来之后,不停地轮询服务器,反而会加重服务器的负担。这样将客户端访问固定在一台服务器上,降低了代理服务器的压力,同时也节约了资源。

    问:Nginx 中怎么实现会话保持(session_)?

    答:使用ip_hash可以实现会话保持

upstream yang {
	ip_hash;
	server	20.0.0.20 weight=3;
	server	20.0.0.30 weight=2;
}
  1. url_hash :根据请求的URL地址来计算hash值,然后再转发 ,如果每次请求的URL都一样,就会被分配到同一个服务器。转发的地址发生变化中,后台服务器清理缓存或者后台服务器的数量发生了变化,这时才会更改访问的服务器。
upstream yang {
	hash $request_uri consistent;
	server	20.0.0.20 weight=3;
	server	20.0.0.30 weight=2;
}

以上都是在七层当中使用的,四层没有ip_hash和url_hash的算法。

2.3 代理配置方法

七层只能写在http模块当中,命令 upstream,只能写在http的环境模块中,不能写在server和location模块中

四层只能写在全局配置当中,不能写在http模块,命令 stream

例:基于域名实现负载均衡

  • test1 20.0.0.10 www.ykw11.com代理 ------配置反向代理

  • test2 20.0.0.20 www.ykw22.com 后台服务器1

  • test3 20.0.0.30 www.ykw33.com 后台服务器2

  1. 四层代理

四层代理只能写在全局环境中,不能写在http模块里

注意:写在四层里必须指定后台服务器的地址和端口

stream {
	upstream test {	
		server 20.0.0.20:80;
		server 20.0.0.30:80;
	}
}
server {
	listen 8000;
	#如果这里写80端口,转发会和Nginx本身的端口冲突
	proxy_pass test;
}
  1. 七层代理

test1 20.0.0.10 代理 ------配置反向代理

test2 20.0.0.20 后台服务器1

test3 20.0.0.30 后台服务器2

客户端:谷歌浏览器

七层代理写在http模块里,默认端口80

http {
	#......其他配置
	upstream test {	
		server 20.0.0.20;
		server 20.0.0.30;
	}
	server {
	listen 80;
	location / {
		proxy_pass test;
}	}
}
  • 19
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值