nginx反向代理与负载均衡

小明 2025-05-05 11:25:54 8

一、nginx反向代理

1.1 什么是代理

���向代理:帮助用户访问服务器,缓存服务器内容。

反向代理:代理服务器处理用户的请求,决定转发请求给谁处理负载均衡的作用。

1.2 实现反向代理实验

        nginx可以代理七层(应用层)和四层(网络层),代理七层代理比四层代理看到的东西多功能强大,可以看到真实数据。

        使用模块: proxy_pass   反向代理的服务器地址或域名;

实验结果:由pc2代理服务器,代理服务端pc3处理用户pc1的请求。

①首先准备三台虚拟机且关闭防火墙和selinux,其中pc2和pc3安装nginx。

pc2、pc3执行:

yum  install   epel-release -y 

yum  install   nginx  -y 

#安装nginx

②pc2和pc3上创建子配置文件test.conf

pc2、pc3执行:

cd /etc/nginx/conf.d/

touch test.conf

#进入子配置文件目录创建子配置文件

③服务端pc3子配置文件内容

server {

    root /etc/nginx/html;

#指定虚拟主机根目录

}

④创建服务端pc3虚拟主机的根目录,并写默认内容为this is pc3在index.html中

mkdir  -p /etc/nginx/html;

echo "this is pc3">/etc/nginx/html/index.html

#递归创建文件夹并设置默认主页内容

⑤反向代理服务器pc2的配置文件内容:

server {

    listen 80;

#监听所有80端口

    server_name www.aa.com;

#创建虚拟主机www.aa.com

location /{

proxy_pass http://192.168.200.14

#访问反代的虚拟主机www.lhj.com则由192.168.200.14处理请求

}    

}

⑥代理服务和服务端开启nginx服务,并在pc1客户端添加www.aa.com的对应hosts文件进行测试

pc2、pc3执行:

systemctl start nginx 

pc1执行:

sed -i '1a\192.168.200.13 www.aa.com' /etc/hosts  

#在/etc/hosts文件的第一行添加192.168.200.13 www.aa.com内容

curl  www.aa.com

#访问反向代理服务器

得到内容

this is  pc3

1.3 反向代理多机实验:

将7-4作为代理服务器,7-5、7-6作为Tomcat服务器

#关闭所有服务器的安全防护

#在7-4代理服务器装上nginx的依赖包和nginx

#将作为Tomcat服务器的7-5、7-6都安装上jdk、Tomcat

tar xf jdk-8u291-linux-x64.tar.gz -C /usr/local

ln -s jdk1.8.0_291  jdk

#解压jdk,并做软连接

export JAVA_HOME=/usr/local/jdk

export PATH=$JAVA_HOME/bin:$PATH

export JRE_HOME=$JAVA_HOME/jre 

export CLASSPATH=$JAVA_HOME/lib/:$JRE_HOME/lib/

. /etc/profile.d/jdk.sh

  java -version

#执行程序,查看是否启动

cd /opt

tar xf apache-tomcat-9.0.16.tar.gz  -C /usr/local/

ln -s apache-tomcat-9.0.16   tomcat

二、反向代理负载均衡

nginx反向代理负载均衡中用的是upstream模块,应用于http模块中,目的为可为所有server模块提供服务,默认算法为轮询。

使用格式:

upstream    name(反代名称){

server   后端服务器地址   [算法]  [其他配置] ;

}

其他配置:①max_conns=数字;设置最大活动连接数,默认为0表示无限制

                  ②max_fails=数字;后端服务器下载条件,对本次调度选择的后端服务器进行连续检查,如果都失败标记不可用,默认1次

                  ③fail_timeout=time;后的服务器上行时间,坏掉后修复需要检查多久才能上线使用,默认检查10s

                  ④backup 设置为备份服务器,所有服务器不可用时使用此服务,注意不能指定自己;

                  ⑤down 指定此服务器down状态,无论本身是什么状态;

 

2.1、反向代理负载均衡调度算法

①轮询算法

默认算法是轮询算法即反向代理服务器处理用户请求时,每个后端服务器都轮流给。

upstream   lhj{   server         http://192.168.30.11;

                          server        http://192.168.30.12;

}

②加权轮询算法

在默认轮询的基础上增加权重,weight=number。如果后端有2个服务器其中一个配置权重为weight=3另外一个不配置默认是1,则有用户访问时分配给给有权重的服务器和不配置权重的服务器的比例为3:

upstream   lhj{   server         http://192.168.30.11        weight=3;

                          server        http://192.168.30.12;

}

③最小连接数算法

按照nginx反向代理服务器和后端服务器的连接数分配请求,连接越少的分配处理请求优先级越高。例如若最小连接数(least_conn;)是设置是3,后端服务器1有2个请求在处理,而后端服务器2只有一个请求在处理则新请求交给后端服务器

upstream   lhj{    least_conn;

                          server         http://192.168.30.11;

                          server        http://192.168.30.12;

}

④ip、url  哈希算法

每个请求按访问ip或者url的hash结果分配,这样每个访客固定访问一个后端服务器,不需要知道是如何计算的,只要了解会固定访问一个后端服务器即可。

⑤响应时间fair算法

需要解读nginx第三方模块ngx_http_upstream_fair_module实现,配置时max_fails=number为后端服务器配置,默认单位为秒,按照响应时间来处理请求,响应时间越短越优先分配

2.2 实现反向代理负载均衡实验

使用变量:$remote_root

        实验结果:

        用户pc1访问代理服务的www.aa.com虚拟主机域名时,若由服务端pc3服务器处理则返回this is pc3若由服务端pc4服务器处理则返回this is pc4 用nginx反向代理实现负载均衡。

①首先准备四台虚拟机且关闭防火墙和selinux,其中pc2、pc3、pc4安装nginx。

pc2、pc3、pc4执行:

yum  install   epel-release -y 

yum  install   nginx  -y 

#安装nginx

②pc2、pc3、pc4上创建子配置文件test.conf

pc2、pc3、pc4执行:

cd /etc/nginx/conf.d/

touch test.conf

#进入子配置文件目录创建子配置文件

③服务端pc3子配置文件内容

server {

    root /etc/nginx/html;

#指定虚拟主机根目录

}

④创建服务端pc3虚拟主机的根目录,并写默认内容为this is pc3在index.html中

mkdir  -p /etc/nginx/html;

echo "this is pc3">/etc/nginx/html/index.html

#递归创建文件夹并设置默认主页内容

⑤服务端pc4子配置文件内容

server {

    root /etc/nginx/html;

#指定虚拟主机根目录

}

⑥服务端pc4子配置文件内容

server {

    root /etc/nginx/html;

#指定虚拟主机根目录

}

⑦创建服务端pc4虚拟主机的根目录,并写默认内容为this is pc4在index.html中

mkdir  -p /etc/nginx/html;

echo "this is pc4">/etc/nginx/html/index.html

⑧反向代理服务器pc2的主配置文件和子配置文件修改:

主配置文件内容修改:

vim /etc/nginx/nginx.conf

#打开主配置文件,在主配置文件的http模块中添加内容如下:

upstream  lhj {

#创建名字为lhj的方向代理负载均衡

    server 192.168.30.13;

#服务端pc3地址

    server 192.168.30.14;

#服务端pc4地址

}

#子配置文件test.conf内容:

server {

    listen 80;

#监听所有80端口

    server_name www.lhj.com;

#创建虚拟主机www.lhj.com

location /{

proxy_pass http://lhj;

#访问反代的虚拟主机www.lhj.com则由反向代理负载均衡lhj来处理请求

}    

}

⑨代理服务和服务端开启nginx服务,并在pc1客户端添加www.lhj.com的对应hosts文件进行测试

pc2、pc3、pc4执行:

systemctl start nginx 

pc1执行:

sed -i '1a\192.168.30.12 www.lhj.com' /etc/hosts  

#在/etc/hosts文件的第一行添加192.168.30.12 www.lhj.com内容

curl  www.lhj.com

#多次使用访问反向代理服务器

得到内容

this is  pc3

this is  pc4的比例大概为1:1

The End
微信