主要内容:
Nginx调度器(7层代理服务器Http、Nginx,4层代理服务器SSH)、配置upstream服务器集群池属性,HTTP错误代码,Nginx优化(自定义404错误代码、状态页面显示、ab压力测试、客户端开启缓存、414错误长地址码代理)
提前准备需要的环境:
① 创建虚拟机,最小化方式安装,按要求配置IP且同网段之间互通,配置YUM,修改主机名
proxy 192.168.2.5(vmnet2) 192.168.4.5(vmnet4) //必须
web1 192.168.2.100(vmnet2) //必须
web2 192.168.2.200(vmnet2) //必须
client 192.168.4.10(vmnet4) //可选,主要作为测试
② 由于最小化安装缺少许多工具包(web1和web2主机都需要)
[root@web1 ~]# yum -y install vim net-tools bash-completion psmisc httpd
[root@web2 ~]# yum -y install vim net-tools bash-completion psmisc httpd
③ 建议关闭防火墙(# systemctl stop firewalld)
④ proxy环境准备(还原Nginx)
[root@proxy ~]# cd ~/lnmp_soft/nginx-1.17.6/
[root@proxy nginx-1.17.6]# killall nginx
[root@proxy nginx-1.17.6]# rm -rf /usr/local/nginx/
[root@proxy nginx-1.17.6]# make install
[root@proxy nginx-1.17.6]# cd /usr/local/nginx/
[root@proxy nginx]# ls
conf html logs sbin
⑤ web1环境准备(使用httpd)
[root@web1 ~]# echo "I am web1" > /var/www/html/index.html
[root@web1 ~]# systemctl restart httpd
[root@web1 ~]# netstat -nuptl | grep :80
tcp6 0 0 :::80 :::* LISTEN 1499/httpd
⑥ web2环境准备(使用httpd)
[root@web2 ~]# echo "I am web2" > /var/www/html/index.html
[root@web2 ~]# systemctl restart httpd
[root@web2 ~]# netstat -nuptl | grep :80
tcp6 0 0 :::80 :::* LISTEN 1497/httpd
⑦ 使用proxy客户机curl测试访问:
[root@proxy ~]# curl 192.168.2.100
I am web1
[root@proxy ~]# curl 192.168.2.200
I am web2
一、HTTP代理和调度
HTTP代理是一种中间服务器,它充当客户端和服务器之间的中介。客户端首先将请求发送到代理服务器,然后代理服务器再将请求转发到目标服务器。目标服务器的响应也会先经过代理服务器,然后再返回给客户端。通常情况下,代理又分为正向代理和反向代理。
1、正反向代理(Proxy)
正向代理(Forward Proxy)
正向代理通常用于客户端,帮助客户端访问互联网上的资源。它可以隐藏客户端的真实IP地址,提供访问控制、内容过滤、缓存加速等功能。例如,企业网络中的代理服务器可以限制员工访问某些网站,或者加速访问常用资源。
反向代理(Reverse Proxy)
反向代理通常用于服务器端,帮助服务器处理客户端请求。它可以隐藏服务器的真实IP地址,提供负载均衡、安全防护、缓存加速等功能。例如,大型网站通常使用反向代理服务器来分发请求到多个后端服务器,提高系统的可用性和性能。
反向代理服务器架设在服务器端,通过缓冲经常被请求的页面来缓解服务器的工作量,将客户机请求转发给内部网络上的目标服务器;并将从服务器上得到的结果返回给Internet上请求连接的客户端,此时代理服务器与目标主机一起对外表现为一个服务器;目前web网站使用反向代理,除了可以防止外网对内网服务器的恶性攻击、缓存以减少服务器的压力和访问安全控制之外,还可以进行负载均衡,将用户请求分配给多个服务器。
Nginx反向代理语法格式:
在http{}内加upstream{},location{}内添加proxy_pass
2、HTTP调度算法(Scheduling)
HTTP调度通常指的是在多个HTTP服务器之间分配和调度请求的过程。这种调度可以基于多种策略,例如负载均衡、故障转移、会话保持等。HTTP调度的主要目的是提高系统的可用性、性能和可靠性。
负载均衡
HTTP调度中最常见的一种形式。它通过将客户端的请求分发到多个服务器上,以确保每个服务器的负载相对均衡,从而提高整体系统的处理能力和响应速度。常见的负载均衡算法包括轮询(Round Robin)、最少连接(Least Connections)、IP哈希(IP Hash)等。
故障转移
指在某个服务器发生故障时,自动将请求转移到其他正常工作的服务器上,以确保服务的连续性。这通常通过健康检查和故障检测机制来实现。
会话保持(Session Persistence)
指确保同一个客户端的请求始终被分发到同一个服务器上,以保持会话状态的一致性。这在需要会话状态的应用中尤为重要,例如在线购物车、登录状态等。
3、服务器组主机状态类型
在服务器组(如Nginx、HAProxy等负载均衡器)中,主机状态类型如 down、max_fails 和 fail_timeout 是用于管理和监控后端服务器状态的重要参数。这些参数帮助负载均衡器决定如何处理对特定服务器的请求,以及在服务器出现故障时如何进行故障转移。
① down:
- down 状态表示该服务器当前被标记为不可用。负载均衡器不会将任何请求分发到处于
down
状态的服务器。这通常用于维护或临时禁用某个服务器时。- 示例(Nginx):
server 192.168.1.1:80 down;
② max_fails:
- max_fails 参数定义了在某个时间段内,负载均衡器允许对某个服务器请求失败的次数。当达到这个次数时,负载均衡器会认为该服务器不可用,并在
fail_timeout
时间段内不再向其分发请求。- 示例(Nginx):
server 192.168.1.2:80 max_fails=3;
③ fail_timeout:
- fail_timeout 参数定义了在达到
max_fails
次数后,负载均衡器将服务器标记为不可用的时间段。在这个时间段内,负载均衡器不会向该服务器分发请求。过了这个时间段后,负载均衡器会再次尝试向该服务器发送请求,以检查其是否恢复正常。- 示例(Nginx):
server 192.168.1.3:80 max_fails=3 fail_timeout=30s;
示例:假设我们有一个Nginx配置,其中有三台后端服务器,其中一台被标记为 down,另外两台设置了 max_fails 和 fail_timeout:
upstream backend {
server 192.168.1.1:80 down;
server 192.168.1.2:80 max_fails=3 fail_timeout=30s;
server 192.168.1.3:80 max_fails=2 fail_timeout=10s;
}
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://backend;
}
}
解释说明:
192.168.1.1:80 被标记为 down,不会接收任何请求。
192.168.1.2:80 允许最多失败3次,失败后在30秒内不会接收请求。
192.168.1.3:80 允许最多失败2次,失败后在1