nginx的正向代理和反向代理
正向代理以及缓存配置:
代理:客户端不再是总结访问服务端,通过代理服务器访问服务端。
正向代理:面向客户端,通过代理服务器的IP地址访问目标服务端。
服务端只知道代理服务器的地址,真正的客户端ip可以隐藏
科学上网用的就是典型的正向代理
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
cjarset utf-8
set KaTeX parse error: Expected '}', got 'EOF' at end of input: …xy_pass http://url;
#请求转发到
u
r
l
的地址,通过代理服务器地址可以直接访问百度
h
t
t
p
:
/
/
url的地址,通过代理服务器地址可以直接访问百度 http://
url的地址,通过代理服务器地址可以直接访问百度http://url:端口
#设置页面缓存
procy_buffers 256 4k;
#设置缓冲区为256个,大小是4k
proxy_max_temp_file_size 0;
#nginx服务器作为代理的时候暂时存放的响应数据的最大临时文件的大小为0
procy_cache_valid 200 302 1m;
#当状态码是200和302时,缓存的有效期是1分钟
proxy_cache_valid 301 1h;
#当状态码是301,缓存有效期是一小时
proxy_cache_valid any 1m;
#除了上述的三个状态码,其他的缓存保存时间是一分钟
vim nginx.conf
location / {
root html;
index index.html index.htm;
proxy_pass http://192.168.233.20:8080;
#配置代理地址
}
server {
listen 8888;
server_name localhost;
resolver 8.8.8.8 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地址添加在请求头当中
# 请求转发到$url的地址,通过代理服务器地址可以直接访问百度 http://$url:端口
# 设置页面的缓存:
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分钟。
}
反向代理;
正向代理我们是知道代理服务器的地址,也知道网民访问的web服务器。
反向代理,客户端还是访问的代理地址,但是具体的访问web服务器是哪一台,我们并不知道。
作用:把请求分配到多个后台服务器上,分担服务器的负载,提供系统的可用性和稳定性
缓存加速
安全保护
四层代理和七层代理之间的区别
正向代理,http模块的server和location
http模块配置的都是7层
7层就是应用层,使用的是http协议,可以对请求进行解析和处理,7层代理走到是用户态,应用协议和程序功能。
7层的处理速度相对比较慢,但是可以提供更高级的功能和更好的用户体验。
既可以是域名也可以是ip+端口
四层是传输层,IP+端口,请求转发到后端,无法对请求进行深入的解析和处理。只是对请求流量的转发。
四层转发是内核态,内核处理,内核转发,所以速度较快。
应用场景:
7层代理,一般都是对外提供访问,需要对请求进行处理。包括安全,过滤,流量控制等等。
4层代理,一般都是内部使用,不需要对流量包括请求做特殊处理。
配置方法以及负载均衡的算法:
反向代理=负载均衡
配置方法:
7层只能写在http模块当中,命令 upstream,只能在http的大模块中,不能写在server,也不能在location
4层只能写在全局配置中,不能写在http模块当中,命令 stream
test1 192.168.233.10 代理—配置反向代理
test2 192.168.233.20 后台服务器
test3 192.168.233.30 后台服务器
客户端:谷歌浏览器
#给这个七层代理命名,在模块当中定义后台的服务器,server开头即可,后面是服务器的IP地址。
upstream xy102 {
server 192.168.233.20;
server 192.168.233.30;
}
#在location中定义代理转发的方法
proxy_pass http://xy102;
负载均衡的算法
1.轮询round robin rr : 轮询算法是最简单也是最基础的算法,也是默认的算法。请求轮流分配到后端服务器。
轮询算法适用于后端服务器处理能力相同的情况,访问量不大的情况。默认算法,可以不加。
2.加权轮询:在轮询的基础之上,给每个后台服务器设置不同的权重。老赖的分配不一定是按照权重比来的,权重高的被转发的概率大,权重低的相对较小
后端的服务器的性能有差异,性能高,权重相对更高,性能低,权重相对小一些。
weight
server 192.168.233.20 weight=3;
server 192.168.233.30 weight=2;
3.最小连接数算法:least_conn 会把请求发送到当前连接数较少的后端服务器上。
后端服务器处理任务和耗时不同的情况,可以避免请求集中在处理能力更强的后端服务器上。
least_conn
server 192.168.233.20 weight=4;
server 192.168.233.30 weight=2;
4.ip_hash* 怎么做会话保持?phash根据算法,计算客户端的ip当中的hash值,然后将请求转发到相应的服务器。
在第一次访问网址时,就会计算出这个hash值,会把请求分到下一个服务器,但是下一次客户端如果使用相同的IP地址再次访问,就不再分配到其他的服务器。除非后台服务器的算法变更,杭州后台的服务器数量发生了变化。这时才会更改访问的服务器。
适用场景,高并发。如果客户端进来之后,不停的轮换服务器,反而会加重服务器的负担,固定在一台服务器上,降低了代理服务器的压力,同时也节约了资源。
nginx当中怎么实现会话保持?
ip_hash可以实现会话保持
sessionc动态页面里面配置会话。
5.URL_hash 根据请求的url地址来计算hash值,然后再转发,如果每次请求的url都一样,就会被分配到同一个服务器.
转发的地址发生变化,后台服务器清理缓存或者后台服务器的数量发生变化
hash $request_uri consistent;
server 192.168.233.20 weight=4;
server 192.168.233.30 weight=2;
以上都是在7层当中使用的,4层没有ip_hash和url_hash算法。
基于域名实现负载均衡
vim /etc/local/nginx/conf
vim nginx.conf
upstream xy102 {
server www.xy22.com;
server 192.168.233.30;
}
server {
listen 80;
server www.xy11.com
}
location / {
root html;
index index.html;
proxy_pass http://xy102;
}
#将IP地址和域名做映射
vim /etc/hosts
192.168.233.10 www.xy11.com
192.168.233.20 www.xy22.com
192.168.233.30 www.xy33.com
四层代理:
配置方式只能在全局模块,算法也比较少,只能是ip+端口。
stream {
upstream test {
server 192.168.233.20:8081;
server 192.168.233.30:80;
}
server {
listen 81;
proxy_pass test;
}
}