说反向代理之前,我们先看下什么是正向代理?在现如今的网络环境下,我们想要看看国外的新闻,技术文章时,用我们的浏览器是无法访问的。这时,我们可以找到一个可以访问国外网站的代理服务器,我们将请求发送给代理服务器,代理服务器去访问国外的网站,然后将访问到的数据传递给我们。上述的代理模式就是正向代理。
正向代理模式中,客户端知道访问的服务器地址,但是服务器只知道访问它的是哪台代理服务器,而不知道具体的客户端的信息。
正向代理
接下来,看看什么是反向代理?反向代理模式中用户访问服务器,一般都是访问反向代理服务器,反向代理服务器位于用户与目标服务器之间,但是对于用户而言,反向代理服务器就相当于目标服务器,即用户直接访问反向代理服务器就可以获得目标服务器的资源。同时,用户不需要知道目标服务器的地址,也无须在用户端作任何设定。反向代理服务器通常可用来作为Web加速,即使用反向代理作为Web服务器的前置机来降低网络和服务器的负载,提高访问效率。
反向代理
Nginx怎么配置反向代理?
location / {
proxy_pass http://test.com;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
通过proxy_pass指令。将配置的请求,全部转发到http://test.com中。客户端知道的是反向代理服务的地址,而不知道具体请求的是哪个后端的服务器。
常用的搭配proxy_pass的配置。
proxy_redirect off;
重写后端服务器的location和refresh头。
proxy_set_header Host $host;
重写发送给后端服务器的请求头内容。
proxy_connect_timeout 300;
代理服务器接收请求到连接后端服务器的最长等待时间。
proxy_buffer_size 4k;
后端响应的缓冲区数量和大小。
proxy_buffers 4 32k;
请求后端的缓冲区数量和大小。
proxy_busy_buffers_size 64k;
当代理服务器忙时,缓冲区的最大值。
proxy_send_timeout 300
将超时与请求传输到代理服务器分配。
proxy_read_timeout 300
NGINX等待获取请求响应的时间。
什么是负载均衡
随着网站访问量的快速增长,单台服务器已经无法承担大量用户的并发访问,必须采用多台服务器的协同工作,以提高计算机的处理能力和计算强度,满足当前的业务量的需求。而如何在完成同样的功能的多个网络设备之间实现合理的业务量的分配,使之不会出现一台设备过忙,而其他的设备却没有充分使用情况。要解决这一问题,可以采用负载均衡的方法。
负载均衡是多台服务器以对称的方式组成一个服务集合,每台服务器都有等价的地位,都可以单独对外提供服务而无须其他服务器的辅助。
Nginx怎么做负载均衡
upstream test.com {
server 192.168.1.90:8080;
server 192.168.1.91:8080;
}
通过upstream指定,默认采用的轮询机制,按照时间顺序将请求发送到不同的server。也可以有其他的负载均衡策略。例如,权重,最少连接等。
其他搭配指令
ip_hash:指令通过ip地址生成hash值,可以确保相同客户端的请求一直发送到相同的服务器。运用ip_hash可以解决session丢失的问题。可以查看我之前的文章:session一致性。
upstream test.com {
ip_hash;
server 192.168.1.90:8080;
server 192.168.1.91:8080;
}
keepalive:指令指定每个worker进程缓存后端服务器的长连接数。
fail-timeout、max-fails:fail_timeout和max-fails搭配使用,设置在fail_timeout参数设置的时间内最大失败次数,如果在这个时间内,所有针对该服务器的请求都失败了,那么认为该服务器会被认为是停机了。
upstream backend-others {
server 192.168.1.91:8001 max_fails=0 fail_timeout=10s;
server 192.168.1.92:8002 max_fails=0 fail_timeout=10s;
server 192.168.1.93:8003 max_fails=0 fail_timeout=10s;
keepalive 20000;
}
weight:参数用于制定轮询的几率,weight默认值为1;weight的数值和被访问的几率成正比。
upstream foo {
server 192.168.1.91:8001 weight=2;
server 192.168.1.92:8002;
server 192.168.1.93:8003 backup;
server 192.168.1.94:8004 max_fails=3 fail_timeout=20s;
}
least_conn:把请求转发给连接数较少的后端服务器。轮询算法是把请求平均的转发给各个后端,使它们的负载大致相同;但是,有些请求占用的时间很长,会导致其所在的后端负载较高。这种情况下,least_conn这种方式就可以达到更好的负载均衡效果。
upstream foo {
least_conn;
server 192.168.1.91:8001 weight=2;
server 192.168.1.92:8002;
server 192.168.1.93:8003 backup;
server 192.168.1.94:8004 max_fails=3 fail_timeout=20s;
}
更多的配置可以查看Nginx的中文文档:
https://www.nginx.cn/doc/standard/httpproxy.html
Copyright © 2024 妖气游戏网 www.17u1u.com All Rights Reserved